diff options
858 files changed, 64445 insertions, 41985 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index ca7f065bd6..7b212485ba 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -266,7 +266,7 @@ Copyright: lieff License: CC0-1.0 Files: ./thirdparty/miniupnpc/ -Comment: MiniUPnPc +Comment: MiniUPnP Project Copyright: 2005-2021, Thomas Bernard License: BSD-3-clause @@ -369,8 +369,8 @@ License: Apache-2.0 Files: ./thirdparty/pcre2/ Comment: PCRE2 -Copyright: 1997-2020, University of Cambridge - 2009-2020, Zoltan Herczeg +Copyright: 1997-2021, University of Cambridge + 2009-2021, Zoltan Herczeg License: BSD-3-clause Files: ./thirdparty/pvrtccompressor/ @@ -400,7 +400,7 @@ License: Expat Files: ./thirdparty/tinyexr/ Comment: TinyEXR -Copyright: 2014-2020, Syoyo Fujita +Copyright: 2014-2021, Syoyo Fujita 2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC License: BSD-3-clause @@ -447,7 +447,7 @@ License: Zlib Files: ./thirdparty/zstd/ Comment: Zstandard -Copyright: 2016-2020, Facebook, Inc. +Copyright: 2016-2021, Facebook, Inc. License: BSD-3-clause diff --git a/SConstruct b/SConstruct index fea0e0ab28..83bd1560ff 100644 --- a/SConstruct +++ b/SConstruct @@ -16,7 +16,6 @@ from collections import OrderedDict import methods import glsl_builders import gles3_builders -from platform_methods import run_in_subprocess # Scan possible build platforms @@ -301,6 +300,13 @@ opts.Update(env_base) env_base["platform"] = selected_platform # Must always be re-set after calling opts.Update(). Help(opts.GenerateHelpText(env_base)) +# Detect and print a warning listing unknown SCons variables to ease troubleshooting. +unknown = opts.UnknownVariables() +if unknown: + print("WARNING: Unknown SCons variables were passed and will be ignored:") + for item in unknown.items(): + print(" " + item[0] + "=" + item[1]) + # add default include paths env_base.Prepend(CPPPATH=["#"]) @@ -706,20 +712,14 @@ if selected_platform in platform_list: suffix="glsl.gen.h", src_suffix=".glsl", ), + "GLES3_GLSL": env.Builder( + action=env.Run(gles3_builders.build_gles3_headers, 'Building GLES3 GLSL header: "$TARGET"'), + suffix="glsl.gen.h", + src_suffix=".glsl", + ), } env.Append(BUILDERS=GLSL_BUILDERS) - if not env["platform"] == "server": - env.Append( - BUILDERS={ - "GLES3_GLSL": env.Builder( - action=run_in_subprocess(gles3_builders.build_gles3_headers), - suffix="glsl.gen.h", - src_suffix=".glsl", - ) - } - ) - scons_cache_path = os.environ.get("SCONS_CACHE") if scons_cache_path != None: CacheDir(scons_cache_path) diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index f37e7f5956..336f95c925 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -368,12 +368,12 @@ void ProjectSettings::_convert_to_last_version(int p_from_version) { * If a project file is found, load it or fail. * If nothing was found, error out. */ -Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards) { +Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) { // If looking for files in a network client, use it directly if (FileAccessNetworkClient::get_singleton()) { Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); - if (err == OK) { + if (err == OK && !p_ignore_override) { // Optional, we don't mind if it fails _load_settings_text("res://override.cfg"); } @@ -387,7 +387,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b ERR_FAIL_COND_V_MSG(!ok, ERR_CANT_OPEN, "Cannot open resource pack '" + p_main_pack + "'."); Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); - if (err == OK) { + if (err == OK && !p_ignore_override) { // Load override from location of the main pack // Optional, we don't mind if it fails _load_settings_text(p_main_pack.get_base_dir().plus_file("override.cfg")); @@ -437,7 +437,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b // If we opened our package, try and load our project. if (found) { Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); - if (err == OK) { + if (err == OK && !p_ignore_override) { // Load override from location of the executable. // Optional, we don't mind if it fails. _load_settings_text(exec_path.get_base_dir().plus_file("override.cfg")); @@ -458,7 +458,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b } Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); - if (err == OK) { + if (err == OK && !p_ignore_override) { // Optional, we don't mind if it fails. _load_settings_text("res://override.cfg"); } @@ -481,7 +481,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b resource_path = current_dir; resource_path = resource_path.replace("\\", "/"); // Windows path to Unix path just in case. err = _load_settings_text_or_binary(current_dir.plus_file("project.godot"), current_dir.plus_file("project.binary")); - if (err == OK) { + if (err == OK && !p_ignore_override) { // Optional, we don't mind if it fails. _load_settings_text(current_dir.plus_file("override.cfg")); found = true; @@ -513,8 +513,8 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b return OK; } -Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards) { - Error err = _setup(p_path, p_main_pack, p_upwards); +Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) { + Error err = _setup(p_path, p_main_pack, p_upwards, p_ignore_override); if (err == OK) { String custom_settings = GLOBAL_DEF("application/config/project_settings_override", ""); if (custom_settings != "") { diff --git a/core/config/project_settings.h b/core/config/project_settings.h index ca37401751..aaa8e383f7 100644 --- a/core/config/project_settings.h +++ b/core/config/project_settings.h @@ -117,7 +117,7 @@ protected: void _add_property_info_bind(const Dictionary &p_info); - Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false); + Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false); void _add_builtin_input_map(); @@ -156,7 +156,7 @@ public: void set_builtin_order(const String &p_name); bool is_builtin_setting(const String &p_name) const; - Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false); + Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false); Error save_custom(const String &p_path = "", const CustomMap &p_custom = CustomMap(), const Vector<String> &p_custom_features = Vector<String>(), bool p_merge_with_current = true); Error save(); diff --git a/core/core_bind.cpp b/core/core_bind.cpp index d42d39a159..0bf6efc96d 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -315,6 +315,10 @@ Error OS::set_thread_name(const String &p_name) { return ::Thread::get_caller_id(); }; +::Thread::ID OS::get_main_thread_id() const { + return ::Thread::get_main_id(); +}; + bool OS::has_feature(const String &p_feature) const { return ::OS::get_singleton()->has_feature(p_feature); } @@ -601,6 +605,7 @@ void OS::_bind_methods() { ClassDB::bind_method(D_METHOD("set_thread_name", "name"), &OS::set_thread_name); ClassDB::bind_method(D_METHOD("get_thread_caller_id"), &OS::get_thread_caller_id); + ClassDB::bind_method(D_METHOD("get_main_thread_id"), &OS::get_main_thread_id); ClassDB::bind_method(D_METHOD("has_feature", "tag_name"), &OS::has_feature); diff --git a/core/core_bind.h b/core/core_bind.h index 641e3a33ae..4bacfa720c 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -237,6 +237,7 @@ public: Error set_thread_name(const String &p_name); Thread::ID get_thread_caller_id() const; + Thread::ID get_main_thread_id() const; bool has_feature(const String &p_feature) const; diff --git a/core/extension/gdnative_interface.cpp b/core/extension/gdnative_interface.cpp index 4770c9c65f..19988a26cb 100644 --- a/core/extension/gdnative_interface.cpp +++ b/core/extension/gdnative_interface.cpp @@ -774,13 +774,25 @@ static GDNativeTypePtr gdnative_packed_vector3_array_operator_index_const(const static GDNativeVariantPtr gdnative_array_operator_index(GDNativeTypePtr p_self, GDNativeInt p_index) { Array *self = (Array *)p_self; ERR_FAIL_INDEX_V(p_index, self->size(), nullptr); - return (GDNativeTypePtr)&self[p_index]; + return (GDNativeVariantPtr)&self->operator[](p_index); } static GDNativeVariantPtr gdnative_array_operator_index_const(const GDNativeTypePtr p_self, GDNativeInt p_index) { const Array *self = (const Array *)p_self; ERR_FAIL_INDEX_V(p_index, self->size(), nullptr); - return (GDNativeTypePtr)&self[p_index]; + return (GDNativeVariantPtr)&self->operator[](p_index); +} + +/* Dictionary functions */ + +static GDNativeVariantPtr gdnative_dictionary_operator_index(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) { + Dictionary *self = (Dictionary *)p_self; + return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key); +} + +static GDNativeVariantPtr gdnative_dictionary_operator_index_const(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) { + const Dictionary *self = (const Dictionary *)p_self; + return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key); } /* OBJECT API */ @@ -1001,6 +1013,11 @@ void gdnative_setup_interface(GDNativeInterface *p_interface) { gdni.array_operator_index = gdnative_array_operator_index; gdni.array_operator_index_const = gdnative_array_operator_index_const; + /* Dictionary functions */ + + gdni.dictionary_operator_index = gdnative_dictionary_operator_index; + gdni.dictionary_operator_index_const = gdnative_dictionary_operator_index_const; + /* OBJECT */ gdni.object_method_bind_call = gdnative_object_method_bind_call; diff --git a/core/extension/gdnative_interface.h b/core/extension/gdnative_interface.h index 8f8cb5a3e0..e411a9d85b 100644 --- a/core/extension/gdnative_interface.h +++ b/core/extension/gdnative_interface.h @@ -417,6 +417,11 @@ typedef struct { GDNativeVariantPtr (*array_operator_index)(GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr GDNativeVariantPtr (*array_operator_index_const)(const GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr + /* Dictionary functions */ + + GDNativeVariantPtr (*dictionary_operator_index)(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr + GDNativeVariantPtr (*dictionary_operator_index_const)(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr + /* OBJECT */ void (*object_method_bind_call)(const GDNativeMethodBindPtr p_method_bind, GDNativeObjectPtr p_instance, const GDNativeVariantPtr *p_args, GDNativeInt p_arg_count, GDNativeVariantPtr r_ret, GDNativeCallError *r_error); diff --git a/core/input/input.cpp b/core/input/input.cpp index 4b5a84f401..d0144ca47f 100644 --- a/core/input/input.cpp +++ b/core/input/input.cpp @@ -91,6 +91,7 @@ Input::MouseMode Input::get_mouse_mode() const { void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("is_key_pressed", "keycode"), &Input::is_key_pressed); + ClassDB::bind_method(D_METHOD("is_physical_key_pressed", "keycode"), &Input::is_physical_key_pressed); ClassDB::bind_method(D_METHOD("is_mouse_button_pressed", "button"), &Input::is_mouse_button_pressed); ClassDB::bind_method(D_METHOD("is_joy_button_pressed", "device", "button"), &Input::is_joy_button_pressed); ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false)); @@ -223,6 +224,11 @@ bool Input::is_key_pressed(Key p_keycode) const { return keys_pressed.has(p_keycode); } +bool Input::is_physical_key_pressed(Key p_keycode) const { + _THREAD_SAFE_METHOD_ + return physical_keys_pressed.has(p_keycode); +} + bool Input::is_mouse_button_pressed(MouseButton p_button) const { _THREAD_SAFE_METHOD_ return (mouse_button_mask & mouse_button_to_mask(p_button)) != MouseButton::NONE; @@ -465,6 +471,13 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em keys_pressed.erase(k->get_keycode()); } } + if (k.is_valid() && !k->is_echo() && k->get_physical_keycode() != Key::NONE) { + if (k->is_pressed()) { + physical_keys_pressed.insert(k->get_physical_keycode()); + } else { + physical_keys_pressed.erase(k->get_physical_keycode()); + } + } Ref<InputEventMouseButton> mb = p_event; @@ -714,11 +727,11 @@ Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, con // detect the warp: if the relative distance is greater than the half of the size of the relevant rect // (checked per each axis), it will be considered as the consequence of a former pointer warp. - const Point2i rel_sgn(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1); + const Point2i rel_sign(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1); const Size2i warp_margin = p_rect.size * 0.5f; const Point2i rel_warped( - Math::fmod(p_motion->get_relative().x + rel_sgn.x * warp_margin.x, p_rect.size.x) - rel_sgn.x * warp_margin.x, - Math::fmod(p_motion->get_relative().y + rel_sgn.y * warp_margin.y, p_rect.size.y) - rel_sgn.y * warp_margin.y); + Math::fmod(p_motion->get_relative().x + rel_sign.x * warp_margin.x, p_rect.size.x) - rel_sign.x * warp_margin.x, + Math::fmod(p_motion->get_relative().y + rel_sign.y * warp_margin.y, p_rect.size.y) - rel_sign.y * warp_margin.y); const Point2i pos_local = p_motion->get_global_position() - p_rect.position; const Point2i pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y)); @@ -862,6 +875,7 @@ void Input::release_pressed_events() { flush_buffered_events(); // this is needed to release actions strengths keys_pressed.clear(); + physical_keys_pressed.clear(); joy_buttons_pressed.clear(); _joy_axis.clear(); diff --git a/core/input/input.h b/core/input/input.h index dd57ebb563..faec654a3c 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -87,6 +87,7 @@ public: private: MouseButton mouse_button_mask = MouseButton::NONE; + Set<Key> physical_keys_pressed; Set<Key> keys_pressed; Set<JoyButton> joy_buttons_pressed; Map<JoyAxis, float> _joy_axis; @@ -247,6 +248,7 @@ public: static Input *get_singleton(); bool is_key_pressed(Key p_keycode) const; + bool is_physical_key_pressed(Key p_keycode) const; bool is_mouse_button_pressed(MouseButton p_button) const; bool is_joy_button_pressed(int p_device, JoyButton p_button) const; bool is_action_pressed(const StringName &p_action, bool p_exact = false) const; diff --git a/core/io/packed_data_container.cpp b/core/io/packed_data_container.cpp index 4a76f0191d..d34b5b6fe3 100644 --- a/core/io/packed_data_container.cpp +++ b/core/io/packed_data_container.cpp @@ -100,6 +100,7 @@ Variant PackedDataContainer::_iter_get_ofs(const Variant &p_iter, uint32_t p_off } Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, bool &err) const { + ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant()); uint32_t type = decode_uint32(p_buf + p_ofs); if (type == TYPE_ARRAY || type == TYPE_DICT) { @@ -122,6 +123,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b } uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const { + ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0); const uint8_t *rd = data.ptr(); ERR_FAIL_COND_V(!rd, 0); const uint8_t *r = &rd[p_ofs]; @@ -131,6 +133,7 @@ uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const { } int PackedDataContainer::_size(uint32_t p_ofs) const { + ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0); const uint8_t *rd = data.ptr(); ERR_FAIL_COND_V(!rd, 0); const uint8_t *r = &rd[p_ofs]; @@ -149,6 +152,7 @@ int PackedDataContainer::_size(uint32_t p_ofs) const { } Variant PackedDataContainer::_key_at_ofs(uint32_t p_ofs, const Variant &p_key, bool &err) const { + ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant()); const uint8_t *rd = data.ptr(); if (!rd) { err = true; diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp index 806a95398f..8d75581342 100644 --- a/core/io/pck_packer.cpp +++ b/core/io/pck_packer.cpp @@ -47,13 +47,14 @@ static int _get_pad(int p_alignment, int p_n) { } void PCKPacker::_bind_methods() { - ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(0), DEFVAL(String()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(32), DEFVAL("0000000000000000000000000000000000000000000000000000000000000000"), DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_file", "pck_path", "source_path", "encrypt"), &PCKPacker::add_file, DEFVAL(false)); ClassDB::bind_method(D_METHOD("flush", "verbose"), &PCKPacker::flush, DEFVAL(false)); } Error PCKPacker::pck_start(const String &p_file, int p_alignment, const String &p_key, bool p_encrypt_directory) { ERR_FAIL_COND_V_MSG((p_key.is_empty() || !p_key.is_valid_hex_number(false) || p_key.length() != 64), ERR_CANT_CREATE, "Invalid Encryption Key (must be 64 characters long)."); + ERR_FAIL_COND_V_MSG(p_alignment <= 0, ERR_CANT_CREATE, "Invalid alignment, must be greater then 0."); String _key = p_key.to_lower(); key.resize(32); diff --git a/core/io/pck_packer.h b/core/io/pck_packer.h index 3d2ce8f240..bd8902a01d 100644 --- a/core/io/pck_packer.h +++ b/core/io/pck_packer.h @@ -58,7 +58,7 @@ class PCKPacker : public RefCounted { Vector<File> files; public: - Error pck_start(const String &p_file, int p_alignment = 0, const String &p_key = String(), bool p_encrypt_directory = false); + Error pck_start(const String &p_file, int p_alignment = 32, const String &p_key = "0000000000000000000000000000000000000000000000000000000000000000", bool p_encrypt_directory = false); Error add_file(const String &p_file, const String &p_src, bool p_encrypt = false); Error flush(bool p_verbose = false); diff --git a/core/io/resource_importer.h b/core/io/resource_importer.h index a1cacbd306..cd583e2533 100644 --- a/core/io/resource_importer.h +++ b/core/io/resource_importer.h @@ -134,8 +134,8 @@ public: virtual int get_preset_count() const { return 0; } virtual String get_preset_name(int p_idx) const { return String(); } - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const = 0; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const = 0; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const = 0; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const = 0; virtual String get_option_group_file() const { return String(); } virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) = 0; diff --git a/core/math/basis.cpp b/core/math/basis.cpp index 3d893afb4d..566300c716 100644 --- a/core/math/basis.cpp +++ b/core/math/basis.cpp @@ -261,7 +261,7 @@ Vector3 Basis::get_scale_abs() const { } Vector3 Basis::get_scale_local() const { - real_t det_sign = SGN(determinant()); + real_t det_sign = SIGN(determinant()); return det_sign * Vector3(elements[0].length(), elements[1].length(), elements[2].length()); } @@ -287,7 +287,7 @@ Vector3 Basis::get_scale() const { // matrix elements. // // The rotation part of this decomposition is returned by get_rotation* functions. - real_t det_sign = SGN(determinant()); + real_t det_sign = SIGN(determinant()); return det_sign * get_scale_abs(); } diff --git a/core/math/geometry_2d.h b/core/math/geometry_2d.h index 6010159597..028ac0f4eb 100644 --- a/core/math/geometry_2d.h +++ b/core/math/geometry_2d.h @@ -181,8 +181,7 @@ public: D = Vector2(D.x * Bn.x + D.y * Bn.y, D.y * Bn.x - D.x * Bn.y); // Fail if C x B and D x B have the same sign (segments don't intersect). - // (equivalent to condition (C.y < 0 && D.y < CMP_EPSILON) || (C.y > 0 && D.y > CMP_EPSILON)) - if (C.y * D.y > CMP_EPSILON) { + if ((C.y < -CMP_EPSILON && D.y < -CMP_EPSILON) || (C.y > CMP_EPSILON && D.y > CMP_EPSILON)) { return false; } diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp index bbed257f60..2b6d92fe0e 100644 --- a/core/math/math_funcs.cpp +++ b/core/math/math_funcs.cpp @@ -53,6 +53,10 @@ uint32_t Math::rand() { return default_rand.rand(); } +double Math::randfn(double mean, double deviation) { + return default_rand.randfn(mean, deviation); +} + int Math::step_decimals(double p_step) { static const int maxn = 10; static const double sd[maxn] = { diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index b3eabd3e7a..8df45255c9 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -266,8 +266,8 @@ public: float s = CLAMP((p_s - p_from) / (p_to - p_from), 0.0f, 1.0f); return s * s * (3.0f - 2.0f * s); } - static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; } - static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; } + static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; } + static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; } static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; } static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; } @@ -318,6 +318,7 @@ public: static uint32_t rand(); static _ALWAYS_INLINE_ double randd() { return (double)rand() / (double)Math::RANDOM_32BIT_MAX; } static _ALWAYS_INLINE_ float randf() { return (float)rand() / (float)Math::RANDOM_32BIT_MAX; } + static double randfn(double mean, double deviation); static double random(double from, double to); static float random(float from, float to); diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp index df43c605f9..4bdeaa2a58 100644 --- a/core/math/transform_2d.cpp +++ b/core/math/transform_2d.cpp @@ -69,12 +69,12 @@ void Transform2D::rotate(const real_t p_phi) { real_t Transform2D::get_skew() const { real_t det = basis_determinant(); - return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5; + return Math::acos(elements[0].normalized().dot(SIGN(det) * elements[1].normalized())) - Math_PI * 0.5; } void Transform2D::set_skew(const real_t p_angle) { real_t det = basis_determinant(); - elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length(); + elements[1] = SIGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length(); } real_t Transform2D::get_rotation() const { @@ -111,7 +111,7 @@ Transform2D::Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t } Size2 Transform2D::get_scale() const { - real_t det_sign = SGN(basis_determinant()); + real_t det_sign = SIGN(basis_determinant()); return Size2(elements[0].length(), det_sign * elements[1].length()); } diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp index 6259bdead0..718e94eee4 100644 --- a/core/math/vector2.cpp +++ b/core/math/vector2.cpp @@ -79,7 +79,7 @@ real_t Vector2::angle_to(const Vector2 &p_vector2) const { } real_t Vector2::angle_to_point(const Vector2 &p_vector2) const { - return (*this - p_vector2).angle(); + return (p_vector2 - *this).angle(); } real_t Vector2::dot(const Vector2 &p_other) const { @@ -91,7 +91,7 @@ real_t Vector2::cross(const Vector2 &p_other) const { } Vector2 Vector2::sign() const { - return Vector2(SGN(x), SGN(y)); + return Vector2(SIGN(x), SIGN(y)); } Vector2 Vector2::floor() const { diff --git a/core/math/vector2.h b/core/math/vector2.h index 332c0475fa..0a7b9d3faf 100644 --- a/core/math/vector2.h +++ b/core/math/vector2.h @@ -345,7 +345,7 @@ struct Vector2i { bool operator!=(const Vector2i &p_vec2) const; real_t aspect() const { return width / (real_t)height; } - Vector2i sign() const { return Vector2i(SGN(x), SGN(y)); } + Vector2i sign() const { return Vector2i(SIGN(x), SIGN(y)); } Vector2i abs() const { return Vector2i(ABS(x), ABS(y)); } Vector2i clamp(const Vector2i &p_min, const Vector2i &p_max) const; diff --git a/core/math/vector3.h b/core/math/vector3.h index dc9aa60458..02a56f684e 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -217,7 +217,7 @@ Vector3 Vector3::abs() const { } Vector3 Vector3::sign() const { - return Vector3(SGN(x), SGN(y), SGN(z)); + return Vector3(SIGN(x), SIGN(y), SIGN(z)); } Vector3 Vector3::floor() const { diff --git a/core/math/vector3i.h b/core/math/vector3i.h index 9308d09045..10c28a5bb9 100644 --- a/core/math/vector3i.h +++ b/core/math/vector3i.h @@ -115,7 +115,7 @@ Vector3i Vector3i::abs() const { } Vector3i Vector3i::sign() const { - return Vector3i(SGN(x), SGN(y), SGN(z)); + return Vector3i(SIGN(x), SIGN(y), SIGN(z)); } /* Operators */ diff --git a/core/object/object.cpp b/core/object/object.cpp index 498f116997..90bd697d37 100644 --- a/core/object/object.cpp +++ b/core/object/object.cpp @@ -628,7 +628,10 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons script_instance->get_property_list(p_list); } - _get_property_listv(p_list, p_reversed); + if (_extension) { + p_list->push_back(PropertyInfo(Variant::NIL, _extension->class_name, PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY)); + ClassDB::get_property_list(_extension->class_name, p_list, true, this); + } if (_extension && _extension->get_property_list) { uint32_t pcount; @@ -641,6 +644,8 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons } } + _get_property_listv(p_list, p_reversed); + if (!is_class("Script")) { // can still be set, but this is for user-friendliness p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT)); } @@ -1405,7 +1410,7 @@ void Object::_disconnect(const StringName &p_signal, const Callable &p_callable, ERR_FAIL_COND_MSG(!s->slot_map.has(*p_callable.get_base_comparator()), "Disconnecting nonexistent signal '" + p_signal + "', callable: " + p_callable + "."); - SignalData::Slot *slot = &s->slot_map[p_callable]; + SignalData::Slot *slot = &s->slot_map[*p_callable.get_base_comparator()]; if (!p_force) { slot->reference_count--; // by default is zero, if it was not referenced it will go below it diff --git a/core/os/os.h b/core/os/os.h index 52bf731501..3042696cce 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -243,7 +243,7 @@ public: void set_stdout_enabled(bool p_enabled); void set_stderr_enabled(bool p_enabled); - bool is_single_window() const; + virtual bool is_single_window() const; virtual void disable_crash_handler() {} virtual bool is_disable_crash_handler() const { return false; } @@ -298,6 +298,7 @@ public: virtual void set_exit_code(int p_code); virtual int get_processor_count() const; + virtual int get_default_thread_pool_size() const { return get_processor_count(); } virtual String get_unique_id() const; diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index 4798cab641..70236231a2 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -38,6 +38,7 @@ #include "core/string/translation.h" #include "core/string/ucaps.h" #include "core/variant/variant.h" +#include "core/version_generated.gen.h" #include <stdio.h> #include <stdlib.h> @@ -4868,15 +4869,20 @@ String TTRN(const String &p_text, const String &p_text_plural, int p_n, const St return p_text_plural; } +/* DTR and DTRN are used for the documentation, handling descriptions extracted + * from the XML. + * They also replace `$DOCS_URL` with the actual URL to the documentation's branch, + * to allow dehardcoding it in the XML and doing proper substitutions everywhere. + */ String DTR(const String &p_text, const String &p_context) { // Comes straight from the XML, so remove indentation and any trailing whitespace. const String text = p_text.dedent().strip_edges(); if (TranslationServer::get_singleton()) { - return TranslationServer::get_singleton()->doc_translate(text, p_context); + return String(TranslationServer::get_singleton()->doc_translate(text, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL); } - return text; + return text.replace("$DOCS_URL", VERSION_DOCS_URL); } String DTRN(const String &p_text, const String &p_text_plural, int p_n, const String &p_context) { @@ -4884,14 +4890,14 @@ String DTRN(const String &p_text, const String &p_text_plural, int p_n, const St const String text_plural = p_text_plural.dedent().strip_edges(); if (TranslationServer::get_singleton()) { - return TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context); + return String(TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL); } // Return message based on English plural rule if translation is not possible. if (p_n == 1) { - return text; + return text.replace("$DOCS_URL", VERSION_DOCS_URL); } - return text_plural; + return text_plural.replace("$DOCS_URL", VERSION_DOCS_URL); } #endif diff --git a/core/templates/thread_work_pool.cpp b/core/templates/thread_work_pool.cpp index 17969a2c90..710f043a4a 100644 --- a/core/templates/thread_work_pool.cpp +++ b/core/templates/thread_work_pool.cpp @@ -47,7 +47,7 @@ void ThreadWorkPool::_thread_function(void *p_user) { void ThreadWorkPool::init(int p_thread_count) { ERR_FAIL_COND(threads != nullptr); if (p_thread_count < 0) { - p_thread_count = OS::get_singleton()->get_processor_count(); + p_thread_count = OS::get_singleton()->get_default_thread_pool_size(); } thread_count = p_thread_count; diff --git a/core/typedefs.h b/core/typedefs.h index 9ab874b2f0..95bd423817 100644 --- a/core/typedefs.h +++ b/core/typedefs.h @@ -91,8 +91,8 @@ #define ABS(m_v) (((m_v) < 0) ? (-(m_v)) : (m_v)) #endif -#ifndef SGN -#define SGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0))) +#ifndef SIGN +#define SIGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0))) #endif #ifndef MIN diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp index e89bdd4faa..554b2f1c25 100644 --- a/core/variant/variant_utility.cpp +++ b/core/variant/variant_utility.cpp @@ -151,10 +151,10 @@ struct VariantUtilityFunctions { r_error.error = Callable::CallError::CALL_OK; switch (x.get_type()) { case Variant::INT: { - return SGN(VariantInternalAccessor<int64_t>::get(&x)); + return SIGN(VariantInternalAccessor<int64_t>::get(&x)); } break; case Variant::FLOAT: { - return SGN(VariantInternalAccessor<double>::get(&x)); + return SIGN(VariantInternalAccessor<double>::get(&x)); } break; case Variant::VECTOR2: { return VariantInternalAccessor<Vector2>::get(&x).sign(); @@ -176,11 +176,11 @@ struct VariantUtilityFunctions { } static inline double signf(double x) { - return SGN(x); + return SIGN(x); } static inline int64_t signi(int64_t x) { - return SGN(x); + return SIGN(x); } static inline double pow(double x, double y) { @@ -403,6 +403,10 @@ struct VariantUtilityFunctions { return Math::randf(); } + static inline double randfn(double mean, double deviation) { + return Math::randfn(mean, deviation); + } + static inline int64_t randi_range(int64_t from, int64_t to) { return Math::random((int32_t)from, (int32_t)to); } @@ -1239,6 +1243,7 @@ void Variant::_register_variant_utility_functions() { FUNCBINDR(randf, sarray(), Variant::UTILITY_FUNC_TYPE_RANDOM); FUNCBINDR(randi_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM); FUNCBINDR(randf_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM); + FUNCBINDR(randfn, sarray("mean", "deviation"), Variant::UTILITY_FUNC_TYPE_RANDOM); FUNCBIND(seed, sarray("base"), Variant::UTILITY_FUNC_TYPE_RANDOM); FUNCBINDR(rand_from_seed, sarray("seed"), Variant::UTILITY_FUNC_TYPE_RANDOM); diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 21b5147386..9cfe494b7f 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -723,6 +723,14 @@ [/codeblock] </description> </method> + <method name="randfn"> + <return type="float" /> + <argument index="0" name="mean" type="float" /> + <argument index="1" name="deviation" type="float" /> + <description> + Returns a normally-distributed pseudo-random floating point value using Box-Muller transform with the specified [code]mean[/code] and a standard [code]deviation[/code]. This is also called Gaussian distribution. + </description> + </method> <method name="randi"> <return type="int" /> <description> diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml index 15d146fba1..170cfea6f9 100644 --- a/doc/classes/AABB.xml +++ b/doc/classes/AABB.xml @@ -9,9 +9,9 @@ [b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses integer coordinates. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> - <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> + <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link> </tutorials> <constructors> <constructor name="AABB"> @@ -233,12 +233,15 @@ <return type="bool" /> <argument index="0" name="right" type="AABB" /> <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="AABB" /> <argument index="0" name="right" type="Transform3D" /> <description> + Inversely transforms (multiplies) the [AABB] by the given [Transform3D] transformation matrix. </description> </operator> <operator name="operator =="> @@ -250,6 +253,8 @@ <return type="bool" /> <argument index="0" name="right" type="AABB" /> <description> + Returns [code]true[/code] if the AABBs 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> </operators> diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml index b468e1d109..789c6bd960 100644 --- a/doc/classes/AnimatedSprite2D.xml +++ b/doc/classes/AnimatedSprite2D.xml @@ -8,7 +8,7 @@ [b]Note:[/b] You can associate a set of normal or specular maps by creating additional [SpriteFrames] resources with a [code]_normal[/code] or [code]_specular[/code] suffix. For example, having 3 [SpriteFrames] resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/code] will make it so the [code]run[/code] animation uses normal and specular maps. </description> <tutorials> - <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link> + <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> </tutorials> <methods> diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml index 59d7553ef4..38a87c1b2b 100644 --- a/doc/classes/AnimatedSprite3D.xml +++ b/doc/classes/AnimatedSprite3D.xml @@ -7,7 +7,7 @@ Animations are created using a [SpriteFrames] resource, which can be configured in the editor via the SpriteFrames panel. </description> <tutorials> - <link title="2D Sprite animation (also applies to 3D)">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link> + <link title="2D Sprite animation (also applies to 3D)">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link> </tutorials> <methods> <method name="is_playing" qualifiers="const"> diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index dca943dec6..bb4089d67e 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -28,7 +28,7 @@ Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] to be played back. Animation tracks have different types, each with its own set of dedicated methods. Check [enum TrackType] to see available types. </description> <tutorials> - <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link> + <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link> </tutorials> <methods> <method name="add_track"> @@ -130,6 +130,14 @@ Sets the stream of the key identified by [code]key_idx[/code] to value [code]stream[/code]. The [code]track_idx[/code] must be the index of an Audio Track. </description> </method> + <method name="bezier_track_get_key_handle_mode" qualifiers="const"> + <return type="int" /> + <argument index="0" name="track_idx" type="int" /> + <argument index="1" name="key_idx" type="int" /> + <description> + Returns the handle mode of the key identified by [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track. + </description> + </method> <method name="bezier_track_get_key_in_handle" qualifiers="const"> <return type="Vector2" /> <argument index="0" name="track_idx" type="int" /> @@ -161,6 +169,7 @@ <argument index="2" name="value" type="float" /> <argument index="3" name="in_handle" type="Vector2" default="Vector2(0, 0)" /> <argument index="4" name="out_handle" type="Vector2" default="Vector2(0, 0)" /> + <argument index="5" name="handle_mode" type="int" enum="Animation.HandleMode" default="1" /> <description> Inserts a Bezier Track key at the given [code]time[/code] in seconds. The [code]track_idx[/code] must be the index of a Bezier Track. [code]in_handle[/code] is the left-side weight of the added Bezier curve point, [code]out_handle[/code] is the right-side one, while [code]value[/code] is the actual value at this point. @@ -174,11 +183,22 @@ Returns the interpolated value at the given [code]time[/code] (in seconds). The [code]track_idx[/code] must be the index of a Bezier Track. </description> </method> + <method name="bezier_track_set_key_handle_mode"> + <return type="void" /> + <argument index="0" name="track_idx" type="int" /> + <argument index="1" name="key_idx" type="int" /> + <argument index="2" name="key_handle_mode" type="int" enum="Animation.HandleMode" /> + <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" /> + <description> + Changes the handle mode of the keyframe at the given [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track. + </description> + </method> <method name="bezier_track_set_key_in_handle"> <return type="void" /> <argument index="0" name="track_idx" type="int" /> <argument index="1" name="key_idx" type="int" /> <argument index="2" name="in_handle" type="Vector2" /> + <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" /> <description> Sets the in handle of the key identified by [code]key_idx[/code] to value [code]in_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track. </description> @@ -188,6 +208,7 @@ <argument index="0" name="track_idx" type="int" /> <argument index="1" name="key_idx" type="int" /> <argument index="2" name="out_handle" type="Vector2" /> + <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" /> <description> Sets the out handle of the key identified by [code]key_idx[/code] to value [code]out_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track. </description> @@ -619,5 +640,11 @@ <constant name="LOOP_PINGPONG" value="2" enum="LoopMode"> Repeats playback and reverse playback at both ends of the animation. </constant> + <constant name="HANDLE_MODE_FREE" value="0" enum="HandleMode"> + Assigning the free handle mode to a Bezier Track's keyframe allows you to edit the keyframe's left and right handles independently from one another. + </constant> + <constant name="HANDLE_MODE_BALANCED" value="1" enum="HandleMode"> + Assigning the balanced handle mode to a Bezier Track's keyframe makes it so the two handles of the keyframe always stay aligned when changing either the keyframe's left or right handle. + </constant> </constants> </class> diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml index 6bc44ea0a0..c9d8ae9936 100644 --- a/doc/classes/AnimationNode.xml +++ b/doc/classes/AnimationNode.xml @@ -8,7 +8,7 @@ Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], otherwise [AnimationRootNode] should be used instead. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <methods> <method name="_get_caption" qualifiers="virtual const"> diff --git a/doc/classes/AnimationNodeAdd2.xml b/doc/classes/AnimationNodeAdd2.xml index 20ee33209b..472f98a5b3 100644 --- a/doc/classes/AnimationNodeAdd2.xml +++ b/doc/classes/AnimationNodeAdd2.xml @@ -7,7 +7,7 @@ A resource to add to an [AnimationNodeBlendTree]. Blends two animations additively based on an amount value in the [code][0.0, 1.0][/code] range. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> diff --git a/doc/classes/AnimationNodeAdd3.xml b/doc/classes/AnimationNodeAdd3.xml index 26738499bb..9ba4023b79 100644 --- a/doc/classes/AnimationNodeAdd3.xml +++ b/doc/classes/AnimationNodeAdd3.xml @@ -11,7 +11,7 @@ - A +add animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <members> diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml index 076e675007..3df92ad3d3 100644 --- a/doc/classes/AnimationNodeAnimation.xml +++ b/doc/classes/AnimationNodeAnimation.xml @@ -7,7 +7,7 @@ A resource to add to an [AnimationNodeBlendTree]. Only features one output set using the [member animation] property. Use it as an input for [AnimationNode] that blend animations together. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> diff --git a/doc/classes/AnimationNodeBlend2.xml b/doc/classes/AnimationNodeBlend2.xml index 1f7a4c91c8..3b869bc299 100644 --- a/doc/classes/AnimationNodeBlend2.xml +++ b/doc/classes/AnimationNodeBlend2.xml @@ -7,7 +7,7 @@ A resource to add to an [AnimationNodeBlendTree]. Blends two animations linearly based on an amount value in the [code][0.0, 1.0][/code] range. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> diff --git a/doc/classes/AnimationNodeBlend3.xml b/doc/classes/AnimationNodeBlend3.xml index ed827e2535..ae8fce51f2 100644 --- a/doc/classes/AnimationNodeBlend3.xml +++ b/doc/classes/AnimationNodeBlend3.xml @@ -11,7 +11,7 @@ - A +blend animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> diff --git a/doc/classes/AnimationNodeBlendSpace1D.xml b/doc/classes/AnimationNodeBlendSpace1D.xml index 6e55a79fd2..831542b64c 100644 --- a/doc/classes/AnimationNodeBlendSpace1D.xml +++ b/doc/classes/AnimationNodeBlendSpace1D.xml @@ -10,7 +10,7 @@ You can set the extents of the axis using the [member min_space] and [member max_space]. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <methods> <method name="add_blend_point"> diff --git a/doc/classes/AnimationNodeBlendSpace2D.xml b/doc/classes/AnimationNodeBlendSpace2D.xml index 8d51f9aecc..77d1d872e5 100644 --- a/doc/classes/AnimationNodeBlendSpace2D.xml +++ b/doc/classes/AnimationNodeBlendSpace2D.xml @@ -9,7 +9,7 @@ You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to create up the blend space by hand. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/AnimationNodeBlendTree.xml b/doc/classes/AnimationNodeBlendTree.xml index da532dc059..a9f1f7acaa 100644 --- a/doc/classes/AnimationNodeBlendTree.xml +++ b/doc/classes/AnimationNodeBlendTree.xml @@ -7,7 +7,7 @@ This node may contain a sub-tree of any other blend type nodes, such as mix, blend2, blend3, one shot, etc. This is one of the most commonly used roots. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <methods> <method name="add_node"> diff --git a/doc/classes/AnimationNodeOneShot.xml b/doc/classes/AnimationNodeOneShot.xml index 2ecc0ae07b..116b54e39e 100644 --- a/doc/classes/AnimationNodeOneShot.xml +++ b/doc/classes/AnimationNodeOneShot.xml @@ -7,7 +7,7 @@ A resource to add to an [AnimationNodeBlendTree]. This node will execute a sub-animation and return once it finishes. Blend times for fading in and out can be customized, as well as filters. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/AnimationNodeOutput.xml b/doc/classes/AnimationNodeOutput.xml index 34c96d13ea..6241a0fa49 100644 --- a/doc/classes/AnimationNodeOutput.xml +++ b/doc/classes/AnimationNodeOutput.xml @@ -6,7 +6,7 @@ <description> </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> diff --git a/doc/classes/AnimationNodeStateMachine.xml b/doc/classes/AnimationNodeStateMachine.xml index 17ef565b3a..5adea7308d 100644 --- a/doc/classes/AnimationNodeStateMachine.xml +++ b/doc/classes/AnimationNodeStateMachine.xml @@ -18,7 +18,7 @@ [/codeblocks] </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <methods> <method name="add_node"> diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml index 15c6c96302..b299f8654a 100644 --- a/doc/classes/AnimationNodeStateMachinePlayback.xml +++ b/doc/classes/AnimationNodeStateMachinePlayback.xml @@ -18,7 +18,7 @@ [/codeblocks] </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <methods> <method name="get_current_length" qualifiers="const"> diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml index 763bba6e93..948e3506a9 100644 --- a/doc/classes/AnimationNodeStateMachineTransition.xml +++ b/doc/classes/AnimationNodeStateMachineTransition.xml @@ -5,11 +5,11 @@ <description> </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> <members> <member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&"""> - Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]: + Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=$DOCS_URL/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]: [codeblocks] [gdscript] $animation_tree.set("parameters/conditions/idle", is_on_floor and (linear_velocity.x == 0)) diff --git a/doc/classes/AnimationNodeTimeScale.xml b/doc/classes/AnimationNodeTimeScale.xml index 5b40b39bca..33e0127a52 100644 --- a/doc/classes/AnimationNodeTimeScale.xml +++ b/doc/classes/AnimationNodeTimeScale.xml @@ -7,7 +7,7 @@ Allows scaling the speed of the animation (or reversing it) in any children nodes. Setting it to 0 will pause the animation. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> </tutorials> </class> diff --git a/doc/classes/AnimationNodeTimeSeek.xml b/doc/classes/AnimationNodeTimeSeek.xml index d927c663c8..868319272e 100644 --- a/doc/classes/AnimationNodeTimeSeek.xml +++ b/doc/classes/AnimationNodeTimeSeek.xml @@ -27,6 +27,6 @@ [/codeblocks] </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> </tutorials> </class> diff --git a/doc/classes/AnimationNodeTransition.xml b/doc/classes/AnimationNodeTransition.xml index b297832ac0..48961f51a5 100644 --- a/doc/classes/AnimationNodeTransition.xml +++ b/doc/classes/AnimationNodeTransition.xml @@ -7,7 +7,7 @@ Simple state machine for cases which don't require a more advanced [AnimationNodeStateMachine]. Animations can be connected to the inputs and transition times can be specified. </description> <tutorials> - <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index 2fd923df85..9f68edbc92 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -9,8 +9,8 @@ Updating the target properties of animations occurs at process time. </description> <tutorials> - <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link> - <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link> + <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link> + <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/AnimationTree.xml b/doc/classes/AnimationTree.xml index 40dcd950d7..48c5398074 100644 --- a/doc/classes/AnimationTree.xml +++ b/doc/classes/AnimationTree.xml @@ -8,7 +8,7 @@ [b]Note:[/b] When linked with an [AnimationPlayer], several properties and methods of the corresponding [AnimationPlayer] will not function as expected. Playback and transitions should be handled using only the [AnimationTree] and its constituent [AnimationNode](s). The [AnimationPlayer] node should be used solely for adding, deleting, and editing animations. </description> <tutorials> - <link title="Using AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> + <link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml index 8abdaac45f..0f7e6799be 100644 --- a/doc/classes/Area2D.xml +++ b/doc/classes/Area2D.xml @@ -7,7 +7,7 @@ 2D area that detects [CollisionObject2D] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping) and route audio to a custom audio bus. </description> <tutorials> - <link title="Using Area2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html</link> + <link title="Using Area2D">$DOCS_URL/tutorials/physics/using_area_2d.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link> <link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link> diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml index 7b77462322..c986947dfb 100644 --- a/doc/classes/ArrayMesh.xml +++ b/doc/classes/ArrayMesh.xml @@ -47,7 +47,7 @@ [b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes. </description> <tutorials> - <link title="Procedural geometry using the ArrayMesh">https://docs.godotengine.org/en/latest/tutorials/3d/procedural_geometry/arraymesh.html</link> + <link title="Procedural geometry using the ArrayMesh">$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html</link> </tutorials> <methods> <method name="add_blend_shape"> diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml index 600ca93028..ed1cb789e0 100644 --- a/doc/classes/AudioEffectDistortion.xml +++ b/doc/classes/AudioEffectDistortion.xml @@ -9,7 +9,7 @@ By distorting the waveform the frequency content change, which will often make the sound "crunchy" or "abrasive". For games, it can simulate sound coming from some saturated device or speaker very efficiently. </description> <tutorials> - <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="drive" type="float" setter="set_drive" getter="get_drive" default="0.0"> diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml index 5b43646077..4fb1c0e7c9 100644 --- a/doc/classes/AudioEffectFilter.xml +++ b/doc/classes/AudioEffectFilter.xml @@ -7,7 +7,7 @@ Allows frequencies other than the [member cutoff_hz] to pass. </description> <tutorials> - <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff" default="2000.0"> diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml index c572824448..28498f6d8e 100644 --- a/doc/classes/AudioEffectHighShelfFilter.xml +++ b/doc/classes/AudioEffectHighShelfFilter.xml @@ -6,6 +6,6 @@ <description> </description> <tutorials> - <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml index e78dbf9732..4c839dc257 100644 --- a/doc/classes/AudioEffectLowShelfFilter.xml +++ b/doc/classes/AudioEffectLowShelfFilter.xml @@ -6,6 +6,6 @@ <description> </description> <tutorials> - <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectRecord.xml b/doc/classes/AudioEffectRecord.xml index b32206726d..0b6c5287cf 100644 --- a/doc/classes/AudioEffectRecord.xml +++ b/doc/classes/AudioEffectRecord.xml @@ -7,7 +7,7 @@ Allows the user to record sound from a microphone. It sets and gets the format in which the audio file will be recorded (8-bit, 16-bit, or compressed). It checks whether or not the recording is active, and if it is, records the sound. It then returns the recorded sample. </description> <tutorials> - <link title="Recording with microphone">https://docs.godotengine.org/en/latest/tutorials/audio/recording_with_microphone.html</link> + <link title="Recording with microphone">$DOCS_URL/tutorials/audio/recording_with_microphone.html</link> <link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link> </tutorials> <methods> diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index 66fa57cb52..b868cce077 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -7,7 +7,7 @@ [AudioServer] is a low-level server interface for audio access. It is in charge of creating sample data (playable audio) as well as its playback via a voice interface. </description> <tutorials> - <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> <link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link> <link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link> <link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link> diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml index cff7199c4a..722ff802e7 100644 --- a/doc/classes/AudioStream.xml +++ b/doc/classes/AudioStream.xml @@ -7,7 +7,7 @@ Base class for audio streams. Audio streams are used for sound effects and music playback, and support WAV (via [AudioStreamSample]) and OGG (via [AudioStreamOGGVorbis]) file formats. </description> <tutorials> - <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> + <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link> <link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link> <link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link> <link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link> diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml index b692ae858e..d20aaff1e8 100644 --- a/doc/classes/AudioStreamPlayer.xml +++ b/doc/classes/AudioStreamPlayer.xml @@ -8,7 +8,7 @@ To play audio positionally, use [AudioStreamPlayer2D] or [AudioStreamPlayer3D] instead of [AudioStreamPlayer]. </description> <tutorials> - <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> + <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link> <link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index 9c76eefbf9..0ad161a6fe 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -9,7 +9,7 @@ [b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set [member volume_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing). </description> <tutorials> - <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> + <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link> </tutorials> <methods> <method name="get_playback_position"> diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index e8a78d5a4c..ce8a6693db 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -10,7 +10,7 @@ [b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set [member unit_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing). </description> <tutorials> - <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link> + <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link> </tutorials> <methods> <method name="get_playback_position"> diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml index 818ab50030..f0f49f89d5 100644 --- a/doc/classes/BaseMaterial3D.xml +++ b/doc/classes/BaseMaterial3D.xml @@ -7,7 +7,7 @@ This provides a default material with a wide variety of rendering features and properties without the need to write shader code. See the tutorial below for details. </description> <tutorials> - <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link> + <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link> </tutorials> <methods> <method name="get_feature" qualifiers="const"> diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml index 8ef9cd2e7c..bf3d20c11c 100644 --- a/doc/classes/Basis.xml +++ b/doc/classes/Basis.xml @@ -10,9 +10,9 @@ For more information, read the "Matrices and transforms" documentation article. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link> - <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link> + <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link> <link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> @@ -232,18 +232,22 @@ <return type="bool" /> <argument index="0" name="right" type="Basis" /> <description> + Returns [code]true[/code] if the [Basis] matrices 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="Basis" /> <argument index="0" name="right" type="Basis" /> <description> + Composes these two basis matrices by multiplying them together. This has the effect of transforming the second basis (the child) by the first basis (the parent). </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Transforms (multiplies) the [Vector3] by the given [Basis] matrix. </description> </operator> <operator name="operator *"> @@ -269,12 +273,15 @@ <return type="bool" /> <argument index="0" name="right" type="Basis" /> <description> + Returns [code]true[/code] if the [Basis] matrices 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 []"> <return type="Vector3" /> <argument index="0" name="index" type="int" /> <description> + Access basis components using their index. [code]b[0][/code] is equivalent to [code]b.x[/code], [code]b[1][/code] is equivalent to [code]b.y[/code], and [code]b[2][/code] is equivalent to [code]b.z[/code]. </description> </operator> </operators> diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml index ba55fda59c..055d5091c7 100644 --- a/doc/classes/Button.xml +++ b/doc/classes/Button.xml @@ -78,6 +78,7 @@ </member> <member name="icon" type="Texture2D" setter="set_button_icon" getter="get_button_icon"> Button's icon, if text is present the icon will be placed before the text. + To edit margin and spacing of the icon, use [theme_item hseparation] theme property and [code]content_margin_*[/code] properties of the used [StyleBox]es. </member> <member name="icon_align" type="int" setter="set_icon_align" getter="get_icon_align" enum="Button.TextAlign" default="0"> Specifies if the icon should be aligned to the left, right, or center of a button. Uses the same [enum TextAlign] constants as the text alignment. If centered, text will draw on top of the icon. diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml index 9226140c1a..0505d8ad36 100644 --- a/doc/classes/CPUParticles2D.xml +++ b/doc/classes/CPUParticles2D.xml @@ -8,7 +8,7 @@ See also [GPUParticles2D], which provides the same functionality with hardware acceleration, but may not run on older devices. </description> <tutorials> - <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link> + <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link> </tutorials> <methods> <method name="convert_from_particles"> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 7be18c1d5c..98437ef296 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -12,8 +12,8 @@ [b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad]. </description> <tutorials> - <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> - <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> + <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link> + <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link> <link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link> </tutorials> <methods> diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml index 2f99f94893..9ee5ce0dcb 100644 --- a/doc/classes/CanvasLayer.xml +++ b/doc/classes/CanvasLayer.xml @@ -7,8 +7,8 @@ Canvas drawing layer. [CanvasItem] nodes that are direct or indirect children of a [CanvasLayer] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or above), or backgrounds (in layer -1 or below). </description> <tutorials> - <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> - <link title="Canvas layers">https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html</link> + <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link> + <link title="Canvas layers">$DOCS_URL/tutorials/2d/canvas_layers.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> </tutorials> <methods> diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml index b11d9c341a..d467c8a51d 100644 --- a/doc/classes/CharFXTransform.xml +++ b/doc/classes/CharFXTransform.xml @@ -7,7 +7,7 @@ By setting various properties on this object, you can control how individual characters will be displayed in a [RichTextEffect]. </description> <tutorials> - <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link> + <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link> <link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link> </tutorials> <members> diff --git a/doc/classes/CharacterBody2D.xml b/doc/classes/CharacterBody2D.xml index e14c2dc110..0f573dcd66 100644 --- a/doc/classes/CharacterBody2D.xml +++ b/doc/classes/CharacterBody2D.xml @@ -9,8 +9,8 @@ [b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody2D]), which allows them to be moved by code and push other bodies on their path. </description> <tutorials> - <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link> - <link title="Using KinematicBody2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_kinematic_body_2d.html</link> + <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link> + <link title="Using KinematicBody2D">$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html</link> <link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link> <link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link> </tutorials> diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml index 24b26fb16e..c70ce8acf9 100644 --- a/doc/classes/CharacterBody3D.xml +++ b/doc/classes/CharacterBody3D.xml @@ -9,7 +9,7 @@ [b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody3D]), which allows them to be moved by code and push other bodies on their path. </description> <tutorials> - <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link> + <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link> <link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml index ba1ee3909d..63492bf9a0 100644 --- a/doc/classes/CollisionObject2D.xml +++ b/doc/classes/CollisionObject2D.xml @@ -198,11 +198,11 @@ <members> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1"> The physics layers this CollisionObject2D is in. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> The physics layers this CollisionObject2D scans. Collision objects can scan one or more of 32 different layers. See also [member collision_layer]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject2D.DisableMode" default="0"> Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes. diff --git a/doc/classes/CollisionObject3D.xml b/doc/classes/CollisionObject3D.xml index 19bcdcbb27..33305471b8 100644 --- a/doc/classes/CollisionObject3D.xml +++ b/doc/classes/CollisionObject3D.xml @@ -170,11 +170,11 @@ <members> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1"> The physics layers this CollisionObject3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> The physics layers this CollisionObject3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject3D.DisableMode" default="0"> Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes. diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml index 5159b2b15b..c86bf18f24 100644 --- a/doc/classes/CollisionShape2D.xml +++ b/doc/classes/CollisionShape2D.xml @@ -7,7 +7,7 @@ Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject2D.shape_owner_get_shape] to get the actual shape. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link> <link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link> diff --git a/doc/classes/CollisionShape3D.xml b/doc/classes/CollisionShape3D.xml index 84e362c38b..0f96d7c191 100644 --- a/doc/classes/CollisionShape3D.xml +++ b/doc/classes/CollisionShape3D.xml @@ -7,7 +7,7 @@ Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area3D] to give it a detection shape, or add it to a [PhysicsBody3D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject3D.shape_owner_get_shape] to get the actual shape. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> <link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml index 650f10a97f..22fb853b40 100644 --- a/doc/classes/Color.xml +++ b/doc/classes/Color.xml @@ -881,54 +881,64 @@ <return type="bool" /> <argument index="0" name="right" type="Color" /> <description> + Returns [code]true[/code] if the colors 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="Color" /> <argument index="0" name="right" type="Color" /> <description> + Multiplies each component of the [Color] by the components of the given [Color]. </description> </operator> <operator name="operator *"> <return type="Color" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Color] by the given [float]. </description> </operator> <operator name="operator *"> <return type="Color" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Color] by the given [int]. </description> </operator> <operator name="operator +"> <return type="Color" /> <argument index="0" name="right" type="Color" /> <description> + Adds each component of the [Color] with the components of the given [Color]. </description> </operator> <operator name="operator -"> <return type="Color" /> <argument index="0" name="right" type="Color" /> <description> + Subtracts each component of the [Color] by the components of the given [Color]. </description> </operator> <operator name="operator /"> <return type="Color" /> <argument index="0" name="right" type="Color" /> <description> + Divides each component of the [Color] by the components of the given [Color]. </description> </operator> <operator name="operator /"> <return type="Color" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Color] by the given [float]. </description> </operator> <operator name="operator /"> <return type="Color" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Color] by the given [int]. </description> </operator> <operator name="operator =="> @@ -940,22 +950,27 @@ <return type="bool" /> <argument index="0" name="right" type="Color" /> <description> + Returns [code]true[/code] if the colors 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 []"> <return type="float" /> <argument index="0" name="index" type="int" /> <description> + Access color components using their index. [code]c[0][/code] is equivalent to [code]c.r[/code], [code]c[1][/code] is equivalent to [code]c.g[/code], [code]c[2][/code] is equivalent to [code]c.b[/code], and [code]c[3][/code] is equivalent to [code]c.a[/code]. </description> </operator> <operator name="operator unary+"> <return type="Color" /> <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="Color" /> <description> + Inverts the given color. This is equivalent to [code]Color.WHITE - c[/code] or [code]Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)[/code]. </description> </operator> </operators> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index 63e3eb7a5f..8739e0157d 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -16,9 +16,9 @@ [b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you can't access their values using [method Object.get] and [method Object.set]. Instead, use the [code]get_theme_*[/code] and [code]add_theme_*_override[/code] methods provided by this class. </description> <tutorials> - <link title="GUI documentation index">https://docs.godotengine.org/en/latest/tutorials/ui/index.html</link> - <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> - <link title="Control node gallery">https://docs.godotengine.org/en/latest/tutorials/ui/control_node_gallery.html</link> + <link title="GUI documentation index">$DOCS_URL/tutorials/ui/index.html</link> + <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link> + <link title="Control node gallery">$DOCS_URL/tutorials/ui/control_node_gallery.html</link> <link title="All GUI Demos">https://github.com/godotengine/godot-demo-projects/tree/master/gui</link> </tutorials> <methods> @@ -654,6 +654,12 @@ See [method add_theme_stylebox_override]. </description> </method> + <method name="is_drag_successful" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if drag operation is successful. + </description> + </method> <method name="is_layout_rtl" qualifiers="const"> <return type="bool" /> <description> @@ -714,6 +720,12 @@ Removes a local override for a theme [StyleBox] with the specified [code]name[/code] previously added by [method add_theme_stylebox_override] or via the Inspector dock. </description> </method> + <method name="reset_size"> + <return type="void" /> + <description> + Resets the size to [method get_combined_minimum_size]. This is equivalent to calling [code]set_size(Vector2())[/code] (or any size below the minimum). + </description> + </method> <method name="set_anchor"> <return type="void" /> <argument index="0" name="side" type="int" enum="Side" /> @@ -1043,7 +1055,7 @@ </member> <member name="rect_scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)"> The node's scale, relative to its [member rect_size]. Change this property to scale the node around its [member rect_pivot_offset]. The Control's [member hint_tooltip] will also scale according to this value. - [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=https://docs.godotengine.org/en/latest/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually. + [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=$DOCS_URL/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually. [b]Note:[/b] If the Control node is a child of a [Container] node, the scale will be reset to [code]Vector2(1, 1)[/code] when the scene is instantiated. To set the Control's scale when it's instantiated, wait for one frame using [code]await get_tree().process_frame[/code] then set its [member rect_scale] property. </member> <member name="rect_size" type="Vector2" setter="_set_size" getter="get_size" default="Vector2(0, 0)"> diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml index d661da5dd0..7218e3bcb0 100644 --- a/doc/classes/Dictionary.xml +++ b/doc/classes/Dictionary.xml @@ -177,7 +177,7 @@ [b]Note:[/b] When declaring a dictionary with [code]const[/code], the dictionary itself can still be mutated by defining the values of individual keys. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized. </description> <tutorials> - <link title="GDScript basics: Dictionary">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link> + <link title="GDScript basics: Dictionary">$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> <link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link> </tutorials> diff --git a/doc/classes/DirectionalLight3D.xml b/doc/classes/DirectionalLight3D.xml index 44d982cbcc..661dbef07c 100644 --- a/doc/classes/DirectionalLight3D.xml +++ b/doc/classes/DirectionalLight3D.xml @@ -7,7 +7,7 @@ A directional light is a type of [Light3D] node that models an infinite number of parallel rays covering the entire scene. It is used for lights with strong intensity that are located far away from the scene to model sunlight or moonlight. The worldspace location of the DirectionalLight3D transform (origin) is ignored. Only the basis is used to determine light direction. </description> <tutorials> - <link title="Lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> + <link title="Lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link> </tutorials> <members> <member name="directional_shadow_blend_splits" type="bool" setter="set_blend_splits" getter="is_blend_splits_enabled" default="false"> diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml index 93f04ff2a2..cd4b8fde1e 100644 --- a/doc/classes/Directory.xml +++ b/doc/classes/Directory.xml @@ -54,7 +54,7 @@ [/codeblocks] </description> <tutorials> - <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link> + <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link> </tutorials> <methods> <method name="change_dir"> diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml index 92d6a220d2..1ca69057b4 100644 --- a/doc/classes/DisplayServer.xml +++ b/doc/classes/DisplayServer.xml @@ -901,7 +901,7 @@ </constant> <constant name="WINDOW_MODE_FULLSCREEN" value="3" enum="WindowMode"> Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project. - Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. + Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. </constant> <constant name="WINDOW_FLAG_RESIZE_DISABLED" value="0" enum="WindowFlags"> </constant> diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml index cb33f159ef..1f98781bbd 100644 --- a/doc/classes/EditorImportPlugin.xml +++ b/doc/classes/EditorImportPlugin.xml @@ -111,12 +111,13 @@ To use [EditorImportPlugin], register it using the [method EditorPlugin.add_import_plugin] method first. </description> <tutorials> - <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link> + <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link> </tutorials> <methods> <method name="_get_import_options" qualifiers="virtual const"> <return type="Array" /> - <argument index="0" name="preset_index" type="int" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="preset_index" type="int" /> <description> Gets the options and default values for the preset at this index. Returns an Array of Dictionaries with the following keys: [code]name[/code], [code]default_value[/code], [code]property_hint[/code] (optional), [code]hint_string[/code] (optional), [code]usage[/code] (optional). </description> @@ -135,8 +136,9 @@ </method> <method name="_get_option_visibility" qualifiers="virtual const"> <return type="bool" /> - <argument index="0" name="option_name" type="StringName" /> - <argument index="1" name="options" type="Dictionary" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="option_name" type="StringName" /> + <argument index="2" name="options" type="Dictionary" /> <description> This method can be overridden to hide specific import options if conditions are met. This is mainly useful for hiding options that depend on others if one of them is disabled. For example: [codeblocks] diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml index bc5df47d57..08f17cc5b2 100644 --- a/doc/classes/EditorInspectorPlugin.xml +++ b/doc/classes/EditorInspectorPlugin.xml @@ -13,7 +13,7 @@ To use [EditorInspectorPlugin], register it using the [method EditorPlugin.add_inspector_plugin] method first. </description> <tutorials> - <link title="Inspector plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/inspector_plugins.html</link> + <link title="Inspector plugins">$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html</link> </tutorials> <methods> <method name="_can_handle" qualifiers="virtual const"> diff --git a/doc/classes/EditorNode3DGizmoPlugin.xml b/doc/classes/EditorNode3DGizmoPlugin.xml index 08423c4577..3bcd9e7764 100644 --- a/doc/classes/EditorNode3DGizmoPlugin.xml +++ b/doc/classes/EditorNode3DGizmoPlugin.xml @@ -8,7 +8,7 @@ To use [EditorNode3DGizmoPlugin], register it using the [method EditorPlugin.add_spatial_gizmo_plugin] method first. </description> <tutorials> - <link title="Spatial gizmo plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/spatial_gizmos.html</link> + <link title="Spatial gizmo plugins">$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html</link> </tutorials> <methods> <method name="_can_be_hidden" qualifiers="virtual const"> diff --git a/doc/classes/EditorPaths.xml b/doc/classes/EditorPaths.xml index 92a2cff27f..c4d4c92afe 100644 --- a/doc/classes/EditorPaths.xml +++ b/doc/classes/EditorPaths.xml @@ -1,35 +1,65 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="EditorPaths" inherits="Object" version="4.0"> <brief_description> + Editor-only singleton that returns paths to various OS-specific data folders and files. </brief_description> <description> + This editor-only singleton returns OS-specific paths to various data folders and files. It can be used in editor plugins to ensure files are saved in the correct location on each operating system. + [b]Note:[/b] This singleton is not accessible in exported projects. Attempting to access it in an exported project will result in a script error as the singleton won't be declared. To prevent script errors in exported projects, use [method Engine.has_singleton] to check whether the singleton is available before using it. + [b]Note:[/b] Godot complies with the [url=https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html]XDG Base Directory Specification[/url] on [i]all[/i] platforms. You can override environment variables following the specification to change the editor and project data paths. </description> <tutorials> + <link title="File paths in Godot projects">https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html</link> </tutorials> <methods> <method name="get_cache_dir" qualifiers="const"> <return type="String" /> <description> + Returns the absolute path to the user's cache folder. This folder should be used for temporary data that can be removed safely whenever the editor is closed (such as generated resource thumbnails). + [b]Default paths per platform:[/b] + [codeblock] + - Windows: %LOCALAPPDATA%\Godot\ + - macOS: ~/Library/Caches/Godot/ + - Linux: ~/.cache/godot/ + [/codeblock] </description> </method> <method name="get_config_dir" qualifiers="const"> <return type="String" /> <description> + Returns the absolute path to the user's configuration folder. This folder should be used for [i]persistent[/i] user configuration files. + [b]Default paths per platform:[/b] + [codeblock] + - Windows: %APPDATA%\Godot\ (same as `get_data_dir()`) + - macOS: ~/Library/Application Support/Godot/ (same as `get_data_dir()`) + - Linux: ~/.config/godot/ + [/codeblock] </description> </method> <method name="get_data_dir" qualifiers="const"> <return type="String" /> <description> + Returns the absolute path to the user's data folder. This folder should be used for [i]persistent[/i] user data files such as installed export templates. + [b]Default paths per platform:[/b] + [codeblock] + - Windows: %APPDATA%\Godot\ (same as `get_config_dir()`) + - macOS: ~/Library/Application Support/Godot/ (same as `get_config_dir()`) + - Linux: ~/.local/share/godot/ + [/codeblock] </description> </method> <method name="get_self_contained_file" qualifiers="const"> <return type="String" /> <description> + Returns the absolute path to the self-contained file that makes the current Godot editor instance be considered as self-contained. Returns an empty string if the current Godot editor instance isn't self-contained. See also [method is_self_contained]. </description> </method> <method name="is_self_contained" qualifiers="const"> <return type="bool" /> <description> + Returns [code]true[/code] if the editor is marked as self-contained, [code]false[/code] otherwise. When self-contained mode is enabled, user configuration, data and cache files are saved in an [code]editor_data/[/code] folder next to the editor binary. This makes portable usage easier and ensures the Godot editor minimizes file writes outside its own folder. Self-contained mode is not available for exported projects. + Self-contained mode can be enabled by creating a file named [code]._sc_[/code] or [code]_sc_[/code] in the same folder as the editor binary while the editor is not running. See also [method get_self_contained_file]. + [b]Note:[/b] The Steam release of Godot uses self-contained mode by default. </description> </method> </methods> diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml index 8df6d721d4..7b0a300782 100644 --- a/doc/classes/EditorPlugin.xml +++ b/doc/classes/EditorPlugin.xml @@ -7,7 +7,7 @@ Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. See also [EditorScript] to add functions to the editor. </description> <tutorials> - <link title="Editor plugins documentation index">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html</link> + <link title="Editor plugins documentation index">$DOCS_URL/tutorials/plugins/editor/index.html</link> </tutorials> <methods> <method name="_apply_changes" qualifiers="virtual"> diff --git a/doc/classes/EditorSceneFormatImporter.xml b/doc/classes/EditorSceneFormatImporter.xml index 6dbd80604e..5b5d6c4598 100644 --- a/doc/classes/EditorSceneFormatImporter.xml +++ b/doc/classes/EditorSceneFormatImporter.xml @@ -20,6 +20,19 @@ <description> </description> </method> + <method name="_get_import_options" qualifiers="virtual"> + <return type="void" /> + <argument index="0" name="path" type="String" /> + <description> + </description> + </method> + <method name="_get_option_visibility" qualifiers="virtual const"> + <return type="Variant" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="option" type="String" /> + <description> + </description> + </method> <method name="_import_animation" qualifiers="virtual"> <return type="Animation" /> <argument index="0" name="path" type="String" /> diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml index 8a731a6d1d..d90af6ed9e 100644 --- a/doc/classes/EditorScenePostImport.xml +++ b/doc/classes/EditorScenePostImport.xml @@ -52,7 +52,7 @@ [/codeblocks] </description> <tutorials> - <link title="Importing 3D scenes: Custom script">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_scenes.html#custom-script</link> + <link title="Importing 3D scenes: Custom script">$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script</link> </tutorials> <methods> <method name="_post_import" qualifiers="virtual"> diff --git a/doc/classes/EditorScenePostImportPlugin.xml b/doc/classes/EditorScenePostImportPlugin.xml index 07d8fa28b9..904b22d9d3 100644 --- a/doc/classes/EditorScenePostImportPlugin.xml +++ b/doc/classes/EditorScenePostImportPlugin.xml @@ -11,6 +11,7 @@ <methods> <method name="_get_import_options" qualifiers="virtual"> <return type="void" /> + <argument index="0" name="path" type="String" /> <description> Override to add general import options. These will appear in the main import dock on the editor. Add options via [method add_import_option] and [method add_import_option_advanced]. </description> @@ -40,7 +41,8 @@ </method> <method name="_get_option_visibility" qualifiers="virtual const"> <return type="Variant" /> - <argument index="0" name="option" type="String" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="option" type="String" /> <description> Return true or false whether a given option should be visible. Return null to ignore. </description> diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml index f05a216301..9756b26dee 100644 --- a/doc/classes/Engine.xml +++ b/doc/classes/Engine.xml @@ -157,7 +157,7 @@ else: simulate_physics() [/codeblock] - See [url=https://docs.godotengine.org/en/latest/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information. + See [url=$DOCS_URL/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information. [b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] (e.g. when pressing [kbd]F5[/kbd]), use [method OS.has_feature] with the [code]"editor"[/code] argument instead. [code]OS.has_feature("editor")[/code] will evaluate to [code]true[/code] both when the code is running in the editor and when running the project from the editor, but it will evaluate to [code]false[/code] when the code is run from an exported project. </description> </method> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 4ea7f67eed..c3d1dc4ab6 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -11,8 +11,8 @@ - Adjustments </description> <tutorials> - <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link> - <link title="Light transport in game engines">https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html</link> + <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link> + <link title="Light transport in game engines">$DOCS_URL/tutorials/3d/high_dynamic_range.html</link> <link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link> <link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> @@ -171,7 +171,8 @@ <member name="sdfgi_cascades" type="int" setter="set_sdfgi_cascades" getter="get_sdfgi_cascades" enum="Environment.SDFGICascades" default="1"> </member> <member name="sdfgi_enabled" type="bool" setter="set_sdfgi_enabled" getter="is_sdfgi_enabled" default="false"> - If [code]true[/code], enables signed distance field global illumination. + If [code]true[/code], enables signed distance field global illumination for meshes that have their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. SDFGI is a real-time global illumination technique that works well with procedurally generated and user-built levels, including in situations where geometry is created during gameplay. The signed distance field is automatically generated around the camera as it moves. Dynamic lights are supported, but dynamic occluders and emissive surfaces are not. + [b]Performance:[/b] SDFGI is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve SDFGI performance, enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings. [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh. </member> <member name="sdfgi_energy" type="float" setter="set_sdfgi_energy" getter="get_sdfgi_energy" default="1.0"> diff --git a/doc/classes/File.xml b/doc/classes/File.xml index 811aeb8aab..276c1f0223 100644 --- a/doc/classes/File.xml +++ b/doc/classes/File.xml @@ -40,12 +40,12 @@ } [/csharp] [/codeblocks] - In the example above, the file will be saved in the user data folder as specified in the [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] documentation. + In the example above, the file will be saved in the user data folder as specified in the [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] documentation. [b]Note:[/b] To access project resources once exported, it is recommended to use [ResourceLoader] instead of the [File] API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package. [b]Note:[/b] Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing [b]Alt + F4[/b]). If you stop the project execution by pressing [b]F8[/b] while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling [method flush] at regular intervals. </description> <tutorials> - <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link> + <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> <methods> diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml index ccfe861c92..c403d238c5 100644 --- a/doc/classes/FontData.xml +++ b/doc/classes/FontData.xml @@ -93,6 +93,12 @@ Returns font descent (number of pixels below the baseline). </description> </method> + <method name="get_fixed_size" qualifiers="const"> + <return type="int" /> + <description> + Returns font fixed size. + </description> + </method> <method name="get_font_name" qualifiers="const"> <return type="String" /> <description> @@ -481,6 +487,13 @@ Sets the font descent (number of pixels below the baseline). </description> </method> + <method name="set_fixed_size"> + <return type="void" /> + <argument index="0" name="fixed_size" type="int" /> + <description> + Sets the fixed size for the font. + </description> + </method> <method name="set_font_name"> <return type="void" /> <argument index="0" name="name" type="String" /> diff --git a/doc/classes/GPUParticles2D.xml b/doc/classes/GPUParticles2D.xml index 72bd6a6411..72adc49742 100644 --- a/doc/classes/GPUParticles2D.xml +++ b/doc/classes/GPUParticles2D.xml @@ -8,7 +8,7 @@ Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles. </description> <tutorials> - <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link> + <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> </tutorials> <methods> diff --git a/doc/classes/GPUParticles3D.xml b/doc/classes/GPUParticles3D.xml index 0bed561de3..771056cb93 100644 --- a/doc/classes/GPUParticles3D.xml +++ b/doc/classes/GPUParticles3D.xml @@ -8,7 +8,7 @@ Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles. </description> <tutorials> - <link title="Controlling thousands of fish with Particles">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link> + <link title="Controlling thousands of fish with Particles">$DOCS_URL/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/GeometryInstance3D.xml b/doc/classes/GeometryInstance3D.xml index 0a2c0fbe81..b8514c67b8 100644 --- a/doc/classes/GeometryInstance3D.xml +++ b/doc/classes/GeometryInstance3D.xml @@ -38,8 +38,10 @@ The extra distance added to the GeometryInstance3D's bounding box ([AABB]) to increase its cull box. </member> <member name="gi_lightmap_scale" type="int" setter="set_lightmap_scale" getter="get_lightmap_scale" enum="GeometryInstance3D.LightmapScale" default="0"> + The texel density to use for lightmapping in [LightmapGI]. Greater scale values provide higher resolution in the lightmap, which can result in sharper shadows for lights that have both direct and indirect light baked. However, greater scale values will also increase the space taken by the mesh in the lightmap texture, which increases the memory, storage, and bake time requirements. When using a single mesh at different scales, consider adjusting this value to keep the lightmap texel density consistent across meshes. </member> <member name="gi_mode" type="int" setter="set_gi_mode" getter="get_gi_mode" enum="GeometryInstance3D.GIMode" default="0"> + The global illumination mode to use for the whole geometry. Use a mode that matches the purpose </member> <member name="ignore_occlusion_culling" type="bool" setter="set_ignore_occlusion_culling" getter="is_ignoring_occlusion_culling" default="false"> </member> @@ -70,7 +72,7 @@ </members> <constants> <constant name="SHADOW_CASTING_SETTING_OFF" value="0" enum="ShadowCastingSetting"> - Will not cast any shadows. + Will not cast any shadows. Use this to improve performance for small geometry that is unlikely to cast noticeable shadows (such as debris). </constant> <constant name="SHADOW_CASTING_SETTING_ON" value="1" enum="ShadowCastingSetting"> Will cast shadows from all visible faces in the GeometryInstance3D. @@ -85,20 +87,28 @@ In other words, the actual mesh will not be visible, only the shadows casted from the mesh will be. </constant> <constant name="GI_MODE_DISABLED" value="0" enum="GIMode"> + Disabled global illumination mode. Use for dynamic objects that do not contribute to global illumination (such as characters). When using [VoxelGI] and SDFGI, the geometry will [i]receive[/i] indirect lighting and reflections but will not be considered in GI baking. When using [LightmapGI], the object will receive indirect lighting using lightmap probes instead of using the lightmap texture. </constant> <constant name="GI_MODE_BAKED" value="1" enum="GIMode"> + Baked global illumination mode. Use for static objects that contribute to global illumination (such as level geometry). This GI mode is effective when using [VoxelGI], SDFGI and [LightmapGI]. </constant> <constant name="GI_MODE_DYNAMIC" value="2" enum="GIMode"> + Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using [VoxelGI], but it has a higher performance impact than [constant GI_MODE_BAKED]. </constant> <constant name="LIGHTMAP_SCALE_1X" value="0" enum="LightmapScale"> + The standard texel density for lightmapping with [LightmapGI]. </constant> <constant name="LIGHTMAP_SCALE_2X" value="1" enum="LightmapScale"> + Multiplies texel density by 2× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 1.5 and 3.0. </constant> <constant name="LIGHTMAP_SCALE_4X" value="2" enum="LightmapScale"> + Multiplies texel density by 4× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 3.0 and 6.0. </constant> <constant name="LIGHTMAP_SCALE_8X" value="3" enum="LightmapScale"> + Multiplies texel density by 8× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor greater than 6.0. </constant> <constant name="LIGHTMAP_SCALE_MAX" value="4" enum="LightmapScale"> + Represents the size of the [enum LightmapScale] enum. </constant> <constant name="VISIBILITY_RANGE_FADE_DISABLED" value="0" enum="VisibilityRangeFadeMode"> Will not fade itself nor its visibility dependencies, hysteresis will be used instead. See [member visibility_range_begin] and [member Node3D.visibility_parent] for more information. diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index 673bf19122..e962992491 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -141,7 +141,7 @@ <argument index="3" name="to_port" type="int" /> <argument index="4" name="amount" type="float" /> <description> - Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [code]activity[/code] theme property. + Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [theme_item activity] theme property. </description> </method> <method name="set_selected"> diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml index ff6271d2aa..e9226f7c1d 100644 --- a/doc/classes/GraphNode.xml +++ b/doc/classes/GraphNode.xml @@ -285,10 +285,10 @@ No overlay is shown. </constant> <constant name="OVERLAY_BREAKPOINT" value="1" enum="Overlay"> - Show overlay set in the [code]breakpoint[/code] theme property. + Show overlay set in the [theme_item breakpoint] theme property. </constant> <constant name="OVERLAY_POSITION" value="2" enum="Overlay"> - Show overlay set in the [code]position[/code] theme property. + Show overlay set in the [theme_item position] theme property. </constant> </constants> <theme_items> diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml index 9f33c400f4..a50983853d 100644 --- a/doc/classes/HTTPClient.xml +++ b/doc/classes/HTTPClient.xml @@ -15,8 +15,8 @@ [b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are currently not supported. Revoked certificates are accepted as long as they are otherwise valid. If this is a concern, you may want to use automatically managed certificates with a short validity period. </description> <tutorials> - <link title="HTTP client class">https://docs.godotengine.org/en/latest/tutorials/networking/http_client_class.html</link> - <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> + <link title="HTTP client class">$DOCS_URL/tutorials/networking/http_client_class.html</link> + <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link> </tutorials> <methods> <method name="close"> diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml index 558e51aefe..aaaf863c69 100644 --- a/doc/classes/HTTPRequest.xml +++ b/doc/classes/HTTPRequest.xml @@ -153,8 +153,8 @@ [b]Gzipped response bodies[/b]: HTTPRequest will automatically handle decompression of response bodies. A [code]Accept-Encoding[/code] header will be automatically added to each of your requests, unless one is already specified. Any response with a [code]Content-Encoding: gzip[/code] header will automatically be decompressed and delivered to you as uncompressed bytes. </description> <tutorials> - <link title="Making HTTP requests">https://docs.godotengine.org/en/latest/tutorials/networking/http_request_class.html</link> - <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> + <link title="Making HTTP requests">$DOCS_URL/tutorials/networking/http_request_class.html</link> + <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link> </tutorials> <methods> <method name="cancel_request"> diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml index 492bddca1f..d2b1b5c004 100644 --- a/doc/classes/Image.xml +++ b/doc/classes/Image.xml @@ -9,7 +9,7 @@ [b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images may fail to import. </description> <tutorials> - <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link> + <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link> </tutorials> <methods> <method name="adjust_bcs"> @@ -278,7 +278,7 @@ <return type="int" enum="Error" /> <argument index="0" name="path" type="String" /> <description> - Loads an image from file [code]path[/code]. See [url=https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations. + Loads an image from file [code]path[/code]. See [url=$DOCS_URL/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations. [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external images at run-time, such as images located at the [code]user://[/code] directory, and may not work in exported projects. See also [ImageTexture] description for usage examples. </description> diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml index af7178db95..3f96d357b6 100644 --- a/doc/classes/ImageTexture.xml +++ b/doc/classes/ImageTexture.xml @@ -28,7 +28,7 @@ [b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations. </description> <tutorials> - <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link> + <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link> </tutorials> <methods> <method name="create_from_image"> diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index 684207e9bd..cd5ba2e17f 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -7,7 +7,7 @@ A singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or with the [InputMap] class. </description> <tutorials> - <link title="Inputs documentation index">https://docs.godotengine.org/en/latest/tutorials/inputs/index.html</link> + <link title="Inputs documentation index">$DOCS_URL/tutorials/inputs/index.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> @@ -236,6 +236,13 @@ Returns [code]true[/code] if you are pressing the mouse button specified with [enum MouseButton]. </description> </method> + <method name="is_physical_key_pressed" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="keycode" type="int" enum="Key" /> + <description> + Returns [code]true[/code] if you are pressing the key in the physical location on the 101/102-key US QWERTY keyboard. You can pass a [enum Key] constant. + </description> + </method> <method name="joy_connection_changed"> <return type="void" /> <argument index="0" name="device" type="int" /> diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index 9dc8fbeffa..09fbe776bf 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -7,8 +7,8 @@ Base class of all sort of input event. See [method Node._input]. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> - <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> + <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml index f09af1a34d..e9c280732a 100644 --- a/doc/classes/InputEventAction.xml +++ b/doc/classes/InputEventAction.xml @@ -7,7 +7,7 @@ Contains a generic action which can be targeted from several types of inputs. Actions can be created from the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b] menu. See [method Node._input]. </description> <tutorials> - <link title="InputEvent: Actions">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#actions</link> + <link title="InputEvent: Actions">$DOCS_URL/tutorials/inputs/inputevent.html#actions</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml index ff82913385..3e625c1003 100644 --- a/doc/classes/InputEventJoypadButton.xml +++ b/doc/classes/InputEventJoypadButton.xml @@ -7,7 +7,7 @@ Input event type for gamepad buttons. For gamepad analog sticks and joysticks, see [InputEventJoypadMotion]. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="JoyButton" default="0"> diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml index 92161974ba..b3f9013553 100644 --- a/doc/classes/InputEventJoypadMotion.xml +++ b/doc/classes/InputEventJoypadMotion.xml @@ -7,7 +7,7 @@ Stores information about joystick motions. One [InputEventJoypadMotion] represents one axis at a time. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="axis" type="int" setter="set_axis" getter="get_axis" enum="JoyAxis" default="0"> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index 0353c5f0e0..8044bf5b99 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -7,7 +7,7 @@ Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <methods> <method name="get_keycode_with_modifiers" qualifiers="const"> diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml index a248f1abd9..4878090996 100644 --- a/doc/classes/InputEventMouse.xml +++ b/doc/classes/InputEventMouse.xml @@ -7,7 +7,7 @@ Stores general mouse events information. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButton" default="0"> diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml index dcfe0d6c71..699217525e 100644 --- a/doc/classes/InputEventMouseButton.xml +++ b/doc/classes/InputEventMouseButton.xml @@ -7,7 +7,7 @@ Contains mouse click information. See [method Node._input]. </description> <tutorials> - <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> + <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link> </tutorials> <members> <member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="MouseButton" default="0"> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index 9a0156510e..bd1ae367c2 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -8,7 +8,7 @@ [b]Note:[/b] By default, this event is only emitted once per frame rendered at most. If you need more precise input reporting, call [method Input.set_use_accumulated_input] with [code]false[/code] to make events emitted as often as possible. If you use InputEventMouseMotion to draw lines, consider implementing [url=https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid visible gaps in lines if the user is moving the mouse quickly. </description> <tutorials> - <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> + <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> <members> diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml index f86b5f3b4d..19c26e3a98 100644 --- a/doc/classes/InputEventScreenDrag.xml +++ b/doc/classes/InputEventScreenDrag.xml @@ -7,7 +7,7 @@ Contains screen drag information. See [method Node._input]. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="index" type="int" setter="set_index" getter="get_index" default="0"> diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml index c731044c98..0694b2eabc 100644 --- a/doc/classes/InputEventScreenTouch.xml +++ b/doc/classes/InputEventScreenTouch.xml @@ -8,7 +8,7 @@ Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="index" type="int" setter="set_index" getter="get_index" default="0"> diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml index 1b9212bf65..cd4a8aecd0 100644 --- a/doc/classes/InputEventWithModifiers.xml +++ b/doc/classes/InputEventWithModifiers.xml @@ -7,7 +7,7 @@ Contains keys events information with modifiers support like [kbd]Shift[/kbd] or [kbd]Alt[/kbd]. See [method Node._input]. </description> <tutorials> - <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> + <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link> </tutorials> <members> <member name="alt_pressed" type="bool" setter="set_alt_pressed" getter="is_alt_pressed" default="false"> diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml index 855d5b5d71..24f220e892 100644 --- a/doc/classes/InputMap.xml +++ b/doc/classes/InputMap.xml @@ -7,7 +7,7 @@ Manages all [InputEventAction] which can be created/modified from the project settings menu [b]Project > Project Settings > Input Map[/b] or in code with [method add_action] and [method action_add_event]. See [method Node._input]. </description> <tutorials> - <link title="InputEvent: InputMap">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#inputmap</link> + <link title="InputEvent: InputMap">$DOCS_URL/tutorials/inputs/inputevent.html#inputmap</link> </tutorials> <methods> <method name="action_add_event"> diff --git a/doc/classes/JNISingleton.xml b/doc/classes/JNISingleton.xml index ce39e1f567..c887f72767 100644 --- a/doc/classes/JNISingleton.xml +++ b/doc/classes/JNISingleton.xml @@ -7,6 +7,6 @@ The JNISingleton is implemented only in the Android export. It's used to call methods and connect signals from an Android plugin written in Java or Kotlin. Methods and signals can be called and connected to the JNISingleton as if it is a Node. See [url=https://en.wikipedia.org/wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more information. </description> <tutorials> - <link title="Creating Android plugins">https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html#doc-android-plugin</link> + <link title="Creating Android plugins">$DOCS_URL/tutorials/platform/android/android_plugin.html#doc-android-plugin</link> </tutorials> </class> diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml index 2bb2666df4..aeaf8ac1f5 100644 --- a/doc/classes/JavaScript.xml +++ b/doc/classes/JavaScript.xml @@ -5,10 +5,10 @@ </brief_description> <description> The JavaScript singleton is implemented only in the HTML5 export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs. - [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=https://docs.godotengine.org/en/latest/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information. + [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=$DOCS_URL/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information. </description> <tutorials> - <link title="Exporting for the Web: Calling JavaScript from script">https://docs.godotengine.org/en/latest/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link> + <link title="Exporting for the Web: Calling JavaScript from script">$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link> </tutorials> <methods> <method name="create_callback"> diff --git a/doc/classes/Light2D.xml b/doc/classes/Light2D.xml index 918e8a5c8a..039425b15f 100644 --- a/doc/classes/Light2D.xml +++ b/doc/classes/Light2D.xml @@ -8,7 +8,7 @@ [b]Note:[/b] Light2D can also be used as a mask. </description> <tutorials> - <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link> + <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link> </tutorials> <methods> <method name="get_height" qualifiers="const"> diff --git a/doc/classes/Light3D.xml b/doc/classes/Light3D.xml index dbda22d618..009ad1f609 100644 --- a/doc/classes/Light3D.xml +++ b/doc/classes/Light3D.xml @@ -7,7 +7,7 @@ Light3D is the [i]abstract[/i] base class for light nodes. As it can't be instantiated, it shouldn't be used directly. Other types of light nodes inherit from it. Light3D contains the common variables and parameters used for lighting. </description> <tutorials> - <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> + <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml index ba795a29a1..d883128ac3 100644 --- a/doc/classes/LightOccluder2D.xml +++ b/doc/classes/LightOccluder2D.xml @@ -7,7 +7,7 @@ Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must be provided with an [OccluderPolygon2D] in order for the shadow to be computed. </description> <tutorials> - <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link> + <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link> </tutorials> <members> <member name="occluder" type="OccluderPolygon2D" setter="set_occluder_polygon" getter="get_occluder_polygon"> diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml index 0cdf9f820f..b7d4c93fd5 100644 --- a/doc/classes/LightmapGI.xml +++ b/doc/classes/LightmapGI.xml @@ -1,8 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="LightmapGI" inherits="VisualInstance3D" version="4.0"> <brief_description> + Computes and stores baked lightmaps for fast global illumination. </brief_description> <description> + The [LightmapGI] node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking. [LightmapGI] can also provide rough reflections using spherical harmonics if [member directional] is enabled. Dynamic objects can receive indirect lighting thanks to [i]light probes[/i], which can be automatically placed by setting [member generate_probes_subdiv]. Additional lightmap probes can also be added by creating [LightmapProbe] nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking a [LightmapGI] node is also slower compared to [VoxelGI]. + [b]Procedural generation:[/b] Lightmap baking functionality is only available in the editor. This means [LightmapGI] is not suited to procedurally generated or user-built levels. For procedurally generated or user-built levels, use [VoxelGI] or SDFGI instead (see [member Environment.sdfgi_enabled]). + [b]Performance:[/b] [LightmapGI] provides the best possible run-time performance for global illumination. It is suitable for low-end hardware including integrated graphics and mobile devices. </description> <tutorials> </tutorials> diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml index c7b66c8ea3..6873edb3ae 100644 --- a/doc/classes/MeshInstance2D.xml +++ b/doc/classes/MeshInstance2D.xml @@ -7,7 +7,7 @@ Node used for displaying a [Mesh] in 2D. Can be constructed from an existing [Sprite2D] via a tool in the editor toolbar. Select "Sprite2D" then "Convert to Mesh2D", select settings in popup and press "Create Mesh2D". </description> <tutorials> - <link title="2D meshes">https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html</link> + <link title="2D meshes">$DOCS_URL/tutorials/2d/2d_meshes.html</link> </tutorials> <members> <member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh"> diff --git a/doc/classes/MultiMesh.xml b/doc/classes/MultiMesh.xml index 7890bbcc33..cf3b395b7b 100644 --- a/doc/classes/MultiMesh.xml +++ b/doc/classes/MultiMesh.xml @@ -10,8 +10,8 @@ Since instances may have any behavior, the AABB used for visibility must be provided by the user. </description> <tutorials> - <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link> - <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link> + <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link> + <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link> </tutorials> <methods> <method name="get_aabb" qualifiers="const"> diff --git a/doc/classes/MultiMeshInstance3D.xml b/doc/classes/MultiMeshInstance3D.xml index 158579e952..d78a045aca 100644 --- a/doc/classes/MultiMeshInstance3D.xml +++ b/doc/classes/MultiMeshInstance3D.xml @@ -8,9 +8,9 @@ This is useful to optimize the rendering of a high amount of instances of a given mesh (for example trees in a forest or grass strands). </description> <tutorials> - <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link> - <link title="Using MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link> - <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link> + <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link> + <link title="Using MultiMeshInstance">$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html</link> + <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link> </tutorials> <members> <member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh"> diff --git a/doc/classes/MultiplayerPeer.xml b/doc/classes/MultiplayerPeer.xml index 67d3161aba..b7bd7bef36 100644 --- a/doc/classes/MultiplayerPeer.xml +++ b/doc/classes/MultiplayerPeer.xml @@ -9,7 +9,7 @@ [b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android. </description> <tutorials> - <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link> + <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link> <link title="WebRTC Signaling Demo">https://godotengine.org/asset-library/asset/537</link> </tutorials> <methods> diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml index a840cb2ec7..90c81686b1 100644 --- a/doc/classes/Mutex.xml +++ b/doc/classes/Mutex.xml @@ -7,7 +7,7 @@ A synchronization mutex (mutual exclusion). This is used to synchronize multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees that only one thread can ever acquire the lock at a time. A mutex can be used to protect a critical section; however, be careful to avoid deadlocks. </description> <tutorials> - <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link> + <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link> </tutorials> <methods> <method name="lock"> diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 3745b394e0..8a12314ba8 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -17,7 +17,7 @@ [b]Networking with nodes:[/b] After connecting to a server (or making one, see [ENetMultiplayerPeer]), it is possible to use the built-in RPC (remote procedure call) system to communicate over the network. By calling [method rpc] with a method name, it will be called locally and in all connected peers (peers = clients and the server that accepts connections). To identify which node receives the RPC call, Godot will use its [NodePath] (make sure node names are the same on all peers). Also, take a look at the high-level networking tutorial and corresponding demos. </description> <tutorials> - <link title="Nodes and scenes">https://docs.godotengine.org/en/latest/getting_started/step_by_step/nodes_and_scenes.htmltml</link> + <link title="Nodes and scenes">$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html</link> <link title="All Demos">https://github.com/godotengine/godot-demo-projects/</link> </tutorials> <methods> @@ -233,6 +233,14 @@ <description> Returns an array listing the groups that the node is a member of. [b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] guaranteed. The order of node groups should not be relied upon as it can vary across project runs. + [b]Note:[/b] The engine uses some group names internally (all starting with an underscore). To avoid conflicts with internal groups, do not add custom groups whose name starts with an underscore. To exclude internal groups while looping over [method get_groups], use the following snippet: + [codeblock] + # Stores the node's non-internal groups only (as an array of Strings). + var non_internal_groups = [] + for group in get_groups(): + if not group.begins_with("_"): + non_internal_groups.push_back(group) + [/codeblock] </description> </method> <method name="get_index" qualifiers="const"> @@ -563,6 +571,7 @@ <description> Replaces a node in a scene by the given one. Subscriptions that pass through this node will be lost. If [code]keep_groups[/code] is [code]true[/code], the [code]node[/code] is added to the same groups that the replaced node is in. + Note that the replaced node is not automatically freed, so you either need to keep it in a variable for later use or free it using [method Object.free]. </description> </method> <method name="request_ready"> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index ef5f9ee5c9..b8bf342680 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -7,7 +7,7 @@ A 2D game object, with a transform (position, rotation, and scale). All 2D nodes, including physics objects and sprites, inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control of the node's render order. </description> <tutorials> - <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link> + <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link> <link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link> </tutorials> <methods> diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml index 2ca664e2b5..1036c1fbcf 100644 --- a/doc/classes/Node3D.xml +++ b/doc/classes/Node3D.xml @@ -9,7 +9,7 @@ [b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad]. </description> <tutorials> - <link title="Introduction to 3D">https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html</link> + <link title="Introduction to 3D">$DOCS_URL/tutorials/3d/introduction_to_3d.html</link> <link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link> </tutorials> <methods> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index dcd41e46f0..7088844547 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -142,7 +142,7 @@ <method name="get_cache_dir" qualifiers="const"> <return type="String" /> <description> - Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir]. + Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir]. Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. </description> </method> @@ -179,7 +179,7 @@ <method name="get_config_dir" qualifiers="const"> <return type="String" /> <description> - Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir]. + Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir]. Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. </description> </method> @@ -194,7 +194,7 @@ <method name="get_data_dir" qualifiers="const"> <return type="String" /> <description> - Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir]. + Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir]. Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path. </description> </method> @@ -246,6 +246,13 @@ This can be used to narrow down fully specified locale strings to only the "common" language code, when you don't need the additional information about country code or variants. For example, for a French Canadian user with [code]fr_CA[/code] locale, this would return [code]fr[/code]. </description> </method> + <method name="get_main_thread_id" qualifiers="const"> + <return type="int" /> + <description> + Returns the ID of the main thread. See [method get_thread_caller_id]. + [b]Note:[/b] Thread IDs are not deterministic and may be reused across application restarts. + </description> + </method> <method name="get_model_name" qualifiers="const"> <return type="String" /> <description> @@ -332,7 +339,7 @@ <return type="bool" /> <argument index="0" name="tag_name" type="String" /> <description> - Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details. + Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=$DOCS_URL/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details. [b]Note:[/b] Tag names are case-sensitive. </description> </method> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index 5a84364b92..860e252805 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -29,7 +29,7 @@ [b]Note:[/b] Unlike references to a [RefCounted], references to an Object stored in a variable can become invalid without warning. Therefore, it's recommended to use [RefCounted] for data classes instead of [Object]. </description> <tutorials> - <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link> + <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link> </tutorials> <methods> <method name="_get" qualifiers="virtual"> @@ -350,6 +350,7 @@ <argument index="0" name="property" type="NodePath" /> <description> Gets the object's property indexed by the given [NodePath]. The node path should be relative to the current object and can use the colon character ([code]:[/code]) to access nested properties. Examples: [code]"position:x"[/code] or [code]"material:next_pass:blend_mode"[/code]. + [b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't support actual paths to [Node]s in the scene tree, only colon-separated sub-property paths. For the purpose of nodes, use [method Node.get_node_and_resource] instead. </description> </method> <method name="get_instance_id" qualifiers="const"> @@ -567,7 +568,7 @@ <description> Translates a message using translation catalogs configured in the Project Settings. An additional context could be used to specify the translation context. Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] unchanged. See [method set_message_translation]. - See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method. + See [url=$DOCS_URL/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method. </description> </method> <method name="tr_n" qualifiers="const"> @@ -581,7 +582,7 @@ Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] or [code]plural_message[/code] unchanged. See [method set_message_translation]. The number [code]n[/code] is the number or quantity of the plural object. It will be used to guide the translation system to fetch the correct plural form for the selected language. [b]Note:[/b] Negative and floating-point values usually represent physical entities for which singular and plural don't clearly apply. In such cases, use [method tr]. - See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method. + See [url=$DOCS_URL/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method. </description> </method> </methods> diff --git a/doc/classes/OmniLight3D.xml b/doc/classes/OmniLight3D.xml index e8d5977199..013ad0cc42 100644 --- a/doc/classes/OmniLight3D.xml +++ b/doc/classes/OmniLight3D.xml @@ -7,7 +7,7 @@ An Omnidirectional light is a type of [Light3D] that emits light in all directions. The light is attenuated by distance and this attenuation can be configured by changing its energy, radius, and attenuation parameters. </description> <tutorials> - <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> + <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link> </tutorials> <members> <member name="omni_attenuation" type="float" setter="set_param" getter="get_param" default="1.0"> diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml index 28508c85e0..b5e7b32225 100644 --- a/doc/classes/PCKPacker.xml +++ b/doc/classes/PCKPacker.xml @@ -43,8 +43,8 @@ <method name="pck_start"> <return type="int" enum="Error" /> <argument index="0" name="pck_name" type="String" /> - <argument index="1" name="alignment" type="int" default="0" /> - <argument index="2" name="key" type="String" default="""" /> + <argument index="1" name="alignment" type="int" default="32" /> + <argument index="2" name="key" type="String" default=""0000000000000000000000000000000000000000000000000000000000000000"" /> <argument index="3" name="encrypt_directory" type="bool" default="false" /> <description> Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/code] file extension isn't added automatically, so it should be part of [code]pck_name[/code] (even though it's not required). diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml index d0579c6f6f..d3a770b35b 100644 --- a/doc/classes/PackedScene.xml +++ b/doc/classes/PackedScene.xml @@ -5,7 +5,7 @@ </brief_description> <description> A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself. - Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [code]owner[/code] property on [Node]). + Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [member Node.owner] property). [b]Note:[/b] The node doesn't need to own itself. [b]Example of loading a saved scene:[/b] [codeblocks] @@ -22,7 +22,7 @@ AddChild(scene); [/csharp] [/codeblocks] - [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [code]Node2D[/code] ([code]node[/code]), [code]RigidDynamicBody2D[/code] ([code]body[/code]) and [code]CollisionObject2D[/code] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code]. + [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [Node2D] ([code]node[/code]), [RigidDynamicBody2D] ([code]body[/code]) and [CollisionObject2D] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code]. [codeblocks] [gdscript] # Create the objects. diff --git a/doc/classes/PhysicalSkyMaterial.xml b/doc/classes/PhysicalSkyMaterial.xml index b90f52a70d..e1e50a2b51 100644 --- a/doc/classes/PhysicalSkyMaterial.xml +++ b/doc/classes/PhysicalSkyMaterial.xml @@ -23,7 +23,7 @@ <member name="mie_coefficient" type="float" setter="set_mie_coefficient" getter="get_mie_coefficient" default="0.005"> Controls the strength of mie scattering for the sky. Mie scattering results from light colliding with larger particles (like water). On earth, mie scattering results in a whitish color around the sun and horizon. </member> - <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.36, 0.56, 0.82, 1)"> + <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.63, 0.77, 0.92, 1)"> Controls the [Color] of the mie scattering effect. While not physically accurate, this allows for the creation of alien looking planets. </member> <member name="mie_eccentricity" type="float" setter="set_mie_eccentricity" getter="get_mie_eccentricity" default="0.8"> @@ -35,7 +35,7 @@ <member name="rayleigh_coefficient" type="float" setter="set_rayleigh_coefficient" getter="get_rayleigh_coefficient" default="2.0"> Controls the strength of the Rayleigh scattering. Rayleigh scattering results from light colliding with small particles. It is responsible for the blue color of the sky. </member> - <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.056, 0.14, 0.3, 1)"> + <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.26, 0.41, 0.58, 1)"> Controls the [Color] of the Rayleigh scattering. While not physically accurate, this allows for the creation of alien looking planets. For example, setting this to a red [Color] results in a Mars looking atmosphere with a corresponding blue sunset. </member> <member name="sun_disk_scale" type="float" setter="set_sun_disk_scale" getter="get_sun_disk_scale" default="1.0"> diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml index 7775cfb2f9..08f9de53ca 100644 --- a/doc/classes/PhysicsBody2D.xml +++ b/doc/classes/PhysicsBody2D.xml @@ -7,7 +7,7 @@ PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> </tutorials> <methods> <method name="add_collision_exception_with"> diff --git a/doc/classes/PhysicsBody3D.xml b/doc/classes/PhysicsBody3D.xml index 9cf587f2e0..3c52850eec 100644 --- a/doc/classes/PhysicsBody3D.xml +++ b/doc/classes/PhysicsBody3D.xml @@ -7,7 +7,7 @@ PhysicsBody3D is an abstract base class for implementing a physics body. All *Body types inherit from it. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> </tutorials> <methods> <method name="add_collision_exception_with"> diff --git a/doc/classes/PhysicsDirectBodyState2D.xml b/doc/classes/PhysicsDirectBodyState2D.xml index 3fe9cd776c..c33bd930be 100644 --- a/doc/classes/PhysicsDirectBodyState2D.xml +++ b/doc/classes/PhysicsDirectBodyState2D.xml @@ -7,8 +7,8 @@ Provides direct access to a physics body in the [PhysicsServer2D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody2D._integrate_forces]. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <methods> <method name="add_central_force"> diff --git a/doc/classes/PhysicsDirectBodyState3D.xml b/doc/classes/PhysicsDirectBodyState3D.xml index efa9eb9cd6..7aa46dec2f 100644 --- a/doc/classes/PhysicsDirectBodyState3D.xml +++ b/doc/classes/PhysicsDirectBodyState3D.xml @@ -7,8 +7,8 @@ Provides direct access to a physics body in the [PhysicsServer3D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody3D._integrate_forces]. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <methods> <method name="add_central_force"> diff --git a/doc/classes/PhysicsDirectSpaceState2D.xml b/doc/classes/PhysicsDirectSpaceState2D.xml index 107d276df2..fb82aaf36a 100644 --- a/doc/classes/PhysicsDirectSpaceState2D.xml +++ b/doc/classes/PhysicsDirectSpaceState2D.xml @@ -7,8 +7,8 @@ Direct access object to a space in the [PhysicsServer2D]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <methods> <method name="cast_motion"> diff --git a/doc/classes/PhysicsDirectSpaceState3D.xml b/doc/classes/PhysicsDirectSpaceState3D.xml index 349ce31ab4..177fca9ce3 100644 --- a/doc/classes/PhysicsDirectSpaceState3D.xml +++ b/doc/classes/PhysicsDirectSpaceState3D.xml @@ -7,8 +7,8 @@ Direct access object to a space in the [PhysicsServer3D]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <methods> <method name="cast_motion"> diff --git a/doc/classes/PhysicsPointQueryParameters2D.xml b/doc/classes/PhysicsPointQueryParameters2D.xml index 6acd83b101..b4cb2145cf 100644 --- a/doc/classes/PhysicsPointQueryParameters2D.xml +++ b/doc/classes/PhysicsPointQueryParameters2D.xml @@ -19,7 +19,7 @@ If [code]true[/code], the query will take [PhysicsBody2D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/PhysicsPointQueryParameters3D.xml b/doc/classes/PhysicsPointQueryParameters3D.xml index 488f56872d..51e8f8c5b4 100644 --- a/doc/classes/PhysicsPointQueryParameters3D.xml +++ b/doc/classes/PhysicsPointQueryParameters3D.xml @@ -16,7 +16,7 @@ If [code]true[/code], the query will take [PhysicsBody3D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/PhysicsRayQueryParameters2D.xml b/doc/classes/PhysicsRayQueryParameters2D.xml index b71b48f223..7e317c18bf 100644 --- a/doc/classes/PhysicsRayQueryParameters2D.xml +++ b/doc/classes/PhysicsRayQueryParameters2D.xml @@ -16,7 +16,7 @@ If [code]true[/code], the query will take [PhysicsBody2D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/PhysicsRayQueryParameters3D.xml b/doc/classes/PhysicsRayQueryParameters3D.xml index 3085ff3b35..c378325a3c 100644 --- a/doc/classes/PhysicsRayQueryParameters3D.xml +++ b/doc/classes/PhysicsRayQueryParameters3D.xml @@ -16,7 +16,7 @@ If [code]true[/code], the query will take [PhysicsBody3D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml index abd19f1326..455f0b67dc 100644 --- a/doc/classes/PhysicsShapeQueryParameters2D.xml +++ b/doc/classes/PhysicsShapeQueryParameters2D.xml @@ -16,7 +16,7 @@ If [code]true[/code], the query will take [PhysicsBody2D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml index 2dffd5347a..789ce0a6c3 100644 --- a/doc/classes/PhysicsShapeQueryParameters3D.xml +++ b/doc/classes/PhysicsShapeQueryParameters3D.xml @@ -16,7 +16,7 @@ If [code]true[/code], the query will take [PhysicsBody3D]s into account. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295"> - The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]"> The list of objects or object [RID]s that will be excluded from collisions. diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml index a20607d0a7..37a8e00b49 100644 --- a/doc/classes/Plane.xml +++ b/doc/classes/Plane.xml @@ -7,7 +7,7 @@ Plane represents a normalized plane equation. Basically, "normal" is the normal of the plane (a,b,c normalized), and "d" is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> </tutorials> <constructors> <constructor name="Plane"> @@ -180,6 +180,8 @@ <return type="bool" /> <argument index="0" name="right" type="Plane" /> <description> + Returns [code]true[/code] if the planes 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 =="> @@ -191,16 +193,20 @@ <return type="bool" /> <argument index="0" name="right" type="Plane" /> <description> + Returns [code]true[/code] if the planes 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 unary+"> <return type="Plane" /> <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="Plane" /> <description> + Returns the negative value of the [Plane]. This is the same as writing [code]Plane(-p.normal, -p.d)[/code]. This operation flips the direction of the normal vector and also flips the distance value, resulting in a Plane that is in the same place, but facing the opposite direction. </description> </operator> </operators> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 05a9608a55..69ee51ca99 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -6,8 +6,8 @@ <description> Contains global variables accessible from everywhere. Use [method get_setting], [method set_setting] or [method has_setting] to access them. Variables stored in [code]project.godot[/code] are also loaded into ProjectSettings, making this object very useful for reading custom game configuration options. When naming a Project Settings property, use the full path to the setting including the category. For example, [code]"application/config/name"[/code] for the project name. Category and property names can be viewed in the Project Settings dialog. - [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url]. - [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations. + [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url]. + [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations. </description> <tutorials> <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> @@ -87,7 +87,7 @@ <return type="String" /> <argument index="0" name="path" type="String" /> <description> - Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path]. + Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path]. [b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work in an exported project. Instead, prepend the executable's base directory to the path when running from an exported project: [codeblock] var path = "" @@ -196,13 +196,17 @@ Background color for the boot splash. </member> <member name="application/boot_splash/fullsize" type="bool" setter="" getter="" default="true"> - If [code]true[/code], scale the boot splash image to the full window length when engine starts. If [code]false[/code], the engine will leave it at the default pixel size. + If [code]true[/code], scale the boot splash image to the full window size (preserving the aspect ratio) when the engine starts. If [code]false[/code], the engine will leave it at the default pixel size. </member> <member name="application/boot_splash/image" type="String" setter="" getter="" default=""""> - Path to an image used as the boot splash. + Path to an image used as the boot splash. If left empty, the default Godot Engine splash will be displayed instead. + [b]Note:[/b] Only effective if [member application/boot_splash/show_image] is [code]true[/code]. + </member> + <member name="application/boot_splash/show_image" type="bool" setter="" getter="" default="true"> + If [code]true[/code], displays the image specified in [member application/boot_splash/image] when the engine starts. If [code]false[/code], only displays the plain color specified in [member application/boot_splash/bg_color]. </member> <member name="application/boot_splash/use_filter" type="bool" setter="" getter="" default="true"> - If [code]true[/code], applies linear filtering when scaling the image (recommended for high resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art). + If [code]true[/code], applies linear filtering when scaling the image (recommended for high-resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art). </member> <member name="application/config/custom_user_dir_name" type="String" setter="" getter="" default=""""> This user directory is used for storing persistent data ([code]user://[/code] filesystem). If left empty, [code]user://[/code] resolves to a project-specific folder in Godot's own configuration folder (see [method OS.get_user_data_dir]). If a custom directory name is defined, this name will be used instead and appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]). @@ -219,7 +223,7 @@ </member> <member name="application/config/name" type="String" setter="" getter="" default=""""> The project's name. It is used both by the Project Manager and by exporters. The project name can be translated by translating its value in localization files. The window title will be set to match the project name automatically on startup. - [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information. + [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information. </member> <member name="application/config/project_settings_override" type="String" setter="" getter="" default=""""> Specifies a file to override project settings. For example: [code]user://custom_settings.cfg[/code]. See "Overriding" in the [ProjectSettings] class description at the top for more information. @@ -498,7 +502,7 @@ </member> <member name="display/window/size/fullscreen" type="bool" setter="" getter="" default="false"> Sets the main window to full screen when the project starts. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project. - Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. + Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. [b]Note:[/b] This setting is ignored on iOS, Android, and HTML5. </member> <member name="display/window/size/height" type="int" setter="" getter="" default="600"> diff --git a/doc/classes/Quaternion.xml b/doc/classes/Quaternion.xml index 95b2316bf3..9fa2d9b60b 100644 --- a/doc/classes/Quaternion.xml +++ b/doc/classes/Quaternion.xml @@ -9,7 +9,7 @@ Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors. </description> <tutorials> - <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link> + <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <constructors> @@ -195,54 +195,64 @@ <return type="bool" /> <argument index="0" name="right" type="Quaternion" /> <description> + Returns [code]true[/code] if the quaternions 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="Quaternion" /> <argument index="0" name="right" type="Quaternion" /> <description> + Composes these two quaternions by multiplying them together. This has the effect of rotating the second quaternion (the child) by the first quaternion (the parent). </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Rotates (multiplies) the [Vector3] by the given [Quaternion]. </description> </operator> <operator name="operator *"> <return type="Quaternion" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator *"> <return type="Quaternion" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator +"> <return type="Quaternion" /> <argument index="0" name="right" type="Quaternion" /> <description> + Adds each component of the left [Quaternion] to the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression, such as approximating an intermediate rotation between two nearby rotations. </description> </operator> <operator name="operator -"> <return type="Quaternion" /> <argument index="0" name="right" type="Quaternion" /> <description> + Subtracts each component of the left [Quaternion] by the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator /"> <return type="Quaternion" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator /"> <return type="Quaternion" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator =="> @@ -254,22 +264,27 @@ <return type="bool" /> <argument index="0" name="right" type="Quaternion" /> <description> + Returns [code]true[/code] if the quaternions 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 []"> <return type="float" /> <argument index="0" name="index" type="int" /> <description> + Access quaternion components using their index. [code]q[0][/code] is equivalent to [code]q.x[/code], [code]q[1][/code] is equivalent to [code]q.y[/code], [code]q[2][/code] is equivalent to [code]q.z[/code], and [code]q[3][/code] is equivalent to [code]q.w[/code]. </description> </operator> <operator name="operator unary+"> <return type="Quaternion" /> <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="Quaternion" /> <description> + Returns the negative value of the [Quaternion]. This is the same as writing [code]Quaternion(-q.x, -q.y, -q.z, -q.w)[/code]. This operation results in a quaternion that represents the same rotation. </description> </operator> </operators> diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml index c011755df1..53d1554272 100644 --- a/doc/classes/RandomNumberGenerator.xml +++ b/doc/classes/RandomNumberGenerator.xml @@ -16,7 +16,7 @@ [b]Note:[/b] The default values of [member seed] and [member state] properties are pseudo-random, and changes when calling [method randomize]. The [code]0[/code] value documented here is a placeholder, and not the actual default seed. </description> <tutorials> - <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link> + <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link> </tutorials> <methods> <method name="randf"> diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml index d7540ef206..fe2885378a 100644 --- a/doc/classes/RayCast2D.xml +++ b/doc/classes/RayCast2D.xml @@ -11,7 +11,7 @@ RayCast2D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast. </description> <tutorials> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <methods> <method name="add_exception"> @@ -110,7 +110,7 @@ If [code]true[/code], collision with [PhysicsBody2D]s will be reported. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true"> If [code]true[/code], collisions will be reported. diff --git a/doc/classes/RayCast3D.xml b/doc/classes/RayCast3D.xml index f15643c93f..8abd3f84b1 100644 --- a/doc/classes/RayCast3D.xml +++ b/doc/classes/RayCast3D.xml @@ -11,7 +11,7 @@ RayCast3D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame), use [method force_raycast_update] after adjusting the raycast. </description> <tutorials> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> <methods> @@ -112,7 +112,7 @@ If [code]true[/code], collision with [PhysicsBody3D]s will be reported. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="debug_shape_custom_color" type="Color" setter="set_debug_shape_custom_color" getter="get_debug_shape_custom_color" default="Color(0, 0, 0, 1)"> The custom color to use to draw the shape in the editor and at run-time if [b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This color will be highlighted at run-time if the [RayCast3D] is colliding with something. diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml index ad88551d9d..4dc3859ca5 100644 --- a/doc/classes/Rect2.xml +++ b/doc/classes/Rect2.xml @@ -9,9 +9,9 @@ The 3D counterpart to [Rect2] is [AABB]. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> - <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> + <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link> </tutorials> <constructors> <constructor name="Rect2"> @@ -194,12 +194,15 @@ <return type="bool" /> <argument index="0" name="right" type="Rect2" /> <description> + Returns [code]true[/code] if the rectangles 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="Rect2" /> <argument index="0" name="right" type="Transform2D" /> <description> + Inversely transforms (multiplies) the [Rect2] by the given [Transform2D] transformation matrix. </description> </operator> <operator name="operator =="> @@ -211,6 +214,8 @@ <return type="bool" /> <argument index="0" name="right" type="Rect2" /> <description> + Returns [code]true[/code] if the rectangles 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> </operators> diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml index f5ea6a6c87..d66b589ec1 100644 --- a/doc/classes/Rect2i.xml +++ b/doc/classes/Rect2i.xml @@ -8,8 +8,8 @@ It uses integer coordinates. If you need floating-point coordinates, use [Rect2] instead. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> </tutorials> <constructors> <constructor name="Rect2i"> @@ -184,6 +184,7 @@ <return type="bool" /> <argument index="0" name="right" type="Rect2i" /> <description> + Returns [code]true[/code] if the rectangles are not equal. </description> </operator> <operator name="operator =="> @@ -195,6 +196,7 @@ <return type="bool" /> <argument index="0" name="right" type="Rect2i" /> <description> + Returns [code]true[/code] if the rectangles are equal. </description> </operator> </operators> diff --git a/doc/classes/RefCounted.xml b/doc/classes/RefCounted.xml index de314fbcb7..378df6f155 100644 --- a/doc/classes/RefCounted.xml +++ b/doc/classes/RefCounted.xml @@ -10,7 +10,7 @@ [b]Note:[/b] In C#, reference-counted objects will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free reference-counted objects that are no longer in use. This means that unused ones will linger on for a while before being removed. </description> <tutorials> - <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link> + <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link> </tutorials> <methods> <method name="init_ref"> diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml index 1db6879b45..99ad067469 100644 --- a/doc/classes/ReferenceRect.xml +++ b/doc/classes/ReferenceRect.xml @@ -16,7 +16,7 @@ Sets the border width of the [ReferenceRect]. The border grows both inwards and outwards with respect to the rectangle box. </member> <member name="editor_only" type="bool" setter="set_editor_only" getter="get_editor_only" default="true"> - If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game. + If [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in the running project. </member> </members> </class> diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml index 7f2bd118d6..8bf8534334 100644 --- a/doc/classes/ReflectionProbe.xml +++ b/doc/classes/ReflectionProbe.xml @@ -8,7 +8,7 @@ The [ReflectionProbe] is used to create high-quality reflections at the cost of performance. It can be combined with [VoxelGI]s and Screen Space Reflections to achieve high quality reflections. [ReflectionProbe]s render all objects within their [member cull_mask], so updating them can be quite expensive. It is best to update them once with the important static objects and then leave them. </description> <tutorials> - <link title="Reflection probes">https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link> + <link title="Reflection probes">$DOCS_URL/tutorials/3d/reflection_probes.html</link> </tutorials> <members> <member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)"> diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml index ddb25788c8..7f4d5cf1cd 100644 --- a/doc/classes/RenderingServer.xml +++ b/doc/classes/RenderingServer.xml @@ -15,7 +15,7 @@ In 2D, all visible objects are some form of canvas item. In order to be visible, a canvas item needs to be the child of a canvas attached to a viewport, or it needs to be the child of another canvas item that is eventually attached to the canvas. </description> <tutorials> - <link title="Optimization using Servers">https://docs.godotengine.org/en/latest/tutorials/performance/using_servers.html</link> + <link title="Optimization using Servers">$DOCS_URL/tutorials/performance/using_servers.html</link> </tutorials> <methods> <method name="bake_render_uv2"> diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml index 327183893b..02d1c7e97d 100644 --- a/doc/classes/Resource.xml +++ b/doc/classes/Resource.xml @@ -8,8 +8,8 @@ [b]Note:[/b] In C#, resources will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free resources that are no longer in use. This means that unused resources will linger on for a while before being removed. </description> <tutorials> - <link title="Resources">https://docs.godotengine.org/en/latest/tutorials/scripting/resources.html</link> - <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link> + <link title="Resources">$DOCS_URL/tutorials/scripting/resources.html</link> + <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link> </tutorials> <methods> <method name="duplicate" qualifiers="const"> diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml index 9f551ad1d2..f20b55fbc8 100644 --- a/doc/classes/ResourceImporter.xml +++ b/doc/classes/ResourceImporter.xml @@ -7,7 +7,7 @@ This is the base class for the resource importers implemented in core. To implement your own resource importers using editor plugins, see [EditorImportPlugin]. </description> <tutorials> - <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link> + <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link> </tutorials> <constants> <constant name="IMPORT_ORDER_DEFAULT" value="0" enum="ImportOrder"> diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml index 62323722f7..4329ccfdf5 100644 --- a/doc/classes/RichTextEffect.xml +++ b/doc/classes/RichTextEffect.xml @@ -19,7 +19,7 @@ [b]Note:[/b] As soon as a [RichTextLabel] contains at least one [RichTextEffect], it will continuously process the effect unless the project is paused. This may impact battery life negatively. </description> <tutorials> - <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link> + <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link> <link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link> </tutorials> <methods> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 3255c748b7..6bfaca8928 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -11,7 +11,7 @@ [b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to horizontally align text to the center. Instead, enable [member bbcode_enabled] and surround the text in a [code][center][/code] tag as follows: [code][center]Example[/center][/code]. There is currently no built-in way to vertically align text either, but this can be emulated by relying on anchors/containers and the [member fit_content_height] property. </description> <tutorials> - <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link> + <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link> <link title="GUI Rich Text/BBcode Demo">https://godotengine.org/asset-library/asset/132</link> <link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link> </tutorials> diff --git a/doc/classes/RigidDynamicBody3D.xml b/doc/classes/RigidDynamicBody3D.xml index ba9acdf4bf..c75055e0df 100644 --- a/doc/classes/RigidDynamicBody3D.xml +++ b/doc/classes/RigidDynamicBody3D.xml @@ -10,7 +10,7 @@ If you need to override the default physics behavior, you can write a custom force integration function. See [member custom_integrator]. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> <link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link> <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> </tutorials> diff --git a/doc/classes/RootMotionView.xml b/doc/classes/RootMotionView.xml index 5db13de44f..203a48996f 100644 --- a/doc/classes/RootMotionView.xml +++ b/doc/classes/RootMotionView.xml @@ -8,7 +8,7 @@ [b]Note:[/b] [RootMotionView] is only visible in the editor. It will be hidden automatically in the running project, and will also be converted to a plain [Node] in the running project. This means a script attached to a [RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of [code]extends RootMotionView[/code]. Additionally, it must not be a [code]@tool[/code] script. </description> <tutorials> - <link title="Using AnimationTree - Root motion">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#root-motion</link> + <link title="Using AnimationTree - Root motion">$DOCS_URL/tutorials/animation/animation_tree.html#root-motion</link> </tutorials> <members> <member name="animation_path" type="NodePath" setter="set_animation_path" getter="get_animation_path"> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index 6d0ec44b69..c1dca44896 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -9,8 +9,8 @@ [SceneTree] is the default [MainLoop] implementation used by scenes, and is thus in charge of the game loop. </description> <tutorials> - <link title="SceneTree">https://docs.godotengine.org/en/latest/tutorials/scripting/scene_tree.html</link> - <link title="Multiple resolutions">https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html</link> + <link title="SceneTree">$DOCS_URL/tutorials/scripting/scene_tree.html</link> + <link title="Multiple resolutions">$DOCS_URL/tutorials/rendering/multiple_resolutions.html</link> </tutorials> <methods> <method name="call_group" qualifiers="vararg"> diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index 7c59e87848..ab88bdaa73 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -8,7 +8,7 @@ The [code]new[/code] method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> - <link title="Scripting documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/index.html</link> + <link title="Scripting documentation index">$DOCS_URL/tutorials/scripting/index.html</link> </tutorials> <methods> <method name="can_instantiate" qualifiers="const"> diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml index 9ff9cc0c87..9e1d8012b7 100644 --- a/doc/classes/Semaphore.xml +++ b/doc/classes/Semaphore.xml @@ -7,7 +7,7 @@ A synchronization semaphore which can be used to synchronize multiple [Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. For a binary version, see [Mutex]. </description> <tutorials> - <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link> + <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link> </tutorials> <methods> <method name="post"> diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml index 751afb9b65..d81b4bc372 100644 --- a/doc/classes/Shader.xml +++ b/doc/classes/Shader.xml @@ -7,7 +7,7 @@ This class allows you to define a custom shader program that can be used by a [ShaderMaterial]. Shaders allow you to write your own custom behavior for rendering objects or updating particle information. For a detailed explanation and usage, please see the tutorials linked below. </description> <tutorials> - <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link> + <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link> </tutorials> <methods> <method name="get_default_texture_param" qualifiers="const"> diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml index d5fc3fd210..04f0fac104 100644 --- a/doc/classes/ShaderMaterial.xml +++ b/doc/classes/ShaderMaterial.xml @@ -7,7 +7,7 @@ A material that uses a custom [Shader] program to render either items to screen or process particles. You can create multiple materials for the same shader but configure different values for the uniforms defined in the shader. </description> <tutorials> - <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link> + <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link> </tutorials> <methods> <method name="get_shader_param" qualifiers="const"> diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml index 04f91d19da..9746519173 100644 --- a/doc/classes/Shape2D.xml +++ b/doc/classes/Shape2D.xml @@ -7,7 +7,7 @@ Base class for all 2D shapes. All 2D shape types inherit from this. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> </tutorials> <methods> <method name="collide"> diff --git a/doc/classes/Shape3D.xml b/doc/classes/Shape3D.xml index 96f8833486..67af52768f 100644 --- a/doc/classes/Shape3D.xml +++ b/doc/classes/Shape3D.xml @@ -7,7 +7,7 @@ Base class for all 3D shape resources. Nodes that inherit from this can be used as shapes for a [PhysicsBody3D] or [Area3D] objects. </description> <tutorials> - <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link> + <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link> </tutorials> <methods> <method name="get_debug_mesh"> diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml index 7aa06985bf..20bec14795 100644 --- a/doc/classes/Skeleton2D.xml +++ b/doc/classes/Skeleton2D.xml @@ -8,7 +8,7 @@ To setup different types of inverse kinematics for the given Skeleton2D, a [SkeletonModificationStack2D] should be created. They can be applied by creating the desired number of modifications, which can be done by increasing [member SkeletonModificationStack2D.modification_count]. </description> <tutorials> - <link title="2D skeletons">https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html</link> + <link title="2D skeletons">$DOCS_URL/tutorials/animation/2d_skeletons.html</link> </tutorials> <methods> <method name="execute_modifications"> diff --git a/doc/classes/SoftDynamicBody3D.xml b/doc/classes/SoftDynamicBody3D.xml index f999f77e78..fceebddf35 100644 --- a/doc/classes/SoftDynamicBody3D.xml +++ b/doc/classes/SoftDynamicBody3D.xml @@ -7,7 +7,7 @@ A deformable physics body. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials. </description> <tutorials> - <link title="SoftBody">https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html</link> + <link title="SoftBody">$DOCS_URL/tutorials/physics/soft_body.html</link> </tutorials> <methods> <method name="add_collision_exception_with"> @@ -92,11 +92,11 @@ <members> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1"> The physics layers this SoftDynamicBody3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> The physics layers this SoftDynamicBody3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer]. - [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="damping_coefficient" type="float" setter="set_damping_coefficient" getter="get_damping_coefficient" default="0.01"> </member> diff --git a/doc/classes/SpotLight3D.xml b/doc/classes/SpotLight3D.xml index 8c10ec36a8..f9f9a62baa 100644 --- a/doc/classes/SpotLight3D.xml +++ b/doc/classes/SpotLight3D.xml @@ -7,7 +7,7 @@ A Spotlight is a type of [Light3D] node that emits lights in a specific direction, in the shape of a cone. The light is attenuated through the distance. This attenuation can be configured by changing the energy, radius and attenuation parameters of [Light3D]. </description> <tutorials> - <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> + <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <members> diff --git a/doc/classes/SpringArm3D.xml b/doc/classes/SpringArm3D.xml index 2cd8fa71cf..a54578cff4 100644 --- a/doc/classes/SpringArm3D.xml +++ b/doc/classes/SpringArm3D.xml @@ -41,7 +41,7 @@ </methods> <members> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The layers against which the collision check shall be done. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The layers against which the collision check shall be done. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.01"> When the collision check is made, a candidate length for the SpringArm3D is given. diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml index 43ba95e345..1a8bf0e202 100644 --- a/doc/classes/StandardMaterial3D.xml +++ b/doc/classes/StandardMaterial3D.xml @@ -5,6 +5,6 @@ <description> </description> <tutorials> - <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link> + <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link> </tutorials> </class> diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml index 50389f912d..5e6e07fe36 100644 --- a/doc/classes/StreamPeerSSL.xml +++ b/doc/classes/StreamPeerSSL.xml @@ -8,7 +8,7 @@ [b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android. </description> <tutorials> - <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> + <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link> </tutorials> <methods> <method name="accept_stream"> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index a58bfd5c15..ce902c1216 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -7,7 +7,7 @@ This is the built-in string class (and the one used by GDScript). It supports Unicode and provides all necessary means for string handling. Strings are reference-counted and use a copy-on-write approach, so passing them around is cheap in resources. </description> <tutorials> - <link title="GDScript format strings">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_format_string.html</link> + <link title="GDScript format strings">$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html</link> </tutorials> <constructors> <constructor name="String"> diff --git a/doc/classes/SubViewport.xml b/doc/classes/SubViewport.xml index c2a76b587f..f0b85cdad5 100644 --- a/doc/classes/SubViewport.xml +++ b/doc/classes/SubViewport.xml @@ -6,8 +6,8 @@ <description> </description> <tutorials> - <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link> - <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link> + <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link> <link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link> <link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link> <link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index b8e2f7f03c..16d8595b4e 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -233,8 +233,9 @@ <method name="get_line_column_at_pos" qualifiers="const"> <return type="Vector2i" /> <argument index="0" name="position" type="Vector2i" /> + <argument index="1" name="allow_out_of_bounds" type="bool" default="true" /> <description> - Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line. + Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line. If [code]allow_out_of_bounds[/code] is [code]false[/code] and the position is not over the text, both vector values will be set to [code]-1[/code]. </description> </method> <method name="get_line_count" qualifiers="const"> @@ -361,6 +362,24 @@ Returns OpenType feature [code]tag[/code]. </description> </method> + <method name="get_pos_at_line_column" qualifiers="const"> + <return type="Vector2i" /> + <argument index="0" name="line" type="int" /> + <argument index="1" name="column" type="int" /> + <description> + Returns the local position for the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] of the returned vector equal [code]-1[/code], the position is outside of the viewable area of the control. + [b]Note:[/b] The Y position corresponds to the bottom side of the line. Use [method get_rect_at_line_column] to get the top side position. + </description> + </method> + <method name="get_rect_at_line_column" qualifiers="const"> + <return type="Rect2i" /> + <argument index="0" name="line" type="int" /> + <argument index="1" name="column" type="int" /> + <description> + Returns the local position and size for the grapheme at the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] position of the returned rect equal [code]-1[/code], the position is outside of the viewable area of the control. + [b]Note:[/b] The Y position of the returned rect corresponds to the top side of the line, unlike [method get_pos_at_line_column] which returns the bottom side. + </description> + </method> <method name="get_saved_version" qualifiers="const"> <return type="int" /> <description> @@ -453,6 +472,14 @@ Returns the number of visible lines, including wrapped text. </description> </method> + <method name="get_visible_line_count_in_range" qualifiers="const"> + <return type="int" /> + <argument index="0" name="from_line" type="int" /> + <argument index="1" name="to_line" type="int" /> + <description> + Returns the total number of visible + wrapped lines between the two lines. + </description> + </method> <method name="get_word_at_pos" qualifiers="const"> <return type="String" /> <argument index="0" name="position" type="Vector2" /> diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml index e1c05165de..512078c56c 100644 --- a/doc/classes/TextServer.xml +++ b/doc/classes/TextServer.xml @@ -1028,6 +1028,14 @@ Returns text glyphs in the visual order. </description> </method> + <method name="shaped_text_get_grapheme_bounds" qualifiers="const"> + <return type="Vector2" /> + <argument index="0" name="shaped" type="RID" /> + <argument index="1" name="pos" type="int" /> + <description> + Returns composite character's bounds as offsets from the start of the line. + </description> + </method> <method name="shaped_text_get_line_breaks" qualifiers="const"> <return type="PackedInt32Array" /> <argument index="0" name="shaped" type="RID" /> diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml index 684a1aa755..32f8107e0a 100644 --- a/doc/classes/TextServerExtension.xml +++ b/doc/classes/TextServerExtension.xml @@ -1037,6 +1037,14 @@ Copies text glyphs in the visual order, into preallocated array of the size returned by [method _shaped_text_get_glyph_count]. </description> </method> + <method name="_shaped_text_get_grapheme_bounds" qualifiers="virtual const"> + <return type="Vector2" /> + <argument index="0" name="shaped" type="RID" /> + <argument index="1" name="pos" type="int" /> + <description> + Returns composite character's bounds as offsets from the start of the line. + </description> + </method> <method name="_shaped_text_get_line_breaks" qualifiers="virtual const"> <return type="PackedInt32Array" /> <argument index="0" name="shaped" type="RID" /> diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml index 52a419ce0f..d1a48fda55 100644 --- a/doc/classes/Theme.xml +++ b/doc/classes/Theme.xml @@ -8,7 +8,7 @@ Theme resources can alternatively be loaded by writing them in a [code].theme[/code] file, see the documentation for more information. </description> <tutorials> - <link title="GUI skinning">https://docs.godotengine.org/en/latest/tutorials/ui/gui_skinning.html</link> + <link title="GUI skinning">$DOCS_URL/tutorials/ui/gui_skinning.html</link> </tutorials> <methods> <method name="clear"> diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml index eb2df8a4f9..bd9a6c865a 100644 --- a/doc/classes/Thread.xml +++ b/doc/classes/Thread.xml @@ -8,8 +8,8 @@ [b]Note:[/b] Breakpoints won't break on code if it's running in a thread. This is a current limitation of the GDScript debugger. </description> <tutorials> - <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link> - <link title="Thread-safe APIs">https://docs.godotengine.org/en/latest/tutorials/performance/thread_safe_apis.html</link> + <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link> + <link title="Thread-safe APIs">$DOCS_URL/tutorials/performance/thread_safe_apis.html</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> <methods> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index 22d61c7285..6e552e3649 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -7,7 +7,7 @@ Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list of tiles which are used to create grid-based maps. A TileMap may have several layers, layouting tiles on top of each other. </description> <tutorials> - <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link> + <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link> <link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link> <link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link> <link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link> diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml index 45d6f9ca6c..5d9065f823 100644 --- a/doc/classes/TileSet.xml +++ b/doc/classes/TileSet.xml @@ -13,7 +13,7 @@ See the functions to add new layers for more information. </description> <tutorials> - <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link> + <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link> <link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link> <link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link> <link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link> diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml index ab7632e08e..be41cdde99 100644 --- a/doc/classes/Transform2D.xml +++ b/doc/classes/Transform2D.xml @@ -8,8 +8,8 @@ For more information, read the "Matrices and transforms" documentation article. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link> <link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link> <link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link> </tutorials> @@ -213,30 +213,36 @@ <return type="bool" /> <argument index="0" name="right" type="Transform2D" /> <description> + Returns [code]true[/code] if the transforms 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="PackedVector2Array" /> <argument index="0" name="right" type="PackedVector2Array" /> <description> + Transforms (multiplies) each element of the [Vector2] array by the given [Transform2D] matrix. </description> </operator> <operator name="operator *"> <return type="Transform2D" /> <argument index="0" name="right" type="Transform2D" /> <description> + Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent). </description> </operator> <operator name="operator *"> <return type="Rect2" /> <argument index="0" name="right" type="Rect2" /> <description> + Transforms (multiplies) the [Rect2] by the given [Transform2D] matrix. </description> </operator> <operator name="operator *"> <return type="Vector2" /> <argument index="0" name="right" type="Vector2" /> <description> + Transforms (multiplies) the [Vector2] by the given [Transform2D] matrix. </description> </operator> <operator name="operator *"> @@ -262,12 +268,15 @@ <return type="bool" /> <argument index="0" name="right" type="Transform2D" /> <description> + Returns [code]true[/code] if the transforms 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 []"> <return type="Vector2" /> <argument index="0" name="index" type="int" /> <description> + Access transform components using their index. [code]t[0][/code] is equivalent to [code]t.x[/code], [code]t[1][/code] is equivalent to [code]t.y[/code], and [code]t[2][/code] is equivalent to [code]t.origin[/code]. </description> </operator> </operators> diff --git a/doc/classes/Transform3D.xml b/doc/classes/Transform3D.xml index 8c4965abb4..511574f6aa 100644 --- a/doc/classes/Transform3D.xml +++ b/doc/classes/Transform3D.xml @@ -8,9 +8,9 @@ For more information, read the "Matrices and transforms" documentation article. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link> - <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link> + <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link> <link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link> @@ -147,30 +147,36 @@ <return type="bool" /> <argument index="0" name="right" type="Transform3D" /> <description> + Returns [code]true[/code] if the transforms 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="PackedVector3Array" /> <argument index="0" name="right" type="PackedVector3Array" /> <description> + Transforms (multiplies) each element of the [Vector3] array by the given [Transform3D] matrix. </description> </operator> <operator name="operator *"> <return type="Transform3D" /> <argument index="0" name="right" type="Transform3D" /> <description> + Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent). </description> </operator> <operator name="operator *"> <return type="AABB" /> <argument index="0" name="right" type="AABB" /> <description> + Transforms (multiplies) the [AABB] by the given [Transform3D] matrix. </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Transforms (multiplies) the [Vector3] by the given [Transform3D] matrix. </description> </operator> <operator name="operator *"> @@ -196,6 +202,8 @@ <return type="bool" /> <argument index="0" name="right" type="Transform3D" /> <description> + Returns [code]true[/code] if the transforms 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> </operators> diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml index 2a0695d42e..defebf7ab4 100644 --- a/doc/classes/Translation.xml +++ b/doc/classes/Translation.xml @@ -7,8 +7,8 @@ Translations are resources that can be loaded and unloaded on demand. They map a string to another string. </description> <tutorials> - <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link> - <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link> + <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link> + <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link> </tutorials> <methods> <method name="_get_message" qualifiers="virtual const"> diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml index 8a6fa3571a..519e1cb041 100644 --- a/doc/classes/TranslationServer.xml +++ b/doc/classes/TranslationServer.xml @@ -7,8 +7,8 @@ Server that manages all translations. Translations can be set to it and removed from it. </description> <tutorials> - <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link> - <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link> + <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link> + <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link> </tutorials> <methods> <method name="add_translation"> diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml index 88644e2f8a..b8649a2836 100644 --- a/doc/classes/Variant.xml +++ b/doc/classes/Variant.xml @@ -72,6 +72,6 @@ Modifications to a container will modify all references to it. A [Mutex] should be created to lock it if multi-threaded access is desired. </description> <tutorials> - <link title="Variant class">https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link> + <link title="Variant class">$DOCS_URL/development/cpp/variant_class.html</link> </tutorials> </class> diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml index eaaf41561a..595af6222c 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -9,9 +9,9 @@ [b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will always evaluate to [code]true[/code]. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> - <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> + <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link> <link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link> <link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link> <link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link> @@ -75,6 +75,7 @@ <argument index="0" name="to" type="Vector2" /> <description> Returns the angle between the line connecting the two points and the X axis, in radians. + [code]a.angle_to_point(b)[/code] is equivalent of doing [code](b - a).angle()[/code]. [url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/vector2_angle_to_point.png]Illustration of the returned angle.[/url] </description> </method> @@ -351,72 +352,97 @@ <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <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="Vector2" /> <argument index="0" name="right" type="Vector2" /> <description> + Multiplies each component of the [Vector2] by the components of the given [Vector2]. + [codeblock] + print(Vector2(10, 20) * Vector2(3, 4)) # Prints "(30, 80)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector2" /> <argument index="0" name="right" type="Transform2D" /> <description> + Inversely transforms (multiplies) the [Vector2] by the given [Transform2D] transformation matrix. </description> </operator> <operator name="operator *"> <return type="Vector2" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Vector2] by the given [float]. </description> </operator> <operator name="operator *"> <return type="Vector2" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Vector2] by the given [int]. </description> </operator> <operator name="operator +"> <return type="Vector2" /> <argument index="0" name="right" type="Vector2" /> <description> + Adds each component of the [Vector2] by the components of the given [Vector2]. + [codeblock] + print(Vector2(10, 20) + Vector2(3, 4)) # Prints "(13, 24)" + [/codeblock] </description> </operator> <operator name="operator -"> <return type="Vector2" /> <argument index="0" name="right" type="Vector2" /> <description> + Subtracts each component of the [Vector2] by the components of the given [Vector2]. + [codeblock] + print(Vector2(10, 20) - Vector2(3, 4)) # Prints "(7, 16)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector2" /> <argument index="0" name="right" type="Vector2" /> <description> + Divides each component of the [Vector2] by the components of the given [Vector2]. + [codeblock] + print(Vector2(10, 20) / Vector2(2, 5)) # Prints "(5, 4)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector2" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Vector2] by the given [float]. </description> </operator> <operator name="operator /"> <return type="Vector2" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Vector2] by the given [int]. </description> </operator> <operator name="operator <"> <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <description> + Compares two [Vector2] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator <="> <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <description> + Compares two [Vector2] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator =="> @@ -428,34 +454,41 @@ <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <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 >"> <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <description> + Compares two [Vector2] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator >="> <return type="bool" /> <argument index="0" name="right" type="Vector2" /> <description> + Compares two [Vector2] vectors by first checking if the X value of the left vector is greater 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. This operator is useful for sorting vectors. </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], and [code]v[1][/code] is equivalent to [code]v.y[/code]. </description> </operator> <operator name="operator unary+"> <return type="Vector2" /> <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="Vector2" /> <description> + Returns the negative value of the [Vector2]. This is the same as writing [code]Vector2(-v.x, -v.y)[/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/Vector2i.xml b/doc/classes/Vector2i.xml index 71882e5b0c..62362409a5 100644 --- a/doc/classes/Vector2i.xml +++ b/doc/classes/Vector2i.xml @@ -9,8 +9,8 @@ [b]Note:[/b] In a boolean context, a Vector2i will evaluate to [code]false[/code] if it's equal to [code]Vector2i(0, 0)[/code]. Otherwise, a Vector2i will always evaluate to [code]true[/code]. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> <link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link> </tutorials> <constructors> @@ -115,78 +115,115 @@ <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Returns [code]true[/code] if the vectors are not equal. </description> </operator> <operator name="operator %"> <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> + Gets the remainder of each component of the [Vector2i] with the components of the given [Vector2i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers. + [codeblock] + print(Vector2i(10, -20) % Vector2i(7, 8)) # Prints "(3, -4)" + [/codeblock] </description> </operator> <operator name="operator %"> <return type="Vector2i" /> <argument index="0" name="right" type="int" /> <description> + Gets the remainder of each component of the [Vector2i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers. + [codeblock] + print(Vector2i(10, -20) % 7) # Prints "(3, -6)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> + Multiplies each component of the [Vector2i] by the components of the given [Vector2i]. + [codeblock] + print(Vector2i(10, 20) * Vector2i(3, 4)) # Prints "(30, 80)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector2i" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Vector2i] by the given [float] truncated to an integer. + [codeblock] + print(Vector2i(10, 20) * 0.9) # Prints "(0, 0)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector2i" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Vector2i] by the given [int]. </description> </operator> <operator name="operator +"> <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> + Adds each component of the [Vector2i] by the components of the given [Vector2i]. + [codeblock] + print(Vector2i(10, 20) + Vector2i(3, 4)) # Prints "(13, 24)" + [/codeblock] </description> </operator> <operator name="operator -"> <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> + Subtracts each component of the [Vector2i] by the components of the given [Vector2i]. + [codeblock] + print(Vector2i(10, 20) - Vector2i(3, 4)) # Prints "(7, 16)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> + Divides each component of the [Vector2i] by the components of the given [Vector2i]. + [codeblock] + print(Vector2i(10, 20) / Vector2i(2, 5)) # Prints "(5, 4)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector2i" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Vector2i] by the given [float] truncated to an integer. + [codeblock] + print(Vector2i(10, 20) / 2.9) # Prints "(5, 10)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector2i" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Vector2i] by the given [int]. </description> </operator> <operator name="operator <"> <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Compares two [Vector2i] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator <="> <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Compares two [Vector2i] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator =="> @@ -198,34 +235,40 @@ <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Returns [code]true[/code] if the vectors are equal. </description> </operator> <operator name="operator >"> <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Compares two [Vector2i] 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator >="> <return type="bool" /> <argument index="0" name="right" type="Vector2i" /> <description> + Compares two [Vector2i] vectors by first checking if the X value of the left vector is greater 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. This operator is useful for sorting vectors. </description> </operator> <operator name="operator []"> <return type="int" /> <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], and [code]v[1][/code] is equivalent to [code]v.y[/code]. </description> </operator> <operator name="operator unary+"> <return type="Vector2i" /> <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="Vector2i" /> <description> + Returns the negative value of the [Vector2i]. This is the same as writing [code]Vector2i(-v.x, -v.y)[/code]. This operation flips the direction of the vector while keeping the same magnitude. </description> </operator> </operators> diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml index a94cc0086f..62d467c505 100644 --- a/doc/classes/Vector3.xml +++ b/doc/classes/Vector3.xml @@ -9,9 +9,9 @@ [b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 will always evaluate to [code]true[/code]. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> - <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> + <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link> <link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link> <link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link> <link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link> @@ -367,84 +367,111 @@ <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <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="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Multiplies each component of the [Vector3] by the components of the given [Vector3]. + [codeblock] + print(Vector3(10, 20, 30) * Vector3(3, 4, 5)) # Prints "(30, 80, 150)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Basis" /> <description> + Inversely transforms (multiplies) the [Vector3] by the given [Basis] matrix. </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Quaternion" /> <description> + Inversely transforms (multiplies) the [Vector3] by the given [Quaternion]. </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="Transform3D" /> <description> + Inversely transforms (multiplies) the [Vector3] by the given [Transform3D] transformation matrix. </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Vector3] by the given [float]. </description> </operator> <operator name="operator *"> <return type="Vector3" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Vector3] by the given [int]. </description> </operator> <operator name="operator +"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Adds each component of the [Vector3] by the components of the given [Vector3]. + [codeblock] + print(Vector3(10, 20, 30) + Vector3(3, 4, 5)) # Prints "(13, 24, 35)" + [/codeblock] </description> </operator> <operator name="operator -"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Subtracts each component of the [Vector3] by the components of the given [Vector3]. + [codeblock] + print(Vector3(10, 20, 30) - Vector3(3, 4, 5)) # Prints "(7, 16, 25)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector3" /> <argument index="0" name="right" type="Vector3" /> <description> + Divides each component of the [Vector3] by the components of the given [Vector3]. + [codeblock] + print(Vector3(10, 20, 30) / Vector3(2, 5, 3)) # Prints "(5, 4, 10)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector3" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Vector3] by the given [float]. </description> </operator> <operator name="operator /"> <return type="Vector3" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Vector3] by the given [int]. </description> </operator> <operator name="operator <"> <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <description> + Compares two [Vector3] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator <="> <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <description> + Compares two [Vector3] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator =="> @@ -456,34 +483,41 @@ <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <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 >"> <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <description> + Compares two [Vector3] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator >="> <return type="bool" /> <argument index="0" name="right" type="Vector3" /> <description> + Compares two [Vector3] vectors by first checking if the X value of the left vector is greater 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, and then with the Z values. This operator is useful for sorting vectors. </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], and [code]v[2][/code] is equivalent to [code]v.z[/code]. </description> </operator> <operator name="operator unary+"> <return type="Vector3" /> <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="Vector3" /> <description> + Returns the negative value of the [Vector3]. This is the same as writing [code]Vector3(-v.x, -v.y, -v.z)[/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/Vector3i.xml b/doc/classes/Vector3i.xml index 5cd458a2be..17febdea83 100644 --- a/doc/classes/Vector3i.xml +++ b/doc/classes/Vector3i.xml @@ -9,8 +9,8 @@ [b]Note:[/b] In a boolean context, a Vector3i will evaluate to [code]false[/code] if it's equal to [code]Vector3i(0, 0, 0)[/code]. Otherwise, a Vector3i will always evaluate to [code]true[/code]. </description> <tutorials> - <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link> - <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link> + <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> + <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link> <link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link> </tutorials> <constructors> @@ -133,78 +133,115 @@ <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Returns [code]true[/code] if the vectors are not equal. </description> </operator> <operator name="operator %"> <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> + Gets the remainder of each component of the [Vector3i] with the components of the given [Vector3i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers. + [codeblock] + print(Vector3i(10, -20, 30) % Vector3i(7, 8, 9)) # Prints "(3, -4, 3)" + [/codeblock] </description> </operator> <operator name="operator %"> <return type="Vector3i" /> <argument index="0" name="right" type="int" /> <description> + Gets the remainder of each component of the [Vector3i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers. + [codeblock] + print(Vector2i(10, -20, 30) % 7) # Prints "(3, -6, 2)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> + Multiplies each component of the [Vector3i] by the components of the given [Vector3i]. + [codeblock] + print(Vector3i(10, 20, 30) * Vector3i(3, 4, 5)) # Prints "(30, 80, 150)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector3i" /> <argument index="0" name="right" type="float" /> <description> + Multiplies each component of the [Vector3i] by the given [float] truncated to an integer. + [codeblock] + print(Vector3i(10, 20, 30) * 0.9) # Prints "(0, 0, 0)" + [/codeblock] </description> </operator> <operator name="operator *"> <return type="Vector3i" /> <argument index="0" name="right" type="int" /> <description> + Multiplies each component of the [Vector3i] by the given [int]. </description> </operator> <operator name="operator +"> <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> + Adds each component of the [Vector3i] by the components of the given [Vector3i]. + [codeblock] + print(Vector3i(10, 20, 30) + Vector3i(3, 4, 5)) # Prints "(13, 24, 35)" + [/codeblock] </description> </operator> <operator name="operator -"> <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> + Subtracts each component of the [Vector3i] by the components of the given [Vector3i]. + [codeblock] + print(Vector3i(10, 20, 30) - Vector3i(3, 4, 5)) # Prints "(7, 16, 25)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> + Divides each component of the [Vector3i] by the components of the given [Vector3i]. + [codeblock] + print(Vector3i(10, 20, 30) / Vector3i(2, 5, 3)) # Prints "(5, 4, 10)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector3i" /> <argument index="0" name="right" type="float" /> <description> + Divides each component of the [Vector3i] by the given [float] truncated to an integer. + [codeblock] + print(Vector3i(10, 20, 30) / 2.9) # Prints "(5, 10, 15)" + [/codeblock] </description> </operator> <operator name="operator /"> <return type="Vector3i" /> <argument index="0" name="right" type="int" /> <description> + Divides each component of the [Vector3i] by the given [int]. </description> </operator> <operator name="operator <"> <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Compares two [Vector3i] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator <="> <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Compares two [Vector3i] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator =="> @@ -216,34 +253,40 @@ <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Returns [code]true[/code] if the vectors are equal. </description> </operator> <operator name="operator >"> <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Compares two [Vector3i] 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator >="> <return type="bool" /> <argument index="0" name="right" type="Vector3i" /> <description> + Compares two [Vector3i] vectors by first checking if the X value of the left vector is greater 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, and then with the Z values. This operator is useful for sorting vectors. </description> </operator> <operator name="operator []"> <return type="int" /> <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], and [code]v[2][/code] is equivalent to [code]v.z[/code]. </description> </operator> <operator name="operator unary+"> <return type="Vector3i" /> <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="Vector3i" /> <description> + Returns the negative value of the [Vector3i]. This is the same as writing [code]Vector3i(-v.x, -v.y, -v.z)[/code]. This operation flips the direction of the vector while keeping the same magnitude. </description> </operator> </operators> diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index e79cf0d233..d83645a8af 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -12,8 +12,8 @@ Finally, viewports can also behave as render targets, in which case they will not be visible unless the associated texture is used to draw. </description> <tutorials> - <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link> - <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link> + <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link> + <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link> <link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link> <link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link> <link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link> @@ -107,6 +107,12 @@ Returns the drag data from the GUI, that was previously returned by [method Control._get_drag_data]. </description> </method> + <method name="gui_is_drag_successful" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if the drag operation is successful. + </description> + </method> <method name="gui_is_dragging" qualifiers="const"> <return type="bool" /> <description> diff --git a/doc/classes/VisualShaderNode.xml b/doc/classes/VisualShaderNode.xml index b752e94490..cebe7f215f 100644 --- a/doc/classes/VisualShaderNode.xml +++ b/doc/classes/VisualShaderNode.xml @@ -7,7 +7,7 @@ Visual shader graphs consist of various nodes. Each node in the graph is a separate object and they are represented as a rectangular boxes with title and a set of properties. Each node has also connection ports that allow to connect it to another nodes and control the flow of the shader. </description> <tutorials> - <link title="VisualShaders">https://docs.godotengine.org/en/latest/tutorials/shaders/visual_shaders.html</link> + <link title="VisualShaders">$DOCS_URL/tutorials/shaders/visual_shaders.html</link> </tutorials> <methods> <method name="clear_default_input_values"> diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml index 58f345b8f9..995f2796dd 100644 --- a/doc/classes/VisualShaderNodeCustom.xml +++ b/doc/classes/VisualShaderNodeCustom.xml @@ -13,7 +13,7 @@ [/codeblock] </description> <tutorials> - <link title="Visual Shader plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/visual_shader_plugins.html</link> + <link title="Visual Shader plugins">$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html</link> </tutorials> <methods> <method name="_get_category" qualifiers="virtual const"> diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml index 46d7dd6322..a7b501c6a0 100644 --- a/doc/classes/VisualShaderNodeInput.xml +++ b/doc/classes/VisualShaderNodeInput.xml @@ -7,7 +7,7 @@ Gives access to input variables (built-ins) available for the shader. See the shading reference for the list of available built-ins for each shader type (check [code]Tutorials[/code] section for link). </description> <tutorials> - <link title="Shading reference index">https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html</link> + <link title="Shading reference index">$DOCS_URL/tutorials/shaders/shader_reference/index.html</link> </tutorials> <methods> <method name="get_input_real_name" qualifiers="const"> diff --git a/doc/classes/VoxelGI.xml b/doc/classes/VoxelGI.xml index f6470782ee..2c3605aa1c 100644 --- a/doc/classes/VoxelGI.xml +++ b/doc/classes/VoxelGI.xml @@ -4,12 +4,13 @@ Real-time global illumination (GI) probe. </brief_description> <description> - [VoxelGI]s are used to provide high-quality real-time indirect light to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before using, however, once baked, dynamic objects will receive light from them. Further, lights can be fully dynamic or baked. - Having [VoxelGI]s in a scene can be expensive, the quality of the probe can be turned down in exchange for better performance in the [ProjectSettings] using [member ProjectSettings.rendering/global_illumination/voxel_gi/quality]. - [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh. + [VoxelGI]s are used to provide high-quality real-time indirect light and reflections to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before having a visible effect. However, once baked, dynamic objects will receive light from them. Furthermore, lights can be fully dynamic or baked. + [b]Procedural generation:[/b] [VoxelGI] can be baked in an exported project, which makes it suitable for procedurally generated or user-built levels as long as all the geometry is generated in advance. For games where geometry is generated at any time during gameplay, SDFGI is more suitable (see [member Environment.sdfgi_enabled]). + [b]Performance:[/b] [VoxelGI] is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve performance, adjust [member ProjectSettings.rendering/global_illumination/voxel_gi/quality] and enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings. To provide a fallback for low-end hardware, consider adding an option to disable [VoxelGI] in your project's options menus. A [VoxelGI] node can be disabled by hiding it. + [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh. To further prevent light leaks, you can also strategically place temporary [MeshInstance3D] nodes with their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. These temporary nodes can then be hidden after baking the [VoxelGI] node. </description> <tutorials> - <link title="GI probes">https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html</link> + <link title="GI probes">$DOCS_URL/tutorials/3d/gi_probes.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <methods> @@ -19,6 +20,7 @@ <argument index="1" name="create_visual_debug" type="bool" default="false" /> <description> Bakes the effect from all [GeometryInstance3D]s marked with [constant GeometryInstance3D.GI_MODE_BAKED] and [Light3D]s marked with either [constant Light3D.BAKE_DYNAMIC] or [constant Light3D.BAKE_STATIC]. If [code]create_visual_debug[/code] is [code]true[/code], after baking the light, this will generate a [MultiMesh] that has a cube representing each solid cell with each cube colored to the cell's albedo color. This can be used to visualize the [VoxelGI]'s data and debug any issues that may be occurring. + [b]Note:[/b] [method bake] works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a [VoxelGI] node generally takes from 5 to 20 seconds in most scenes. Reducing [member subdiv] can speed up baking. </description> </method> <method name="debug_bake"> @@ -50,7 +52,7 @@ Use 256 subdivisions. </constant> <constant name="SUBDIV_512" value="3" enum="Subdiv"> - Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware this could cause the GPU to stall. + Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware, this could cause the GPU to stall. </constant> <constant name="SUBDIV_MAX" value="4" enum="Subdiv"> Represents the size of the [enum Subdiv] enum. diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml index 0653c8b453..3fee1feae8 100644 --- a/doc/classes/Window.xml +++ b/doc/classes/Window.xml @@ -230,6 +230,12 @@ <description> </description> </method> + <method name="reset_size"> + <return type="void" /> + <description> + Resets the size to the minimum size, which is the max of [member min_size] and (if [member wrap_controls] is enabled) [method get_contents_minimum_size]. This is equivalent to calling [code]set_size(Vector2i())[/code] (or any size below the minimum). + </description> + </method> <method name="set_flag"> <return type="void" /> <argument index="0" name="flag" type="int" enum="Window.Flags" /> @@ -384,7 +390,7 @@ </constant> <constant name="MODE_FULLSCREEN" value="3" enum="Mode"> Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project. - Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. + Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode. </constant> <constant name="FLAG_RESIZE_DISABLED" value="0" enum="Flags"> The window's ability to be resized. diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml index a6a4701dd4..47ab4b3612 100644 --- a/doc/classes/World2D.xml +++ b/doc/classes/World2D.xml @@ -7,7 +7,7 @@ Class that has everything pertaining to a 2D world. A physics space, a visual scenario and a sound space. 2D nodes register their resources into the current 2D world. </description> <tutorials> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <members> <member name="canvas" type="RID" setter="" getter="get_canvas"> diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml index 136ca2c598..fd2f96985c 100644 --- a/doc/classes/World3D.xml +++ b/doc/classes/World3D.xml @@ -7,7 +7,7 @@ Class that has everything pertaining to a world. A physics space, a visual scenario and a sound space. Node3D nodes register their resources into the current world. </description> <tutorials> - <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> + <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link> </tutorials> <members> <member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects"> diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml index bd25a74c5b..793479e074 100644 --- a/doc/classes/WorldEnvironment.xml +++ b/doc/classes/WorldEnvironment.xml @@ -9,7 +9,7 @@ The [WorldEnvironment] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox). Usually, these are added in order to improve the realism/color balance of the scene. </description> <tutorials> - <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link> + <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link> <link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link> <link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> diff --git a/doc/classes/XRCamera3D.xml b/doc/classes/XRCamera3D.xml index 31f05ca06c..ca81f5b169 100644 --- a/doc/classes/XRCamera3D.xml +++ b/doc/classes/XRCamera3D.xml @@ -8,6 +8,6 @@ The position and orientation of this node is automatically updated by the XR Server to represent the location of the HMD if such tracking is available and can thus be used by game logic. Note that, in contrast to the XR Controller, the render thread has access to the most up-to-date tracking data of the HMD and the location of the XRCamera3D can lag a few milliseconds behind what is used for rendering as a result. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> </class> diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml index eb91196e00..0e2785f246 100644 --- a/doc/classes/XRController3D.xml +++ b/doc/classes/XRController3D.xml @@ -10,7 +10,7 @@ As many XR runtimes now use a configurable action map all inputs are named. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> <methods> <method name="get_axis" qualifiers="const"> diff --git a/doc/classes/XRInterface.xml b/doc/classes/XRInterface.xml index 7ae70f97a2..3b03447ed1 100644 --- a/doc/classes/XRInterface.xml +++ b/doc/classes/XRInterface.xml @@ -8,7 +8,7 @@ Interfaces should be written in such a way that simply enabling them will give us a working setup. You can query the available interfaces through [XRServer]. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> <methods> <method name="get_camera_feed_id"> diff --git a/doc/classes/XROrigin3D.xml b/doc/classes/XROrigin3D.xml index 0d8acfeb1b..fc15102976 100644 --- a/doc/classes/XROrigin3D.xml +++ b/doc/classes/XROrigin3D.xml @@ -10,7 +10,7 @@ For example, if your character is driving a car, the XROrigin3D node should be a child node of this car. Or, if you're implementing a teleport system to move your character, you should change the position of this node. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> <members> <member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale" default="1.0"> diff --git a/doc/classes/XRPositionalTracker.xml b/doc/classes/XRPositionalTracker.xml index bd6a518835..439bcfc382 100644 --- a/doc/classes/XRPositionalTracker.xml +++ b/doc/classes/XRPositionalTracker.xml @@ -9,7 +9,7 @@ The [XRController3D] and [XRAnchor3D] both consume objects of this type and should be used in your project. The positional trackers are just under-the-hood objects that make this all work. These are mostly exposed so that GDExtension-based interfaces can interact with them. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> <methods> <method name="get_input" qualifiers="const"> diff --git a/doc/classes/XRServer.xml b/doc/classes/XRServer.xml index 87164ebb52..3a7fdea8d0 100644 --- a/doc/classes/XRServer.xml +++ b/doc/classes/XRServer.xml @@ -7,7 +7,7 @@ The AR/VR server is the heart of our Advanced and Virtual Reality solution and handles all the processing. </description> <tutorials> - <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> + <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link> </tutorials> <methods> <method name="add_interface"> diff --git a/doc/classes/float.xml b/doc/classes/float.xml index 8231173bac..c96360e6ba 100644 --- a/doc/classes/float.xml +++ b/doc/classes/float.xml @@ -72,7 +72,7 @@ <return type="Quaternion" /> <argument index="0" name="right" type="Quaternion" /> <description> - Multiplies each component of the [Quaternion] by the given [float]. + Multiplies each component of the [Quaternion] by the given [float]. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator *"> @@ -81,7 +81,7 @@ <description> Multiplies each component of the [Vector2] by the given [float]. [codeblock] - print(2.5 * Vector2(1, 1)) # Vector2(2.5, 2.5) + print(2.5 * Vector2(1, 3)) # Prints "(2.5, 7.5)" [/codeblock] </description> </operator> @@ -89,9 +89,9 @@ <return type="Vector2i" /> <argument index="0" name="right" type="Vector2i" /> <description> - Multiplies each component of the [Vector2i] by the given [float]. + Multiplies each component of the [Vector2i] by the given [float] truncated to an integer. [codeblock] - print(2.0 * Vector2i(1, 1)) # Vector2i(2.0, 2.0) + print(0.9 * Vector2i(10, 20)) # Prints "(0, 0)" [/codeblock] </description> </operator> @@ -106,7 +106,10 @@ <return type="Vector3i" /> <argument index="0" name="right" type="Vector3i" /> <description> - Multiplies each component of the [Vector3i] by the given [float]. + Multiplies each component of the [Vector3i] by the given [float] truncated to an integer. + [codeblock] + print(0.9 * Vector3i(10, 20, 30)) # Prints "(0, 0, 0)" + [/codeblock] </description> </operator> <operator name="operator *"> diff --git a/doc/classes/int.xml b/doc/classes/int.xml index 94c2601e4a..bb36d83741 100644 --- a/doc/classes/int.xml +++ b/doc/classes/int.xml @@ -91,11 +91,11 @@ <return type="int" /> <argument index="0" name="right" type="int" /> <description> - Returns the result of the modulo operator for two integers, i.e. the remainder after dividing both numbers. + Returns the remainder after dividing two integers. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers. [codeblock] print(5 % 2) # 1 print(12 % 4) # 0 - print(12 % 2) # 2 + print(-5 % 3) # -2 [/codeblock] </description> </operator> @@ -121,12 +121,14 @@ <return type="Color" /> <argument index="0" name="right" type="Color" /> <description> + Multiplies each component of the [Color] by the given [int]. </description> </operator> <operator name="operator *"> <return type="Quaternion" /> <argument index="0" name="right" type="Quaternion" /> <description> + Multiplies each component of the [Quaternion] by the given [int]. This operation is not meaningful on its own, but it can be used as a part of a larger expression. </description> </operator> <operator name="operator *"> diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py index fe8083f218..b5e5cf8fa7 100755 --- a/doc/tools/make_rst.py +++ b/doc/tools/make_rst.py @@ -11,10 +11,8 @@ from collections import OrderedDict # 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 -# http(s)://docs.godotengine.org/<langcode>/<tag>/path/to/page.html(#fragment-tag) -GODOT_DOCS_PATTERN = re.compile( - r"^http(?:s)?://docs\.godotengine\.org/(?:[a-zA-Z0-9.\-_]*)/(?:[a-zA-Z0-9.\-_]*)/(.*)\.html(#.*)?$" -) +# $DOCS_URL/path/to/page.html(#fragment-tag) +GODOT_DOCS_PATTERN = re.compile(r"^\$DOCS_URL/(.*)\.html(#.*)?$") def print_error(error, state): # type: (str, State) -> None @@ -330,7 +328,7 @@ class State: theme_item.text, default_value, ) - class_def.theme_items[theme_item_id] = theme_item_def + class_def.theme_items[theme_item_name] = theme_item_def tutorials = class_root.find("tutorials") if tutorials is not None: @@ -857,16 +855,11 @@ def rstize_text(text, state): # type: (str, State) -> str # Handle [tags] inside_code = False - inside_url = False - url_has_name = False - url_link = "" pos = 0 tag_depth = 0 previous_pos = 0 while True: pos = text.find("[", pos) - if inside_url and (pos > previous_pos): - url_has_name = True if pos == -1: break @@ -912,6 +905,7 @@ def rstize_text(text, state): # type: (str, State) -> str or cmd.startswith("member") or cmd.startswith("signal") or cmd.startswith("constant") + or cmd.startswith("theme_item") ): param = tag_text[space_pos + 1 :] @@ -948,6 +942,13 @@ def rstize_text(text, state): # type: (str, State) -> str print_error("Unresolved member '{}', file: {}".format(param, state.current_class), state) ref_type = "_property" + elif cmd.startswith("theme_item"): + if method_param not in class_def.theme_items: + print_error( + "Unresolved theme item '{}', file: {}".format(param, state.current_class), state + ) + ref_type = "_theme_{}".format(class_def.theme_items[method_param].data_name) + elif cmd.startswith("signal"): if method_param not in class_def.signals: print_error("Unresolved signal '{}', file: {}".format(param, state.current_class), state) @@ -995,17 +996,23 @@ def rstize_text(text, state): # type: (str, State) -> str elif cmd.find("image=") == 0: tag_text = "" # '' elif cmd.find("url=") == 0: - url_link = cmd[4:] - tag_text = "`" - tag_depth += 1 - inside_url = True - url_has_name = False - elif cmd == "/url": - tag_text = ("" if url_has_name else url_link) + " <" + url_link + ">`__" - tag_depth -= 1 - escape_post = True - inside_url = False - url_has_name = False + # URLs are handled in full here as we need to extract the optional link + # title to use `make_link`. + link_url = cmd[4:] + endurl_pos = text.find("[/url]", endq_pos + 1) + if endurl_pos == -1: + print_error( + "Tag depth mismatch for [url]: no closing [/url], file: {}".format(state.current_class), state + ) + break + link_title = text[endq_pos + 1 : endurl_pos] + tag_text = make_link(link_url, link_title) + + pre_text = text[:pos] + text = pre_text + tag_text + text[endurl_pos + 6 :] + pos = len(pre_text) + len(tag_text) + previous_pos = pos + continue elif cmd == "center": tag_depth += 1 tag_text = "" @@ -1252,21 +1259,22 @@ def make_link(url, title): # type: (str, str) -> str if match.lastindex == 2: # Doc reference with fragment identifier: emit direct link to section with reference to page, for example: # `#calling-javascript-from-script in Exporting For Web` - return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`_ in :doc:`../" + groups[0] + "`" - # Commented out alternative: Instead just emit: - # `Subsection in Exporting For Web` - # return "`Subsection <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`" + # Or use the title if provided. + if title != "": + return "`" + title + " <../" + groups[0] + ".html" + groups[1] + ">`__" + return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`" elif match.lastindex == 1: # Doc reference, for example: # `Math` + if title != "": + return ":doc:`" + title + " <../" + groups[0] + ">`" return ":doc:`../" + groups[0] + "`" else: # External link, for example: # `http://enet.bespin.org/usergroup0.html` if title != "": return "`" + title + " <" + url + ">`__" - else: - return "`" + url + " <" + url + ">`__" + return "`" + url + " <" + url + ">`__" def sanitize_operator_name(dirty_name, state): # type: (str, State) -> str diff --git a/doc/translations/ar.po b/doc/translations/ar.po index 851d1f9b1a..c6dd82902f 100644 --- a/doc/translations/ar.po +++ b/doc/translations/ar.po @@ -3674,112 +3674,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4858,7 +4867,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10258,17 +10267,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10277,24 +10290,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10308,62 +10321,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10371,35 +10384,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10407,13 +10420,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10425,78 +10438,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة ظل الزاوية العكسي للمَعالم." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10952,8 +10965,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24974,21 +24990,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24997,14 +25024,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25014,80 +25045,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29306,7 +29337,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30619,7 +30652,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30684,22 +30718,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30714,7 +30750,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30722,19 +30758,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30805,7 +30841,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30863,7 +30900,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34416,7 +34455,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37732,7 +37771,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37762,14 +37801,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37779,7 +37818,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40280,17 +40319,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40308,11 +40373,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40507,7 +40572,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41310,6 +41377,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41327,7 +41412,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41441,7 +41526,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43986,24 +44073,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44013,7 +44106,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44023,27 +44116,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44051,81 +44144,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44133,109 +44226,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44246,91 +44339,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44339,13 +44432,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44355,7 +44448,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44363,19 +44456,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44389,45 +44482,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44436,7 +44529,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44447,7 +44540,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44463,14 +44556,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44478,49 +44571,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44529,7 +44622,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44537,7 +44630,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44545,7 +44638,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44555,7 +44648,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44564,7 +44657,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44573,7 +44666,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44583,7 +44676,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44591,7 +44684,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44601,7 +44694,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44611,7 +44704,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44619,7 +44712,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44628,7 +44721,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44636,7 +44729,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44648,477 +44741,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45126,92 +45219,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45221,33 +45314,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45260,7 +45353,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45272,7 +45365,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45284,7 +45377,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45297,7 +45390,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45305,28 +45398,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45336,25 +45429,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45367,7 +45460,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45379,7 +45472,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45391,7 +45484,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45404,13 +45497,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45418,11 +45511,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45436,7 +45529,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45445,7 +45538,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45461,7 +45554,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45471,7 +45564,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45481,7 +45574,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45492,7 +45585,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45502,7 +45595,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45510,7 +45603,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45521,7 +45614,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45536,7 +45629,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45545,13 +45638,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45560,7 +45653,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45570,7 +45663,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45582,7 +45675,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45592,24 +45685,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45618,7 +45711,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45626,7 +45719,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45635,7 +45728,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45645,7 +45738,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45653,31 +45746,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45685,7 +45778,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45695,21 +45788,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45717,31 +45810,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45749,7 +45842,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45759,7 +45852,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45768,7 +45861,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45777,20 +45870,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45799,7 +45892,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45807,7 +45900,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45816,7 +45909,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45826,20 +45919,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45848,13 +45941,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45864,46 +45957,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45913,7 +46006,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45925,7 +46018,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45933,7 +46026,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45941,7 +46034,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45950,7 +46043,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45964,7 +46057,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45974,7 +46067,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45983,7 +46076,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45993,54 +46086,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46051,61 +46144,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46116,7 +46209,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46125,26 +46218,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46155,20 +46248,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46180,52 +46273,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46233,7 +46326,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46246,7 +46339,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46258,7 +46351,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46270,7 +46363,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46282,7 +46375,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46294,7 +46387,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46958,40 +47051,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46999,14 +47106,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49341,6 +49448,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49358,7 +49481,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49366,11 +49489,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49380,19 +49503,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54807,20 +54930,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54831,28 +54959,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54864,19 +54992,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/ca.po b/doc/translations/ca.po index b8cdfc18a0..02a0705fef 100644 --- a/doc/translations/ca.po +++ b/doc/translations/ca.po @@ -3701,112 +3701,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4882,7 +4891,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10264,15 +10273,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10281,24 +10294,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10312,62 +10325,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10375,35 +10388,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10411,13 +10424,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10429,77 +10442,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10949,8 +10962,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24928,20 +24944,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24950,14 +24977,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24967,80 +24998,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29244,7 +29275,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30550,7 +30583,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30615,22 +30649,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30645,7 +30681,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30653,19 +30689,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30735,7 +30771,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30793,7 +30830,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34327,7 +34366,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37630,7 +37669,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37660,14 +37699,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37677,7 +37716,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40157,17 +40196,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40185,11 +40250,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40384,7 +40449,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41186,6 +41253,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41203,7 +41288,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41317,7 +41402,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43857,24 +43944,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43884,7 +43977,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43894,27 +43987,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43922,81 +44015,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44004,109 +44097,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44117,91 +44210,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44210,13 +44303,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44226,7 +44319,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44234,19 +44327,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44260,45 +44353,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44307,7 +44400,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44318,7 +44411,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44334,14 +44427,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44349,49 +44442,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44400,7 +44493,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44408,7 +44501,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44416,7 +44509,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44426,7 +44519,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44435,7 +44528,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44444,7 +44537,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44454,7 +44547,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44462,7 +44555,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44472,7 +44565,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44482,7 +44575,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44490,7 +44583,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44499,7 +44592,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44507,7 +44600,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44519,477 +44612,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44997,92 +45090,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45092,33 +45185,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45131,7 +45224,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45143,7 +45236,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45155,7 +45248,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45168,7 +45261,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45176,28 +45269,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45207,25 +45300,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45238,7 +45331,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45250,7 +45343,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45262,7 +45355,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45275,13 +45368,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45289,11 +45382,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45307,7 +45400,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45316,7 +45409,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45332,7 +45425,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45342,7 +45435,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45352,7 +45445,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45363,7 +45456,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45373,7 +45466,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45381,7 +45474,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45392,7 +45485,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45407,7 +45500,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45416,13 +45509,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45431,7 +45524,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45441,7 +45534,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45453,7 +45546,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45463,24 +45556,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45489,7 +45582,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45497,7 +45590,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45506,7 +45599,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45516,7 +45609,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45524,31 +45617,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45556,7 +45649,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45566,21 +45659,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45588,31 +45681,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45620,7 +45713,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45630,7 +45723,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45639,7 +45732,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45648,20 +45741,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45670,7 +45763,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45678,7 +45771,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45687,7 +45780,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45697,20 +45790,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45719,13 +45812,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45735,46 +45828,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45784,7 +45877,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45796,7 +45889,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45804,7 +45897,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45812,7 +45905,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45821,7 +45914,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45835,7 +45928,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45845,7 +45938,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45854,7 +45947,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45864,54 +45957,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45922,61 +46015,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45987,7 +46080,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45996,26 +46089,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46026,20 +46119,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46051,52 +46144,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46104,7 +46197,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46117,7 +46210,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46129,7 +46222,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46141,7 +46234,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46153,7 +46246,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46165,7 +46258,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46828,40 +46921,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46869,14 +46976,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49206,6 +49313,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49223,7 +49346,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49231,11 +49354,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49245,19 +49368,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54656,20 +54779,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54680,28 +54808,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54713,19 +54841,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot index 1a3b510515..337c57fe7c 100644 --- a/doc/translations/classes.pot +++ b/doc/translations/classes.pot @@ -3581,112 +3581,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4758,7 +4767,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10135,15 +10144,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10152,24 +10165,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10183,62 +10196,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10246,35 +10259,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10282,13 +10295,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10300,77 +10313,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10818,8 +10831,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24764,20 +24780,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24786,14 +24813,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24803,80 +24834,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29069,7 +29100,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30368,7 +30401,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30433,22 +30467,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30463,7 +30499,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30471,19 +30507,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30551,7 +30587,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30609,7 +30646,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34134,7 +34173,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37429,7 +37468,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37459,14 +37498,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37476,7 +37515,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39954,17 +39993,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39982,11 +40047,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40181,7 +40246,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40983,6 +41050,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41000,7 +41085,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41114,7 +41199,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43654,24 +43741,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43681,7 +43774,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43691,27 +43784,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43719,81 +43812,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43801,109 +43894,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43914,91 +44007,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44007,13 +44100,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44023,7 +44116,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44031,19 +44124,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44057,45 +44150,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44104,7 +44197,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44115,7 +44208,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44131,14 +44224,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44146,49 +44239,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44197,7 +44290,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44205,7 +44298,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44213,7 +44306,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44223,7 +44316,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44232,7 +44325,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44241,7 +44334,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44251,7 +44344,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44259,7 +44352,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44269,7 +44362,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44279,7 +44372,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44287,7 +44380,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44296,7 +44389,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44304,7 +44397,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44316,477 +44409,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44794,92 +44887,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44889,33 +44982,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44928,7 +45021,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44940,7 +45033,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44952,7 +45045,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44965,7 +45058,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44973,28 +45066,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45004,25 +45097,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45035,7 +45128,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45047,7 +45140,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45059,7 +45152,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45072,13 +45165,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45086,11 +45179,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45104,7 +45197,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45113,7 +45206,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45129,7 +45222,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45139,7 +45232,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45149,7 +45242,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45160,7 +45253,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45170,7 +45263,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45178,7 +45271,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45189,7 +45282,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45204,7 +45297,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45213,13 +45306,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45228,7 +45321,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45238,7 +45331,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45250,7 +45343,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45260,24 +45353,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45286,7 +45379,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45294,7 +45387,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45303,7 +45396,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45313,7 +45406,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45321,31 +45414,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45353,7 +45446,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45363,21 +45456,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45385,31 +45478,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45417,7 +45510,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45427,7 +45520,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45436,7 +45529,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45445,20 +45538,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45467,7 +45560,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45475,7 +45568,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45484,7 +45577,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45494,20 +45587,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45516,13 +45609,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45532,46 +45625,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45581,7 +45674,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45593,7 +45686,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45601,7 +45694,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45609,7 +45702,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45618,7 +45711,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45632,7 +45725,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45642,7 +45735,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45651,7 +45744,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45661,54 +45754,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45719,61 +45812,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45784,7 +45877,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45793,26 +45886,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45823,20 +45916,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45848,52 +45941,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45901,7 +45994,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45914,7 +46007,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45926,7 +46019,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45938,7 +46031,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45950,7 +46043,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45962,7 +46055,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46621,40 +46714,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46662,14 +46769,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -48996,6 +49103,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49013,7 +49136,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49021,11 +49144,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49035,19 +49158,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54432,20 +54555,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54456,28 +54584,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54489,19 +54617,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/cs.po b/doc/translations/cs.po index b8efd526d8..f8a912bf24 100644 --- a/doc/translations/cs.po +++ b/doc/translations/cs.po @@ -4093,112 +4093,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5276,7 +5285,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10676,17 +10685,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10695,24 +10708,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10726,62 +10739,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10789,35 +10802,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10825,13 +10838,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10843,78 +10856,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Vrátà arkus tangent parametrů." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11365,8 +11378,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25408,21 +25424,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25431,14 +25458,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25448,80 +25479,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29744,7 +29775,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -31057,7 +31090,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31122,22 +31156,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31152,7 +31188,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31160,19 +31196,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31243,7 +31279,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31301,7 +31338,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34854,7 +34893,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -38172,7 +38211,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38202,14 +38241,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38219,7 +38258,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40726,17 +40765,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40754,11 +40819,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40953,7 +41018,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41756,6 +41823,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41773,7 +41858,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41887,7 +41972,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44433,24 +44520,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44460,7 +44553,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44470,27 +44563,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44498,81 +44591,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44580,109 +44673,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44693,91 +44786,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44786,13 +44879,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44802,7 +44895,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44810,19 +44903,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44836,45 +44929,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44883,7 +44976,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44894,7 +44987,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44910,14 +45003,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44925,49 +45018,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44976,7 +45069,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44984,7 +45077,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44992,7 +45085,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45002,7 +45095,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -45011,7 +45104,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -45020,7 +45113,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45030,7 +45123,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45038,7 +45131,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -45048,7 +45141,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -45058,7 +45151,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45066,7 +45159,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -45075,7 +45168,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45083,7 +45176,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -45095,477 +45188,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45573,92 +45666,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45668,33 +45761,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45707,7 +45800,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45719,7 +45812,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45731,7 +45824,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45744,7 +45837,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45752,28 +45845,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45783,25 +45876,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45814,7 +45907,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45826,7 +45919,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45838,7 +45931,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45851,13 +45944,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45865,11 +45958,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45883,7 +45976,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45892,7 +45985,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45908,7 +46001,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45918,7 +46011,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45928,7 +46021,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45939,7 +46032,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45949,7 +46042,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45957,7 +46050,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45968,7 +46061,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45983,7 +46076,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45992,13 +46085,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -46007,7 +46100,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -46017,7 +46110,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -46029,7 +46122,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -46039,24 +46132,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -46065,7 +46158,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -46073,7 +46166,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -46082,7 +46175,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -46092,7 +46185,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -46100,31 +46193,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46132,7 +46225,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46142,21 +46235,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46164,31 +46257,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46196,7 +46289,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46206,7 +46299,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46215,7 +46308,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46224,20 +46317,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46246,7 +46339,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46254,7 +46347,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46263,7 +46356,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46273,20 +46366,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46295,13 +46388,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46311,46 +46404,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46360,7 +46453,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46372,7 +46465,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46380,7 +46473,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46388,7 +46481,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46397,7 +46490,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46411,7 +46504,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46421,7 +46514,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46430,7 +46523,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46440,54 +46533,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46498,61 +46591,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46563,7 +46656,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46572,26 +46665,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46602,20 +46695,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46627,52 +46720,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46680,7 +46773,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46693,7 +46786,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46705,7 +46798,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46717,7 +46810,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46729,7 +46822,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46741,7 +46834,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47407,40 +47500,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47448,14 +47555,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49789,6 +49896,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49806,7 +49929,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49814,11 +49937,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49828,19 +49951,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55262,20 +55385,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55286,28 +55414,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55319,19 +55447,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/de.po b/doc/translations/de.po index a1c3b07d23..61fe8213cc 100644 --- a/doc/translations/de.po +++ b/doc/translations/de.po @@ -34,12 +34,16 @@ # jmih03 <joerni@mail.de>, 2021. # spoadr <spoadr@gmx.ch>, 2021. # Tim <tim14speckenwirth@gmail.com>, 2021. +# user <online141@gmx.de>, 2021. +# Jummit <jummit@web.de>, 2021. +# Bastian <bastian.ike@gmail.com>, 2021. +# KuhnChris <kuhnchris@kuhnchris.eu>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 22:17+0000\n" -"Last-Translator: Tim <tim14speckenwirth@gmail.com>\n" +"PO-Revision-Date: 2021-11-18 13:37+0000\n" +"Last-Translator: KuhnChris <kuhnchris@kuhnchris.eu>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/de/>\n" "Language: de\n" @@ -47,7 +51,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -55,7 +59,7 @@ msgstr "Beschreibung" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "Tutorials" +msgstr "Anleitungen" #: doc/tools/make_rst.py msgid "Properties" @@ -153,14 +157,13 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" -"Gibt den absoluten Wert des Parameters [code]s[/code] zurück (d.h. positiver " -"Wert).\n" +"Gibt den absoluten Wert des Parameters [code]s[/code] zurück (d.h. " +"vorzeichenloser Wert).\n" "[codeblock]\n" "a = abs(-1) # a ist 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 -#, fuzzy msgid "" "Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of " "cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -171,15 +174,16 @@ msgid "" "c = acos(0.866025)\n" "[/codeblock]" msgstr "" -"Gibt den Bogenkosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie " -"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten.\n" +"Gibt den Arkuskosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie " +"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten. " +"[code]s[/code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] " +"(inklusiv) liegen, sonst wird [method acos] [constant NAN] zurückgeben.\n" "[Codeblock]\n" "# c ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n" "c = acos(0,866025)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:66 -#, fuzzy msgid "" "Returns the arc sine of [code]s[/code] in radians. Use to get the angle of " "sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -190,15 +194,16 @@ msgid "" "s = asin(0.5)\n" "[/codeblock]" msgstr "" -"Gibt den Arcussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie " -"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten.\n" +"Gibt den Arkussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie " +"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten. [code]s[/" +"code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] (inklusiv) " +"liegen, sonst wird [method asin] [constant NAN] zurückgeben.\n" "[Codeblock]\n" "# s ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n" "s = asin(0,5)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:78 -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -224,25 +229,27 @@ msgid "" "a message with clarifying details\n" "[/codeblock]" msgstr "" -"Stellt sicher, dass [code]Bedingung[/code] ist [code]true[/code]. Wenn " -"[code]condition[/code] ist [code]false[/code], wird ein Fehler erzeugt, und " -"das Programm wird angehalten, bis Sie es wieder aufnehmen. Wird nur in Debug-" -"Builds oder beim Ausführen des Spiels vom Editor aus ausgeführt. Verwenden " -"Sie sie für Debugging-Zwecke, um sicherzustellen, dass eine Aussage während " -"der Entwicklung [code]true[/code] ist.\n" -"Das optionale Argument [code]message[/code] wird, falls angegeben, " -"zusätzlich zu der allgemeinen Meldung \"Zusicherung fehlgeschlagen\" " -"angezeigt. Sie können dies verwenden, um zusätzliche Einzelheiten darüber " -"anzugeben, warum die Zusicherung fehlgeschlagen ist.\n" +"Stellt sicher, dass [code]condition[/code] [code]true[/code] ist. Wenn " +"[code]condition[/code] [code]false[/code] ist wird ein Fehler erzeugt. Wenn " +"das Spiel vom Editor aus gestartet wurde wird es außerdem pausiert. Zum " +"Fortfahren muss es vom Editor aus fortgesetzt werden.\n" +"[b]Hinweis:[/b] Der Code innerhalb von [method assert] wird nur in Debug-" +"Builds oder beim Ausführen des Spiels vom Editor ausgeführt. Desswegen " +"sollte kein Code mit Nebeneffekten (z.B.: ändern von Variablen) innerhalb " +"der Argumente von [method assert] genutzt werden. Sonst wird sich das Spiel " +"in exportierten Versionen anders verhalten als im Editor.\n" +"Das optionale Argument [code]message[/code] wird, zusätzlich zu der " +"allgemeinen Fehlermeldung angezeigt. Das kann verwendet werden um genauere " +"Informationen zum Grund des Fehlers zu geben.\n" "[codeblock]\n" "# Angenommen, wir wollen immer eine Geschwindigkeit zwischen 0 und 20\n" -"Geschwindigkeit = -10\n" -"assert(Geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n" -"assert(speed >= 0) # Falsch, das Programm wird gestoppt\n" -"assert(speed >= 0 && speed < 20) # Sie können die beiden bedingten " -"Anweisungen auch in einer Prüfung kombinieren\n" -"assert(Geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die " -"Geschwindigkeitsbegrenzung beträgt 20\" % Geschwindigkeit) # Zeigt eine " +"var geschwindigkeit = -10\n" +"assert(geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n" +"assert(geschwindigkeit >= 0) # Falsch, das Programm wird gestoppt\n" +"assert(geschwindigkeit >= 0 and geschwindigkeit < 20) # Zwei Aussagen können " +"in einer Prüfung zusammengefasst werden\n" +"assert(geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die " +"Geschwindigkeitsbegrenzung beträgt 20\" % geschwindigkeit) # Zeigt eine " "Nachricht mit klärenden Details\n" "[/codeblock]" @@ -351,7 +358,6 @@ msgstr "" "Dies ist die Umkehrung von [method ord]." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -364,13 +370,9 @@ msgstr "" "Klammert [code]Wert[/code] und gibt einen Wert von nicht weniger als " "[code]min[/code] und nicht mehr als [code]max[/code] zurück.\n" "[codeblock]\n" -"speed = 1000\n" -"# a is 20\n" -"a = clamp(speed, 1, 20)\n" -"\n" -"speed = -10\n" -"# a is 1\n" -"a = clamp(speed, 1, 20)\n" +"a = clamp(1000, 1, 20) # a ist 20\n" +"a = clamp(-10, 1, 20) # a ist 1\n" +"a = clamp(15, 1, 20) # a ist 15\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 @@ -398,7 +400,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -406,13 +407,13 @@ msgid "" "a = cos(PI) # a is -1.0\n" "[/codeblock]" msgstr "" -"Gibt den Sinus des Winkels [code]s[/code] in Radiant zurück.\n" +"Gibt den Cosinus des Winkels [code]s[/code] in Radiant zurück.\n" "[codeblock]\n" -"sin(0.523599) # Returns 0.5\n" +"a = cos(TAU) # a ist 1.0\n" +"a = cos(PI) # a ist -1.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:201 -#, fuzzy msgid "" "Returns the hyperbolic cosine of [code]s[/code] in radians.\n" "[codeblock]\n" @@ -421,8 +422,7 @@ msgid "" msgstr "" "Gibt den hyperbolischen Kosinus von [code]s[/code] in Bogenmaß zurück.\n" "[codeblock]\n" -"# Prints 1.543081\n" -"print(cosh(1))\n" +"print(cosh(1)) # Gibt 1.543081 aus\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:211 @@ -434,7 +434,6 @@ msgid "Deprecated alias for [method step_decimals]." msgstr "Veralteter Alias für [method step_decimals]." #: modules/gdscript/doc_classes/@GDScript.xml:227 -#, fuzzy msgid "" "[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in " "Godot 4.0, please use [method move_toward] instead.\n" @@ -444,15 +443,15 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" -"Gibt das Ergebnis von [code]Wert[/code] vermindert um [code]Schritt[/code] * " -"[code]Betrag[/code] zurück.\n" +"[b]Hinweis:[/b] [code]dectime[/code] ist veraltet und wird in Godot 4.0 " +"entfernt. [method move_toward] kann stattdessen verwendet werden.\n" +"Gibt das Ergebnis von [code]value[/code] vermindert um [code]step[/code] * " +"[code]amount[/code] zurück.\n" "[codeblock]\n" -"# a = 59\n" -"a = dectime(60, 10, 0.1))\n" +"a = dectime(60, 10, 0.1)) # a ist 59.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:238 -#, fuzzy msgid "" "Converts an angle expressed in degrees to radians.\n" "[codeblock]\n" @@ -462,20 +461,19 @@ msgstr "" "Rechnet einen im Gradmaß vorliegenden Winkel ins Bogenmaß um und gibt das " "Ergebnis zurück.\n" "[codeblock]\n" -"# r is 3.141593\n" -"r = deg2rad(180)\n" +"r = deg2rad(180) # r ist 3.141593\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 -#, fuzzy msgid "" "Converts a dictionary (previously created with [method inst2dict]) back to " "an instance. Useful for deserializing." msgstr "" -"Konvertiert eine zuvor konvertierte Instanz in ein Wörterbuch, zurück in " -"eine Instanz. Nützlich für die Deserialisierung." +"Konvertiert ein Wörterbuch (das zuvor mit [method inst2dict] erstellt wurde) " +"zurück in eine Instanz. Nützlich für die Deserialisierung." #: modules/gdscript/doc_classes/@GDScript.xml:256 +#, fuzzy msgid "" "Returns an \"eased\" value of [code]x[/code] based on an easing function " "defined with [code]curve[/code]. This easing function is based on an " @@ -495,6 +493,23 @@ msgid "" "See also [method smoothstep]. If you need to perform more advanced " "transitions, use [Tween] or [AnimationPlayer]." msgstr "" +"Gibt einen interpolierten Wert von [code]x[/code] basiert auf einer Funktion " +"die durch [code]curve[/code] definiert wird. Die Funktion basiert auf einem " +"Exponent. Die [code]curve[/code] kann jegliche Gleitkommazahl sein, von " +"welchen diese spezifische Werte zu folgendem Verhalten führen:\n" +"[codeblock]\n" +"- Weniger als -1.0 (exclusiv): Beschleunige in-out\n" +"- 1.0: Linear\n" +"- Zwischen -1.0 und 0.0 (exclusiv): Beschleunige out-in\n" +"- 0.0: Konstant\n" +"- Zwischen 0.0 und 1.0 (exclusiv): Beschleunige in\n" +"- 1.0: Linear\n" +"- Mehr als 1.0 (exclusive): Beschleunige out\n" +"[/codeblock]\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" +"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" +"Siehe auch [method smoothstep]. Falls du fortgeschrittene Übergänge " +"erstellen möchtest, benutze [Tween] oder [AnimationPlayer]." #: modules/gdscript/doc_classes/@GDScript.xml:274 msgid "" @@ -517,7 +532,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:286 -#, fuzzy msgid "" "Rounds [code]s[/code] downward (towards negative infinity), returning the " "largest whole number that is not more than [code]s[/code].\n" @@ -535,16 +549,16 @@ msgstr "" "Richtung negativ unendlich) und gibt die größte ganze Zahl zurück, die nicht " "größer als [code]s[/code] ist.\n" "[codeblock]\n" -"# a is 2.0\n" -"a = floor(2.99)\n" -"# a is -3.0\n" -"a = floor(-2.99)\n" +"a = floor(2.45) # a ist 2.0\n" +"a = floor(2.99) # a ist 2.0\n" +"a = floor(-2.99) # a ist -3.0\n" "[/codeblock]\n" +"Siehe auch [method ceil], [method round], [method stepify], und [int].\n" "[b]Hinweis:[/b] Diese Methode gibt eine Fließkommazahl zurück. Wenn Sie eine " -"Ganzzahl benötigen, können Sie [code]int(s)[/code] direkt verwenden." +"Ganzzahl benötigen und [code]s[/code] nicht negativ ist, können Sie " +"[code]int(s)[/code] direkt verwenden." #: modules/gdscript/doc_classes/@GDScript.xml:301 -#, fuzzy msgid "" "Returns the floating-point remainder of [code]a/b[/code], keeping the sign " "of [code]a[/code].\n" @@ -556,13 +570,11 @@ msgstr "" "Gibt den Divisionsrest von [code]a/b[/code] mit Nachkommastellen zurück und " "behält das Vorzeichen von [code]a[/code].\n" "[codeblock]\n" -"# Rest ist 1.5\n" -"var rest = fmod(7, 5.5)\n" +"var rest = fmod(7, 5.5) # rest ist 1.5\n" "[/codeblock]\n" "Für den Integer-Divisionsrest, den % Operator benutzen." #: modules/gdscript/doc_classes/@GDScript.xml:313 -#, fuzzy msgid "" "Returns the floating-point modulus of [code]a/b[/code] that wraps equally in " "positive and negative.\n" @@ -585,24 +597,19 @@ msgstr "" "Gibt den Fließkommamodulo von [code]a/b[/code] zurück, der gleichermaßen in " "positiv und negativ umschlägt.\n" "[codeblock]\n" -"var i = -6\n" -"while i < 5:\n" -" prints(i, fposmod(i, 3))\n" -" i += 1\n" +"for i in 7:\n" +" var x = 0.5 * i - 1.5\n" +" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n" "[/codeblock]\n" -"Produziert:\n" +"Gibt aus:\n" "[codeblock]\n" -"-6 0\n" -"-5 1\n" -"-4 2\n" -"-3 0\n" -"-2 1\n" -"-1 2\n" -"0 0\n" -"1 1\n" -"2 2\n" -"3 0\n" -"4 1\n" +"-1.5 -0.0 0.0\n" +"-1.0 -1.0 0.5\n" +"-0.5 -0.5 1.0\n" +" 0.0 0.0 0.0\n" +" 0.5 0.5 0.5\n" +" 1.0 1.0 1.0\n" +" 1.5 0.0 0.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:336 @@ -1229,6 +1236,16 @@ msgid "" "distinguishes them from print messages used for debugging purposes, while " "also displaying a stack trace when an error or warning is printed." msgstr "" +"Wandelt ein oder mehrere Argumente aller Typen bestmöglich in Zeichenketten " +"um und gibt sie in der Konsole aus.\n" +"[codeblock]\n" +"var a = [1,2,3]\n" +"print(\"a\",\"=\",a) # Schreibt \"a=[1,2,3]\n" +"[/codeblock]\n" +"[b]Hinweis:[/b] Benutze [method push_error] und [method push_warning] statt " +"[method print] um Fehlermeldungen und Warnungen auszugeben. Sie " +"unterscheiden sich von normalen Ausgaben und geben zusätzlich einen Stack-" +"Trace aus." #: modules/gdscript/doc_classes/@GDScript.xml:702 msgid "Like [method print], but prints only when used in debug mode." @@ -1357,7 +1374,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:779 -#, fuzzy msgid "" "Converts an angle expressed in radians to degrees.\n" "[codeblock]\n" @@ -1741,7 +1757,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1030 -#, fuzzy msgid "" "Returns the hyperbolic tangent of [code]s[/code].\n" "[codeblock]\n" @@ -1749,7 +1764,7 @@ msgid "" "b = tanh(a) # b is 0.6\n" "[/codeblock]" msgstr "" -"Gibt den Hyperbeltangens von [code]s[/code] zurück.\n" +"Gibt den hyperbolischen Tangens von [code]s[/code] zurück.\n" "[codeblock]\n" "a = log(2.0) # Returns 0.693147\n" "tanh(a) # Returns 0.6\n" @@ -2061,6 +2076,16 @@ msgid "" "code] will not result in [constant INF] and will result in a run-time error " "instead." msgstr "" +"Gleitkomma Darstellung von Unendlich. Diese ist das Ergebnis wenn bei einer " +"Gleitkomma-Division durch [code]0[/code] geteilt wird. Benutze [code]-INF[/" +"code] um minus Unendlich zu erhalten. Wird eine positive Gleitkommazahl " +"durch [code]-0.0[/code] geteilt, so entsteht minus Unendlich. Also ist " +"teilen durch [code]0.0[/code] nicht das gleiche wie teilen durch [code]-0.0[/" +"code] (obwohl [code]0.0 == -0.0[/code] [code]true[/code] zurückgibt).\n" +"[b]Bemerkung:[/b] Numerische Unendlichkeit existiert nur für " +"gleitkommazahlen, es gibt kein Äquivalent für Ganzzahlen. Wird eine Ganzzahl " +"durch [code]0[/code] geteilt, so resultiert das nicht in [constant INF], " +"sondern produziert stattdessen einen Laufzeitfehler." #: modules/gdscript/doc_classes/@GDScript.xml:1217 msgid "" @@ -2074,6 +2099,16 @@ msgid "" "[code]0[/code] will not result in [constant NAN] and will result in a run-" "time error instead." msgstr "" +"Steht für \"Not a Number\" (\"keine Zahl\"). Der Wert stellt eine nicht " +"zulässige Kommazahl dar. [constant NAN] hat spezielle EIgenschaften, zum " +"Beispiel ist der Wert sich selbst nicht glich ([code]NAN==NAN[/code] gibt " +"[code]false[/code] zurück). [constant NAN] ist die Ausgabe einiger " +"ungültiger Operationen wie zum Beispiel die Division von [code]0.0[/code] " +"mit [code]0.0[/code].\n" +"[b]Hinweis:[/b] \"Not a Number\" ist ein Konzept, dass exklusiv für " +"Kommazahlen gilt, und kein Gegenstück für Ganzzahlen besitzt. Die Ganzzahl " +"[code]0[/code] durch [code]0[/code] zu teilen wird nicht [constant NAN] " +"zurückgeben sondern einen Fehler auslösen." #: doc/classes/@GlobalScope.xml:4 msgid "Global scope constants and variables." @@ -3532,8 +3567,9 @@ msgid "Nintendo controller Y button." msgstr "Game-Controller SDL-Taste A." #: doc/classes/@GlobalScope.xml:1049 +#, fuzzy msgid "Grip (side) buttons on a VR controller." -msgstr "" +msgstr "Grip (Seiten) Knopf an einem VR-Controller" #: doc/classes/@GlobalScope.xml:1052 msgid "Push down on the touchpad or main joystick on a VR controller." @@ -4141,16 +4177,16 @@ msgstr "" "Dateidialog zum Auswählen des Pfades angezeigt." #: doc/classes/@GlobalScope.xml:1415 -#, fuzzy msgid "" "Hints that a property is an instance of a [Resource]-derived type, " "optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). " "Editing it will show a popup menu of valid resource types to instantiate." msgstr "" -"Weist darauf hin, dass eine Eigenschaft eine Instanz eines von [Ressource] " -"abgeleiteten Typs ist, der optional über die Hinweiszeichenfolge angegeben " -"wird (z. B. [code]\"Texture2D\"[/code]). Bei der Bearbeitung wird ein Popup-" -"Menü mit gültigen Ressourcentypen zum Instanziieren angezeigt." +"Weist darauf hin, dass es sich bei einer Eigenschaft um eine Instanz eines " +"von [Ressource] abgeleiteten Typs handelt, der optional über die " +"Hinweiszeichenkette angegeben wird (z. B. [code]\"Textur\"[/code]). Bei der " +"Bearbeitung wird ein Popup-Menü mit gültigen Ressourcentypen zum " +"Instanziieren angezeigt." #: doc/classes/@GlobalScope.xml:1418 msgid "" @@ -4525,6 +4561,12 @@ msgid "" "[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses " "integer coordinates." msgstr "" +"[AABB] besteht aus einer Position, einer Größe und mehreren Hilfsfunktionen. " +"Es wird für schnelle Überlappungstest genutzt.\n" +"Es benutzt Kommazahlen für die Koordinaten. Das Gegenstück in 2D zu [AABB] " +"ist [Rect2].\n" +"[b]Hinweis:[/b] Im Gegensatz zu [Rect2] hat [AABB] keine Variante die " +"Ganzzahlen statt Kommazahlen nutzt." #: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10 #: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11 @@ -4568,22 +4610,31 @@ msgstr "" "umschließt." #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "Gibt die Lautstärke des [AABB] zurück." -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "Liefert die Position der 8 Endpunkte des [AABB] im Raum." -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "Liefert die normierte längste Achse des [AABB]." -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." @@ -4591,15 +4642,15 @@ msgstr "" "Liefert den Index der längsten Achse des [AABB] (gemäß den [code]AXIS_*[/" "code]-Konstanten von [Vector3])." -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "Liefert die skalare Länge der längsten Achse des [AABB]." -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "Liefert die normierte kürzeste Achse des [AABB]." -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." @@ -4607,11 +4658,11 @@ msgstr "" "Liefert den Index der kürzesten Achse des [AABB] (gemäß [Vector3]::AXIS* " "enum)." -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "Liefert die skalare Länge der kürzesten Achse des [AABB]." -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." @@ -4619,7 +4670,7 @@ msgstr "" "Gibt den Stützpunkt in einer bestimmten Richtung zurück. Dies ist nützlich " "für Algorithmen zur Kollisionserkennung." -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." @@ -4627,19 +4678,19 @@ msgstr "" "Gibt eine Kopie des [AABB] zurück, die um eine bestimmte Anzahl von " "Einheiten nach allen Seiten gewachsen ist." -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] flach oder leer ist." -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] leer ist." -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] einen Punkt enthält." -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." @@ -4647,19 +4698,19 @@ msgstr "" "Liefert die Schnittmenge zwischen zwei [AABB]. Bei einem Fehler wird ein " "leerer AABB (Größe 0,0,0) zurückgegeben." -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" "Gibt [code]true[/code] zurück, wenn sich das [AABB] mit einem anderen " "überschneidet." -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" "Gibt [code]true[/code] zurück, wenn der [AABB] auf beiden Seiten einer Ebene " "liegt." -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4667,7 +4718,7 @@ msgstr "" "Gibt [code]true[/code] zurück, wenn der [AABB] das Liniensegment zwischen " "[code]from[/code] und [code]to[/code] schneidet." -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4677,14 +4728,14 @@ msgstr "" "annähernd gleich sind, indem die [Methode @GDScript.is_equal_approx] für " "jede Komponente aufgerufen wird." -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" "Gibt ein größeres [AABB] zurück, das sowohl dieses [AABB] als auch " "[code]mit[/code] enthält." -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." @@ -4692,11 +4743,11 @@ msgstr "" "Endende Ecke. Dies wird berechnet als [code]Position + Größe[/code]. Wenn " "Sie diesen Wert einstellen, wird die Größe geändert." -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "Beginnende Ecke. Hat typischerweise niedrigere Werte als [Stabende]." -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 #, fuzzy msgid "" "Size from [member position] to [member end]. Typically, all components are " @@ -6188,7 +6239,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -8197,6 +8248,8 @@ msgid "" "Override mode for gravity and damping calculations within this area. See " "[enum SpaceOverride] for possible values." msgstr "" +"Überschreibungsmodus für Schwerkraft- und Dämpfungsberechnungen innerhalb " +"dieses Bereichs. Siehe [enum SpaceOverride] für mögliche Werte." #: doc/classes/Area.xml:102 msgid "" @@ -8264,7 +8317,7 @@ msgstr "" #: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172 msgid "This area does not affect gravity/damping." -msgstr "Diese Area hat keinen Einfluss auf die Gravitation oder die Dämpfung." +msgstr "Diese Area hat keinen Einfluss auf die Gravitation/Dämpfung." #: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175 msgid "" @@ -12105,17 +12158,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/de/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -12124,24 +12181,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -12155,63 +12212,63 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 #, fuzzy msgid "The rotation of the baked custom sky." msgstr "Der Name des Audiobusses des Bereichs." -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -12219,35 +12276,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -12255,13 +12312,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -12273,79 +12330,79 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 #, fuzzy msgid "Baking was successful." msgstr "Die Verbindung war erfolgreich." -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "zu Zeit ungenutzt." -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Gibt den Arkuskosinus2 der Parameter zurück." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -12805,8 +12862,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -14911,7 +14971,7 @@ msgstr "" #: doc/classes/CircleShape2D.xml:15 msgid "The circle's radius." -msgstr "Der Radius des Kreises." +msgstr "Radius des Kreises." #: doc/classes/ClassDB.xml:4 msgid "Class information repository." @@ -15900,6 +15960,8 @@ msgstr "" #: doc/classes/Color.xml:245 msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1." msgstr "" +"Wrapper für [member a], der den Bereich 0 bis 255 anstelle von 0 bis 1 " +"verwendet." #: doc/classes/Color.xml:248 msgid "The color's blue component, typically on the range of 0 to 1." @@ -15908,6 +15970,8 @@ msgstr "Der Blauanteil der Farbe, normalerweise im Bereich von 0 bis 1." #: doc/classes/Color.xml:251 msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1." msgstr "" +"Wrapper für [member b], der den Bereich 0 bis 255 anstelle von 0 bis 1 " +"verwendet." #: doc/classes/Color.xml:254 msgid "The color's green component, typically on the range of 0 to 1." @@ -15916,6 +15980,8 @@ msgstr "Der Grünanteil der Farbe, normalerweise im Bereich von 0 bis 1." #: doc/classes/Color.xml:257 msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1." msgstr "" +"Wrapper für [member g], der den Bereich 0 bis 255 anstelle von 0 bis 1 " +"verwendet." #: doc/classes/Color.xml:260 msgid "The HSV hue of this color, on the range 0 to 1." @@ -15928,6 +15994,8 @@ msgstr "Der Rotanteil der Farbe, normalerweise im Bereich von 0 bis 1." #: doc/classes/Color.xml:266 msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1." msgstr "" +"Wrapper für [member r], der den Bereich 0 bis 255 anstelle von 0 bis 1 " +"verwendet." #: doc/classes/Color.xml:269 msgid "The HSV saturation of this color, on the range 0 to 1." @@ -27013,21 +27081,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/de/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -27036,14 +27115,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -27053,36 +27136,36 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." @@ -27090,46 +27173,46 @@ msgstr "" "Wenn [code]true[/code], wird die Sub-Animation nach Beendigung automatisch " "neu gestartet." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -31392,7 +31475,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -32712,7 +32797,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -32777,22 +32863,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -32807,7 +32895,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -32815,19 +32903,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -32898,7 +32986,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -32956,7 +33045,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -36530,7 +36621,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -39852,7 +39943,7 @@ msgstr "Gibt die Anzahl der Punkte im Überblendungsbereich zurück." #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -39882,14 +39973,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -39899,7 +39990,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -42429,17 +42520,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -42457,11 +42574,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -42656,9 +42773,10 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -#, fuzzy -msgid "Returns the [Physics2DDirectBodyState] of the body." -msgstr "Gibt die Größe des Arrays zurück." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." +msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 msgid "" @@ -43460,6 +43578,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -43477,7 +43613,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -43591,9 +43727,10 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -#, fuzzy -msgid "Returns the [PhysicsDirectBodyState] of the body." -msgstr "Gibt die Größe des Arrays zurück." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." +msgstr "" #: doc/classes/PhysicsServer.xml:370 msgid "" @@ -46228,24 +46365,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46255,7 +46398,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46265,14 +46408,14 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." @@ -46280,14 +46423,14 @@ msgstr "" "Aktiviert [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -46295,81 +46438,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -46377,74 +46520,74 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." @@ -46452,38 +46595,38 @@ msgstr "" "Wenn [code]true[/code], können andere Überwachungsbereiche diesen Bereich " "erkennen." -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "Wenn [code]true[/code], ist die Filterung aktiviert." -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -46494,91 +46637,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -46587,13 +46730,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -46603,7 +46746,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -46611,19 +46754,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -46637,45 +46780,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -46684,7 +46827,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -46695,7 +46838,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -46711,14 +46854,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -46726,49 +46869,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -46777,7 +46920,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46785,7 +46928,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46793,7 +46936,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -46803,7 +46946,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -46812,7 +46955,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -46821,7 +46964,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -46831,7 +46974,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46839,7 +46982,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -46849,7 +46992,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -46859,7 +47002,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46867,7 +47010,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -46876,7 +47019,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46884,7 +47027,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -46896,477 +47039,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -47374,92 +47517,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -47469,33 +47612,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47508,7 +47651,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47520,7 +47663,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47532,7 +47675,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47545,7 +47688,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -47553,28 +47696,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -47584,25 +47727,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47615,7 +47758,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47627,7 +47770,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47639,7 +47782,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47652,13 +47795,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -47666,11 +47809,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -47684,7 +47827,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -47693,7 +47836,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -47709,7 +47852,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -47719,7 +47862,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47729,7 +47872,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -47740,7 +47883,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47750,7 +47893,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -47758,7 +47901,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -47769,7 +47912,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -47784,7 +47927,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -47793,13 +47936,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -47808,7 +47951,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -47818,7 +47961,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -47830,7 +47973,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -47840,24 +47983,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -47866,7 +48009,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -47874,7 +48017,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -47883,7 +48026,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -47893,7 +48036,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -47901,31 +48044,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -47933,7 +48076,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -47943,21 +48086,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -47965,31 +48108,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -47997,7 +48140,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -48007,7 +48150,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -48016,7 +48159,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -48025,20 +48168,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -48047,7 +48190,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -48055,7 +48198,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -48064,7 +48207,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -48074,20 +48217,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -48096,13 +48239,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -48112,46 +48255,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -48161,7 +48304,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -48173,7 +48316,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -48181,7 +48324,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -48189,7 +48332,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -48198,7 +48341,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -48212,7 +48355,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -48222,7 +48365,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -48231,7 +48374,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -48241,54 +48384,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -48299,61 +48442,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -48364,7 +48507,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -48373,26 +48516,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -48403,20 +48546,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -48428,52 +48571,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -48481,7 +48624,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -48494,7 +48637,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -48506,7 +48649,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -48518,7 +48661,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -48530,7 +48673,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -48542,7 +48685,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -48576,7 +48719,7 @@ msgstr "" #: doc/classes/QuadMesh.xml:20 msgid "Size on the X and Y axes." -msgstr "" +msgstr "Größe auf der X- und Y-Achse." #: doc/classes/Quat.xml:4 msgid "Quaternion." @@ -48605,7 +48748,7 @@ msgstr "" #: doc/classes/Quat.xml:20 msgid "Constructs a quaternion from the given [Basis]." -msgstr "" +msgstr "Konstruiert ein Quaternion aus der gegebenen [Basis]." #: doc/classes/Quat.xml:27 msgid "" @@ -48613,12 +48756,18 @@ msgid "" "angles (in the YXZ convention: when decomposing, first Z, then X, and Y " "last), given in the vector format as (X angle, Y angle, Z angle)." msgstr "" +"Konstruiert ein Quaternion, das eine Drehung ausführt, die durch Euler-" +"Winkel (in der YXZ-Konvention: bei der Zerlegung zuerst Z, dann X und Y " +"zuletzt) angegeben wird, die im Vektorformat als (X-Winkel, Y-Winkel, Z-" +"Winkel) angegeben wird." #: doc/classes/Quat.xml:35 msgid "" "Constructs a quaternion that will rotate around the given axis by the " "specified angle. The axis must be a normalized vector." msgstr "" +"Konstruiert ein Quaternion, das sich um die angegebene Achse um den " +"angegebenen Winkel dreht. Die Achse muss ein normalisierter Vektor sein." #: doc/classes/Quat.xml:45 msgid "Constructs a quaternion defined by the given values." @@ -49229,40 +49378,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -49270,14 +49433,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -51624,6 +51787,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -51641,7 +51820,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -51649,11 +51828,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -51663,19 +51842,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -57154,20 +57333,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -57178,28 +57362,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -57211,19 +57395,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -72435,6 +72619,17 @@ msgstr "" "Wenn [code]true[/code], dann werden untergeordnete Nodes sortiert, " "anderenfalls wird die Sortierung deaktiviert." +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück." + +#, fuzzy +#~ msgid "Returns the [Physics2DDirectBodyState] of the body." +#~ msgstr "Gibt die Größe des Arrays zurück." + +#, fuzzy +#~ msgid "Returns the [PhysicsDirectBodyState] of the body." +#~ msgstr "Gibt die Größe des Arrays zurück." + #, fuzzy #~ msgid "" #~ "Returns a list of intersecting [Area]s. For performance reasons " diff --git a/doc/translations/el.po b/doc/translations/el.po index 83ef618560..55ac6a723e 100644 --- a/doc/translations/el.po +++ b/doc/translations/el.po @@ -3596,112 +3596,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4780,7 +4789,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10180,17 +10189,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10199,24 +10212,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10230,62 +10243,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10293,35 +10306,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10329,13 +10342,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10347,78 +10360,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "ΕπιστÏÎφει το τόξο εφαπτομÎνης των παÏαμÎÏ„Ïων." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10874,8 +10887,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24896,21 +24912,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24919,14 +24946,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24936,80 +24967,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29228,7 +29259,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30541,7 +30574,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30606,22 +30640,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30636,7 +30672,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30644,19 +30680,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30727,7 +30763,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30785,7 +30822,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34332,7 +34371,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37648,7 +37687,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37678,14 +37717,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37695,7 +37734,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40184,17 +40223,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40212,11 +40277,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40411,7 +40476,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41214,6 +41281,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41231,7 +41316,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41345,7 +41430,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43890,24 +43977,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43917,7 +44010,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43927,27 +44020,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43955,81 +44048,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44037,109 +44130,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44150,91 +44243,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44243,13 +44336,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44259,7 +44352,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44267,19 +44360,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44293,45 +44386,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44340,7 +44433,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44351,7 +44444,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44367,14 +44460,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44382,49 +44475,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44433,7 +44526,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44441,7 +44534,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44449,7 +44542,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44459,7 +44552,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44468,7 +44561,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44477,7 +44570,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44487,7 +44580,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44495,7 +44588,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44505,7 +44598,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44515,7 +44608,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44523,7 +44616,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44532,7 +44625,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44540,7 +44633,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44552,477 +44645,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45030,92 +45123,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45125,33 +45218,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45164,7 +45257,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45176,7 +45269,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45188,7 +45281,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45201,7 +45294,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45209,28 +45302,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45240,25 +45333,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45271,7 +45364,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45283,7 +45376,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45295,7 +45388,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45308,13 +45401,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45322,11 +45415,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45340,7 +45433,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45349,7 +45442,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45365,7 +45458,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45375,7 +45468,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45385,7 +45478,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45396,7 +45489,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45406,7 +45499,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45414,7 +45507,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45425,7 +45518,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45440,7 +45533,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45449,13 +45542,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45464,7 +45557,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45474,7 +45567,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45486,7 +45579,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45496,24 +45589,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45522,7 +45615,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45530,7 +45623,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45539,7 +45632,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45549,7 +45642,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45557,31 +45650,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45589,7 +45682,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45599,21 +45692,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45621,31 +45714,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45653,7 +45746,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45663,7 +45756,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45672,7 +45765,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45681,20 +45774,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45703,7 +45796,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45711,7 +45804,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45720,7 +45813,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45730,20 +45823,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45752,13 +45845,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45768,46 +45861,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45817,7 +45910,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45829,7 +45922,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45837,7 +45930,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45845,7 +45938,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45854,7 +45947,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45868,7 +45961,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45878,7 +45971,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45887,7 +45980,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45897,54 +45990,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45955,61 +46048,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46020,7 +46113,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46029,26 +46122,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46059,20 +46152,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46084,52 +46177,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46137,7 +46230,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46150,7 +46243,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46162,7 +46255,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46174,7 +46267,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46186,7 +46279,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46198,7 +46291,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46862,40 +46955,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46903,14 +47010,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49245,6 +49352,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49262,7 +49385,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49270,11 +49393,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49284,19 +49407,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54711,20 +54834,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54735,28 +54863,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54768,19 +54896,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/es.po b/doc/translations/es.po index cc5a950431..34325a7c1d 100644 --- a/doc/translations/es.po +++ b/doc/translations/es.po @@ -4582,22 +4582,31 @@ msgstr "" "Devuelve [code]true[/code] si este [AABB] contiene completamente a otro." #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "Devuelve este [AABB] ampliado para incluir un punto dado." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "Devuelve el volumen del [AABB]." -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "Obtiene la posición de los 8 puntos finales del [AABB] en el espacio." -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "Devuelve el eje más largo normalizado del [AABB]." -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." @@ -4605,15 +4614,15 @@ msgstr "" "Devuelve el indice del eje mas grande de [AABB] (segun la constante " "[Vector3] [code]AXIS_*[/code])." -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "Devuelve la longitud escalar del eje más largo del [AABB]." -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "Devuelve el eje más corto normalizado de la [AABB]." -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." @@ -4621,11 +4630,11 @@ msgstr "" "Devuelve el Ãndice del eje más corto del [AABB] (según el enumerado " "[Vector3]::AXIS* )." -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "Devuelve la longitud escalar del eje más corto del [AABB]." -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." @@ -4633,7 +4642,7 @@ msgstr "" "Devuelve el punto de apoyo en una dirección determinada. Esto es útil para " "los algoritmos de detección de colisiones." -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." @@ -4641,19 +4650,19 @@ msgstr "" "Devuelve una copia de la [AABB] crecida una cantidad dada de unidades hacia " "todos los lados." -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "Devuelve [code]true[/code] si el [AABB] es plano o vacÃo." -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "Devuelve [code]true[/code] si el [AABB] está vacÃo." -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "Devuelve [code]true[/code] si el [AABB] contiene un punto." -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." @@ -4661,16 +4670,16 @@ msgstr "" "Devuelve la intersección entre dos [AABB]. Un AABB vacÃo (tamaño 0,0,0) se " "devuelve al fallar." -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "Devuelve [code]true[/code] si el [AABB] se solapa con otro." -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" "Devuelve [code]true[/code] si el [AABB] está a ambos lados de un plano." -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4678,7 +4687,7 @@ msgstr "" "Devuelve [code]true[/code] si el [AABB] intersecta el segmento de lÃnea " "entre [code]from[/code] y [code]to[/code]." -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4688,14 +4697,14 @@ msgstr "" "aproximadamente iguales, llamando al [método @GDScript.is_equal_aprox] en " "cada componente." -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" "Devuelve un [AABB] más grande que contiene tanto este [AABB] como el " "[code]with[/code]." -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." @@ -4703,12 +4712,12 @@ msgstr "" "Esquina final. Esto se calcula como [code]position + size[/code]. Cambiar " "esta propiedad cambia el tamaño." -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" "Esquina de inicio. Normalmente tiene valores inferiores a [member end]." -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 #, fuzzy msgid "" "Size from [member position] to [member end]. Typically, all components are " @@ -6178,7 +6187,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -13271,17 +13280,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/es/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -13290,24 +13303,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -13321,52 +13334,52 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 #, fuzzy msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " @@ -13375,12 +13388,12 @@ msgstr "" "El fondo utilizado cuando [member overlay] se establece en [constant " "OVERLAY_POSITION]." -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 #, fuzzy msgid "The rotation of the baked custom sky." msgstr "La raÃz de la escena editada." -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -13388,36 +13401,36 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 #, fuzzy msgid "The calculated light data." msgstr "La altura de la cápsula." -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -13425,13 +13438,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -13443,82 +13456,82 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 #, fuzzy msgid "The default bake quality mode." msgstr "La fuente por defecto." -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 #, fuzzy msgid "Baking was successful." msgstr "La conexion tuvo éxito." -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "Actualmente sin uso." -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Devuelve el número de formas asignadas a un tile." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 #, fuzzy msgid "The size of the generated lightmaps is too large." msgstr "El tamaño del plano generado." -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 #, fuzzy msgid "Returns if user cancels baking." msgstr "Devuelve el botón de cancelación." -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 #, fuzzy msgid "A custom solid color is used as environment during baking." msgstr "" @@ -14106,8 +14119,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -33062,10 +33078,21 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." @@ -33081,12 +33108,12 @@ msgstr "" "puede ser rechazada a cambio de un mejor rendimiento en el [ProjectSettings] " "usando [member ProjectSettings.rendering/quality/gi_probes/quality]." -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/es/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 #, fuzzy msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " @@ -33096,7 +33123,11 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" "Cocina el efecto para todas las [GeometryInstance3D]s marcadas con [constant " "GeometryInstance3D.GI_MODE_BAKED] y [Light3D]s marcadas con [constant " @@ -33107,11 +33138,11 @@ msgstr "" "puede ser usado para visualizar los datos del [GIProbe] y depurar cualquier " "problema que pueda estar ocurriendo." -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "Llama a [method bake] con [code]create_visual_debug[/code] activado." -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -33121,29 +33152,29 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "El recurso [GIProbeData] que contiene los datos para este [GIProbe]." -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " @@ -33153,13 +33184,13 @@ msgstr "" "grandes sin aumentar las subdivisiones con [member subdivisión], el tamaño " "de cada celda aumentará y resultará en una menor iluminación detallada." -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "Si [code]true[/code], se resalta la lÃnea que contiene el cursor." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 #, fuzzy msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " @@ -33168,13 +33199,13 @@ msgstr "" "Sesgo normal usado para compensar la búsqueda de sombras por el objeto " "normal. Puede ser usado para arreglar artefactos de auto-sombra." -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " @@ -33184,7 +33215,7 @@ msgstr "" "número mayor resulta en un detalle más fino y por lo tanto en una mayor " "calidad visual, mientras que un número menor resulta en un mejor rendimiento." -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." @@ -33193,24 +33224,25 @@ msgstr "" "más rápido. Úsalo si puedes, pero sobre todo úsalo en el hardware de gama " "baja." -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" "Utiliza 128 subdivisiones. Este es el ajuste de calidad predeterminado." -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "Utilice 256 subdivisiones." -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 +#, fuzzy msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" "Use las subdivisiones 512. Este es el ajuste de mayor calidad, pero el más " "lento. En el hardware de gama baja esto podrÃa causar que la GPU se atasque." -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "Representa el tamaño del enum [enum Subdiv]." @@ -38906,7 +38938,10 @@ msgid "The drag position." msgstr "La posición de arrastre." #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +#, fuzzy +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "La posición de arrastre relativa a su posición inicial." #: doc/classes/InputEventScreenDrag.xml:25 @@ -40617,7 +40652,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -40728,30 +40764,33 @@ msgstr "" "axis_lock_motion_y] y [member axis_lock_motion_z]." #: doc/classes/KinematicBody.xml:142 +#, fuzzy msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" "Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la " "posición, escala y rotación del nodo a la de la [Transform] dada, luego " "intenta mover el cuerpo a lo largo del vector [code]rel_vec[/code]. Devuelve " "[code]true[/code] si se produce una colisión." -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "Bloquea el movimiento del eje X del cuerpo." -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "Bloquea el movimiento del eje X del cuerpo." -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "Bloquea el movimiento del eje Z del cuerpo." -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -40766,7 +40805,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -40778,19 +40817,19 @@ msgstr "" "[AnimationPlayer], por ejemplo en plataformas móviles. No uses [b]not[/b] " "junto con las funciones [method move_and_slide] o [method move_and_collide]." -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -40895,10 +40934,12 @@ msgstr "" "[/codeblock]" #: doc/classes/KinematicBody2D.xml:87 +#, fuzzy msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -40998,11 +41039,14 @@ msgstr "" "su lugar." #: doc/classes/KinematicBody2D.xml:132 +#, fuzzy msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" "Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la " "posición, escala y rotación del nodo a la de la [Transform2D] dada, luego " @@ -45564,7 +45608,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -50342,7 +50386,7 @@ msgstr "Devuelve el número de hilos disponibles en el host." #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -50375,17 +50419,22 @@ msgstr "" "[b]Nota:[/b] Este método está implementado en el MacOS." #: doc/classes/OS.xml:379 +#, fuzzy msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" +"Devuelve el factor de escala de la pantalla especificada por Ãndice.\n" +"[b]Nota:[/b] En macOS el valor devuelto es [code]2.0[/code] para la pantalla " +"hiDPI (Retina), y [code]1.0[/code] para todos los demás casos.\n" +"[b]Nota:[/b] Este método está implementado en macOS." #: doc/classes/OS.xml:386 #, fuzzy msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -50399,7 +50448,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -53716,10 +53765,12 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " @@ -53741,7 +53792,47 @@ msgstr "" "comprobar, o booleanos para determinar si el rayo debe colisionar con " "[PhysicsBody2D]s o [Area2D]s, respectivamente." -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +#, fuzzy +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" +"Comprueba si un punto está dentro de alguna forma. Las formas en las que el " +"punto está dentro se devuelven en un array que contiene diccionarios con los " +"siguientes campos:\n" +"[code]collider[/code]: El objeto que colisiona.\n" +"[code]collider_id[/code]: El ID del objeto que colisiona.\n" +"[code]metadata[/code]: Los metadatos de la forma que se intersecta. Estos " +"metadatos son diferentes de [method Object.get_meta], y se establecen con " +"[method PhysicsServer2D.shape_set_data].\n" +"[code]rid[/code]: El objeto que se intersecta es [RID].\n" +"[code]shape[/code]: El Ãndice de la forma de la forma que colisiona.\n" +"Además, el método puede tomar un array [code]exclude[/code] de objetos o " +"[RID]s que deben ser excluidos de las colisiones, una máscara de bits " +"[code]collision_mask[/code] que representa las capas de fÃsica para " +"comprobar, o booleanos para determinar si el rayo debe colisionar con " +"[PhysicsBody2D]s o [Area2D]s, respectivamente." + +#: doc/classes/Physics2DDirectSpaceState.xml:96 #, fuzzy msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " @@ -53760,7 +53851,7 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" "Intersecta un rayo en un espacio determinado. El objeto devuelto es un " @@ -53783,7 +53874,7 @@ msgstr "" "comprobar, o booleanos para determinar si el rayo debe colisionar con " "[PhysicsBody2D]s o [Area2D]s, respectivamente." -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 #, fuzzy msgid "" "Checks the intersections of a shape, given through a " @@ -54033,9 +54124,10 @@ msgid "Returns the continuous collision detection mode." msgstr "Devuelve el modo de detección de colisión continua." #: doc/classes/Physics2DServer.xml:351 -#, fuzzy -msgid "Returns the [Physics2DDirectBodyState] of the body." -msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." +msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 msgid "" @@ -55085,6 +55177,41 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 #, fuzzy msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" +"Intersecta un rayo en un espacio determinado. El objeto devuelto es un " +"diccionario con los siguientes campos:\n" +"[code]collider[/code]: El objeto que colisiona.\n" +"[code]collider_id[/code]: El ID del objeto que colisiona.\n" +"[code]normal[/code]: La normalidad de la superficie del objeto en el punto " +"de intersección.\n" +"[code]position[/code]: El punto de intersección.\n" +"[code]rid[/code]: El objeto que intersecta [RID].\n" +"[code]shape[/code]: El Ãndice de la forma de la forma en colisión.\n" +"Si el rayo no intersectó nada, entonces se devuelve un diccionario vacÃo en " +"su lugar.\n" +"Además, el método puede tomar un array [code]exclude[/code] de objetos o " +"[RID]s que deben ser excluidos de las colisiones, una máscara de bits " +"[code]collision_mask[/code] que representa las capas de fÃsica para " +"comprobar, o booleanos para determinar si el rayo debe colisionar con " +"[PhysicsBody3D]s o [Area3D]s, respectivamente." + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +#, fuzzy +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -55118,7 +55245,7 @@ msgstr "" "comprobar, o booleanos para determinar si el rayo debe colisionar con " "[PhysicsBody3D]s o [Area3D]s, respectivamente." -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 #, fuzzy msgid "" "Checks the intersections of a shape, given through a " @@ -55276,8 +55403,12 @@ msgstr "" #: doc/classes/PhysicsServer.xml:335 #, fuzzy -msgid "Returns the [PhysicsDirectBodyState] of the body." -msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." +msgstr "" +"Devuelve el valor inicial de la propiedad especificada. Devuelve [code]null[/" +"code] si la propiedad no existe." #: doc/classes/PhysicsServer.xml:370 msgid "" @@ -58635,16 +58766,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -"La latencia de salida en milisegundos para el audio. Valores más bajos " -"resultarán en una menor latencia de audio a costa de un mayor uso de la CPU. " -"Valores bajos pueden resultar en un cracking audible en un hardware más " -"lento." -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." @@ -58653,7 +58786,7 @@ msgstr "" "plataforma web, para evitar problemas de audio especialmente en los " "dispositivos móviles." -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." @@ -58661,7 +58794,7 @@ msgstr "" "Ajustar el retardo de audio hardcode cuando se reproduce el video. Es mejor " "dejar esto intacto a menos que sepas lo que estás haciendo." -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -58678,7 +58811,7 @@ msgstr "" "[code]6[/code] pero podrÃa cambiar en el futuro debido a las actualizaciones " "subyacentes de zlib." -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -58695,7 +58828,7 @@ msgstr "" "[code]6[/code] pero podrÃa cambiar en el futuro debido a las actualizaciones " "subyacentes de zlib." -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -58706,7 +58839,7 @@ msgstr "" "pequeños a costa de la velocidad de compresión. La velocidad de " "descompresión no se ve afectada por el nivel de compresión." -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." @@ -58714,7 +58847,7 @@ msgstr "" "Habilita [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]la " "coincidencia a larga distancia[/url] en Zstandard." -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " @@ -58725,7 +58858,7 @@ msgstr "" "pueden resultar en una mejor compresión, pero requerirán más memoria al " "comprimir y descomprimir." -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -58737,14 +58870,14 @@ msgstr "" "ser usada cuando se portan proyectos antiguos (Godot 2), ya que el uso de " "variables de miembros es el estilo preferido a partir de Godot 3." -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" "Si [code]true[/code], habilita las advertencias cuando se utiliza una " "constante como función." -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 #, fuzzy msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " @@ -58753,7 +58886,7 @@ msgstr "" "Si [code]true[/code], activa las advertencias cuando se utilizan palabras " "clave obsoletas." -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " @@ -58763,7 +58896,7 @@ msgstr "" "la configuración de [code]debug/gdscript/warnings/*[/code]). Si [code]false[/" "code], desactiva todas las advertencias de GDScript." -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." @@ -58771,7 +58904,7 @@ msgstr "" "Si [code]true[/code], los scripts de la carpeta [code]res://addons[/code] no " "generarán advertencias." -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function is declared with the " @@ -58780,14 +58913,14 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando se utiliza una " "función como si fuera una propiedad." -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function assigned to a " @@ -58796,7 +58929,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias al asignar el resultado de " "una función que devuelve [code]void[/code] a una variable." -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." @@ -58804,7 +58937,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando se utiliza una " "función como si fuera una propiedad." -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." @@ -58812,7 +58945,7 @@ msgstr "" "Si [code]true[/code], habilita advertencias cuando un operador ternario " "puede emitir valores con tipos incompatibles." -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." @@ -58820,7 +58953,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias al dividir un entero por " "otro entero (la parte decimal será descartada)." -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " @@ -58829,7 +58962,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias al pasar un valor de real a " "una función que espera un número entero (se convertirá y perderá precisión)." -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." @@ -58837,7 +58970,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando se utiliza una " "propiedad como si fuera una función." -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -58849,7 +58982,7 @@ msgstr "" "como argumento de la función). Esos valores de retorno se utilizan a veces " "para denotar posibles errores mediante el uso de enum [enum Error]." -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " @@ -58859,7 +58992,7 @@ msgstr "" "miembro local o de subclase que ensombrecerÃa una variable en un nivel " "superior (como una variable miembro)." -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " @@ -58869,7 +59002,7 @@ msgstr "" "que no tiene efecto en el código circundante, como escribir [code]2 + 2[/" "code] como una declaración." -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " @@ -58879,14 +59012,14 @@ msgstr "" "ternaria que no tiene efecto en el código circundante, como escribir " "[code]42 si está activo o 0[/code] como una declaración." -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" "Si [code]true[/code], todas las advertencias serán reportadas como si fueran " "errores." -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." @@ -58894,7 +59027,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando se utiliza una " "variable que no fue asignada previamente." -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " @@ -58904,7 +59037,7 @@ msgstr "" "utilizando un operador de asignación como [code]+=[/code] si la variable no " "fue asignada previamente." -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." @@ -58913,7 +59046,7 @@ msgstr "" "inalcanzable (como después de una declaración de [code]return[/code] que " "siempre se ejecutará)." -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." @@ -58922,13 +59055,13 @@ msgstr "" "expresión cuyo tipo puede no ser compatible con el parámetro de función " "esperado." -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" "Si [code]true[/code], habilita las advertencias cuando se realiza un " "lanzamiento inseguro." -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." @@ -58936,7 +59069,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias al llamar a un método cuya " "presencia no está garantizada en tiempo de compilación en la clase." -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." @@ -58945,7 +59078,7 @@ msgstr "" "propiedad cuya presencia no está garantizada en tiempo de compilación en la " "clase." -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." @@ -58953,7 +59086,7 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando una señal no es " "utilizada." -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." @@ -58961,26 +59094,26 @@ msgstr "" "Si [code]true[/code], habilita las advertencias cuando una variable local no " "se utiliza." -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" "Si [code]true[/code], habilita las advertencias cuando una señal no es " "utilizada." -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" "Si [code]true[/code], habilita las advertencias cuando una variable local no " "se utiliza." -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." @@ -58988,12 +59121,12 @@ msgstr "" "Si [code]true[/code], habilita las advertencias al asignar el resultado de " "una función que devuelve [code]void[/code] a una variable." -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" "Mensaje que se mostrará antes del retroceso cuando el motor se crashea." -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 #, fuzzy msgid "" "Maximum number of frames per second allowed. The actual number of frames per " @@ -59015,21 +59148,21 @@ msgstr "" "no en tiempo real de fotogramas estáticos, o para probar el proyecto en " "condiciones de retardo." -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "Máxima pila de llamadas permitida para depurar GDScript." -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" "Cantidad máxima de funciones por fotograma permitidas en la elaboración de " "perfiles." -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "Imprime fotogramas por segundo a una salida estándar cada segundo." -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " @@ -59039,13 +59172,13 @@ msgstr "" "Muestra información como las fugas de memoria, qué escenas y recursos se " "están cargando, etc." -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" "Máxima pila de llamadas en el guión visual, para evitar la recursividad " "infinita." -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." @@ -59053,7 +59186,7 @@ msgstr "" "Color de los puntos de contacto entre las formas de colisión, visible cuando " "\"Formas de colisión visibles\" está activado en el menú de Depuración." -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 #, fuzzy msgid "" "Sets whether 2D physics will display collision outlines in game when " @@ -59062,7 +59195,7 @@ msgstr "" "Color de las formas de colisión, visible cuando \"Formas de colisión visibles" "\" está activado en el menú de Depuración." -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." @@ -59071,7 +59204,7 @@ msgstr "" "cuando \"Formas de colisión visibles\" está activado en el menú de " "Depuración." -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." @@ -59079,7 +59212,7 @@ msgstr "" "Color de las formas de colisión, visible cuando \"Formas de colisión visibles" "\" está activado en el menú de Depuración." -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." @@ -59087,7 +59220,7 @@ msgstr "" "Color de la geometrÃa de navegación desactivada, visible cuando la " "\"Navegación visible\" está activada en el menú de depuración." -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." @@ -59095,21 +59228,21 @@ msgstr "" "Color de la geometrÃa de navegación, visible cuando la \"Navegación visible" "\" está activada en el menú de depuración." -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "Imagen personalizada para el cursor del ratón (limitada a 256×256)." -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "Punto donde se encuentra la imagen personalizada del cursor del ratón." -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" "Desplazamiento de la posición de las sugerencias, en relación con el punto " "donde se encuentra el cursor del ratón." -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 #, fuzzy msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " @@ -59120,7 +59253,7 @@ msgstr "" "Esta configuración no tiene efecto en el escritorio de Linux, ya que los " "fallos de conocimiento de DPI no están soportados allÃ." -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." @@ -59129,7 +59262,7 @@ msgstr "" "inactividad), por lo que el salvapantallas no toma el control. Funciona en " "plataformas de escritorio y móviles." -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -59138,7 +59271,7 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." @@ -59146,7 +59279,7 @@ msgstr "" "Si [code]verdad[/code], el indicador de casa se oculta automáticamente. Esto " "sólo afecta a los dispositivos iOS sin un botón de inicio fÃsico." -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -59156,7 +59289,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -59164,19 +59297,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -59190,7 +59323,7 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " @@ -59200,14 +59333,14 @@ msgstr "" "escritorio, este es el tamaño de ventana por defecto. Los ajustes del modo " "de estiramiento también utilizan esto como referencia cuando está activado." -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 #, fuzzy msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "Permite que la ventana sea redimensionada por defecto." -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." @@ -59215,7 +59348,7 @@ msgstr "" "Si es mayor que cero, sobreescribe la altura de la ventana al ejecutar el " "juego. Es útil para probar los modos de estiramiento." -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." @@ -59223,7 +59356,7 @@ msgstr "" "Si es mayor que cero, anula el ancho de la ventana al ejecutar el juego. Es " "útil para probar los modos de estiramiento." -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " @@ -59233,7 +59366,7 @@ msgstr "" "escritorio, este es el tamaño de ventana por defecto. La configuración del " "modo ampliado también utiliza esto como referencia cuando está activado." -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." @@ -59241,7 +59374,7 @@ msgstr "" "Especifica el controlador de la tableta a utilizar. Si se deja vacÃo, se " "utilizará el controlador predeterminado." -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -59256,7 +59389,7 @@ msgstr "" "muchas plataformas la harán cumplir independientemente (como las plataformas " "móviles y HTML5)." -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -59276,7 +59409,7 @@ msgstr "" "han experimentado una reducción de la mitad de la velocidad de los cuadros " "Vsync (por ejemplo, de 60 FPS a 30 FPS) al usarla." -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -59292,7 +59425,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 #, fuzzy msgid "" "Search path for project-specific script templates. Godot will search for " @@ -59303,7 +59436,7 @@ msgstr "" "plantillas de script se buscarán tanto en la ruta especÃfica del editor como " "en esta ruta especÃfica del proyecto." -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -59316,7 +59449,7 @@ msgstr "" "especialmente si utilizas scripts incorporados que se serializan en los " "archivos de la escena." -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." @@ -59324,7 +59457,7 @@ msgstr "" "Valor por defecto para [member ScrollContainer.scroll_deadzone], que se " "utilizará para todos los [ScrollContainer]s a menos que se sobrescriba." -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 #, fuzzy msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " @@ -59333,7 +59466,7 @@ msgstr "" "Si [code]true[/code], cambia los botones Cancelar y Aceptar en los diálogos " "de Windows y UWP para seguir las convenciones de la interfaz." -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." @@ -59341,7 +59474,7 @@ msgstr "" "Ruta a un archivo de recursos [Theme] personalizado para usar en el proyecto " "([code]theme[/code] o genérico [code]tres[/code]/[code]res[/code] extension)." -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." @@ -59349,12 +59482,12 @@ msgstr "" "Ruta a un recurso [Font] personalizado para usar como predeterminado para " "todos los elementos de la interfaz gráfica de usuario del proyecto." -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" "Si [code]true[/code], se asegura de que el tema utilizado funciona con HiDPI." -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." @@ -59362,15 +59495,15 @@ msgstr "" "Ajuste del temporizador para la búsqueda incremental en los controles de " "[Tree], [ItemList], etc. (en milisegundos)." -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "Temporizador para detectar la inactividad en [TextEdit] (en segundos)." -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "Retraso predeterminado para las sugerencias (en segundos)." -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -59385,7 +59518,7 @@ msgstr "" "[Control]s. Sin embargo, los eventos asignados a la acción pueden ser " "modificados." -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -59398,7 +59531,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -59410,7 +59543,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -59427,7 +59560,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -59442,7 +59575,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -59457,7 +59590,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -59474,7 +59607,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -59486,7 +59619,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -59503,7 +59636,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -59520,7 +59653,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -59532,7 +59665,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -59546,7 +59679,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -59558,7 +59691,7 @@ msgstr "" "eliminar ya que son necesarias para la lógica interna de varios [Control]s. " "Sin embargo, los eventos asignados a la acción pueden ser modificados." -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -59570,7 +59703,7 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." @@ -59578,7 +59711,7 @@ msgstr "" "Si [code]true[/code], envÃa eventos de entrada de ratón al tocar o deslizar " "en la pantalla táctil." -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." @@ -59586,452 +59719,452 @@ msgstr "" "Si [code]true[/code], envÃa eventos de entrada táctil al hacer clic o " "arrastrar el ratón." -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 #, fuzzy msgid "Default delay for touch events. This only affects iOS devices." msgstr "Retraso predeterminado para las sugerencias (en segundos)." -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "Nombre opcional para la capa 1 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "Nombre opcional para la capa 10 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "Nombre opcional para la capa 11 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "Nombre opcional para la capa 12 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "Nombre opcional para la capa 13 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "Nombre opcional para la capa 14 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "Nombre opcional para la capa 15 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "Nombre opcional para la capa 15 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "Nombre opcional para la capa 17 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "Nombre opcional para la capa 18 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "Nombre opcional para la capa 19 de la fÃsica 2D." -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "Nombre opcional para la capa 20 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 #, fuzzy msgid "Optional name for the 2D physics layer 21." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 #, fuzzy msgid "Optional name for the 2D physics layer 22." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 #, fuzzy msgid "Optional name for the 2D physics layer 23." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 #, fuzzy msgid "Optional name for the 2D physics layer 24." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 #, fuzzy msgid "Optional name for the 2D physics layer 25." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 #, fuzzy msgid "Optional name for the 2D physics layer 26." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 #, fuzzy msgid "Optional name for the 2D physics layer 27." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 #, fuzzy msgid "Optional name for the 2D physics layer 28." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 #, fuzzy msgid "Optional name for the 2D physics layer 29." msgstr "Nombre opcional para la capa 2 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "Nombre opcional para la capa 3 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 #, fuzzy msgid "Optional name for the 2D physics layer 30." msgstr "Nombre opcional para la capa 3 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 #, fuzzy msgid "Optional name for the 2D physics layer 31." msgstr "Nombre opcional para la capa 3 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 #, fuzzy msgid "Optional name for the 2D physics layer 32." msgstr "Nombre opcional para la capa 3 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "Nombre opcional para la capa 4 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "Nombre opcional para la capa 5 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "Nombre opcional para la capa 6 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "Nombre opcional para la capa 7 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "Nombre opcional para la capa 8 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "Nombre opcional para la capa 9 de fÃsica 2D." -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "Nombre opcional para la capa 1 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "Nombre opcional para la capa 10 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "Nombre opcional para la capa 11 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "Nombre opcional para la capa 12 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "Nombre opcional para la capa 13 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "Nombre opcional para la capa 14 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "Nombre opcional para la capa 15 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "Nombre opcional para la capa 16 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "Nombre opcional para la capa 17 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "Nombre opcional para la capa 18 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "Nombre opcional para la capa 19 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "Nombre opcional para la capa 2 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "Nombre opcional para la capa 20 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "Nombre opcional para la capa 3 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "Nombre opcional para la capa 4 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "Nombre opcional para la capa 5 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "Nombre opcional para la capa 6 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "Nombre opcional para la capa 7 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "Nombre opcional para la capa 8 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "Nombre opcional para la capa 9 del renderizado 2D." -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "Nombre opcional para la capa 1 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "Nombre opcional para la capa 10 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "Nombre opcional para la capa 11 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "Nombre opcional para la capa 12 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "Nombre opcional para la capa 13 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "Nombre opcional para la capa 14 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "Nombre opcional para la capa 15 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "Nombre opcional para la capa 16 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "Nombre opcional para la capa 17 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "Nombre opcional para la capa 18 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "Nombre opcional para la capa 19 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "Nombre opcional para la capa 20 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 #, fuzzy msgid "Optional name for the 3D physics layer 21." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 #, fuzzy msgid "Optional name for the 3D physics layer 22." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 #, fuzzy msgid "Optional name for the 3D physics layer 23." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 #, fuzzy msgid "Optional name for the 3D physics layer 24." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 #, fuzzy msgid "Optional name for the 3D physics layer 25." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 #, fuzzy msgid "Optional name for the 3D physics layer 26." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 #, fuzzy msgid "Optional name for the 3D physics layer 27." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 #, fuzzy msgid "Optional name for the 3D physics layer 28." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 #, fuzzy msgid "Optional name for the 3D physics layer 29." msgstr "Nombre opcional para la capa 2 de la fÃsica 3D." -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "Nombre opcional para la capa 3 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 #, fuzzy msgid "Optional name for the 3D physics layer 30." msgstr "Nombre opcional para la capa 3 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 #, fuzzy msgid "Optional name for the 3D physics layer 31." msgstr "Nombre opcional para la capa 3 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 #, fuzzy msgid "Optional name for the 3D physics layer 32." msgstr "Nombre opcional para la capa 3 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "Nombre opcional para la capa 4 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "Nombre opcional para la capa 5 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "Nombre opcional para la capa 6 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "Nombre opcional para la capa 7 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "Nombre opcional para la capa 8 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "Nombre opcional para la capa 9 de fÃsica 3D." -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "Nombre opcional para la capa 1 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "Nombre opcional para la capa 10 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "Nombre opcional para la capa 11 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "Nombre opcional para la capa 12 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "Nombre opcional para la capa 13 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "Nombre opcional para la capa 14 del renderizado 3D" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "Nombre opcional para la capa 15 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "Nombre opcional para la capa 16 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "Nombre opcional para la capa 17 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "Nombre opcional para la capa 18 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "Nombre opcional para la capa 19 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "Nombre opcional para la capa 2 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "Nombre opcional para la capa 20 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "Nombre opcional para la capa 3 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "Nombre opcional para la capa 4 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "Nombre opcional para la capa 5 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "Nombre opcional para la capa 6 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "Nombre opcional para la capa 7 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "Nombre opcional para la capa 8 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "Nombre opcional para la capa 9 del renderizado 3D." -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." @@ -60039,7 +60172,7 @@ msgstr "" "El lugar al que recurrir si una traducción no está disponible en un idioma " "determinado. Si se deja vacÃo, se usará [code]en[/code] (inglés)." -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." @@ -60047,17 +60180,17 @@ msgstr "" "Si no está vacÃo, este lugar se utilizará cuando se ejecute el proyecto " "desde el editor." -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "Si [code]true[/code], registra todos los resultados en archivos." -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." @@ -60065,13 +60198,13 @@ msgstr "" "Camino a los registros dentro del proyecto. Se recomienda utilizar una ruta " "[code]user://[/code]." -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" "Especifica la cantidad máxima de archivos de registro permitidos (utilizados " "para la rotación)." -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." @@ -60080,7 +60213,7 @@ msgstr "" "funciones. Si te quedas sin espacio en ella (verás un error), puedes " "aumentar el tamaño aquÃ." -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -60092,7 +60225,7 @@ msgstr "" "los solicite en los hilos. Si los servidores se paralizan con demasiada " "frecuencia al cargar recursos en un hilo, aumente este número." -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " @@ -60102,7 +60235,7 @@ msgstr "" "depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a " "no detener la conexión del depurador." -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 #, fuzzy msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " @@ -60113,7 +60246,7 @@ msgstr "" "encima de este valor, el contenido se elimina. Esto ayuda a no detener la " "conexión del depurador." -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 #, fuzzy msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " @@ -60124,7 +60257,7 @@ msgstr "" "depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a " "no detener la conexión del depurador." -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 #, fuzzy msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " @@ -60135,7 +60268,7 @@ msgstr "" "Por encima de este valor, el contenido se elimina. Esto ayuda a no detener " "la conexión del depurador." -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 #, fuzzy msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " @@ -60145,52 +60278,52 @@ msgstr "" "Tamaño por defecto del flujo de paquetes para deserializar los datos de " "Godot. Por encima de este tamaño, los datos se eliminan." -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" "Tiempo de espera (en segundos) para los intentos de conexión usando TCP." -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]." -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 #, fuzzy msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]." -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 #, fuzzy msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]." -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 #, fuzzy msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]." -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 #, fuzzy msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]." -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." @@ -60199,12 +60332,12 @@ msgstr "" "remoto. Los valores más altos disminuyen los efectos de la latencia a costa " "de un mayor uso del ancho de banda." -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" "Tamaño de la página utilizada por el sistema de archivos remoto (en bytes)." -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -60221,7 +60354,7 @@ msgstr "" "defecto.\n" "En caso de duda, deje este ajuste vacÃo." -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." @@ -60229,7 +60362,7 @@ msgstr "" "Al crear los nombres de los nodos de forma automática, establezca el tipo de " "carcasa en este proyecto. Esto es mayormente un ajuste de editor." -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." @@ -60237,7 +60370,7 @@ msgstr "" "Qué usar para separar el nombre del nodo del número. Esto es mayormente un " "ajuste de editor." -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 #, fuzzy msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" @@ -60247,14 +60380,14 @@ msgstr "" "Tamaño de la tabla hash usada para el algoritmo de la cuadrÃcula hash 2D de " "fase ancha." -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -60267,7 +60400,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 #, fuzzy msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" @@ -60289,7 +60422,7 @@ msgstr "" "PhysicsServer2D.AREA_PARAM_GRAVITY, 98)\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 #, fuzzy msgid "" "The default gravity direction in 2D.\n" @@ -60311,7 +60444,7 @@ msgstr "" "get_space(), Servidor de FÃsica2D.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -60324,7 +60457,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 #, fuzzy msgid "" "Threshold defining the surface size that constitutes a large object with " @@ -60336,7 +60469,7 @@ msgstr "" "con respecto a las células en el algoritmo de la cuadrÃcula hash 2D de fase " "ancha." -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 #, fuzzy msgid "" "Sets which physics engine to use for 2D physics.\n" @@ -60347,7 +60480,7 @@ msgstr "" "\"DEFAULT\" y \"GodotPhysics2D\" son lo mismo, ya que actualmente no hay " "ningún servidor de fÃsica 2D alternativo implementado." -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 #, fuzzy msgid "" "Threshold angular velocity under which a 2D physics body will be considered " @@ -60358,7 +60491,7 @@ msgstr "" "inactivo. Ver [constant PhysicsServer2D." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 #, fuzzy msgid "" "Threshold linear velocity under which a 2D physics body will be considered " @@ -60369,7 +60502,7 @@ msgstr "" "inactivo. Ver [constant PhysicsServer2D." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -60385,7 +60518,7 @@ msgstr "" "de un modelo de hilo multi-hilo para la fÃsica. Asegúrate de evaluar si te " "da un rendimiento extra y no hay regresiones al usarlo." -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 #, fuzzy msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " @@ -60395,13 +60528,13 @@ msgstr "" "ponga a dormir. Ver [constant PhysicsServer2D." "SPACE_PARAM_BODY_TIME_TO_SLEEP]." -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 #, fuzzy msgid "" "Sets whether the 3D physics world will be created with support for " @@ -60410,7 +60543,7 @@ msgstr "" "Establece si el mundo de la fÃsica 3D se creará con soporte para la fÃsica " "[SoftBody3D]. Sólo se aplica al motor de fÃsica de Bullet." -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -60423,7 +60556,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 #, fuzzy msgid "" "The default gravity strength in 3D (in meters per second squared).\n" @@ -60445,7 +60578,7 @@ msgstr "" "PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 #, fuzzy msgid "" "The default gravity direction in 3D.\n" @@ -60467,7 +60600,7 @@ msgstr "" "PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -60480,13 +60613,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 #, fuzzy msgid "" "Sets which physics engine to use for 3D physics.\n" @@ -60499,11 +60632,11 @@ msgstr "" "org]Bullet[/url]. El motor de \"GodotPhysics3D\" sigue siendo soportado como " "una alternativa." -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "Habilita [member Viewport.physics_object_picking] en el viewport raÃz." -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -60517,7 +60650,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -60532,7 +60665,7 @@ msgstr "" "cambiar el FPS de fÃsica en tiempo de ejecución, establece [member Engine." "iterations_per_second] en su lugar." -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 #, fuzzy msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " @@ -60557,7 +60690,7 @@ msgstr "" "mayorÃa; los valores superiores a 2 podrÃan hacer que el juego reaccionara a " "los fotogramas caÃdos con un retraso notable y no se recomiendan." -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -60567,7 +60700,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -60577,7 +60710,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -60588,7 +60721,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -60598,7 +60731,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -60606,7 +60739,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 #, fuzzy msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " @@ -60626,7 +60759,7 @@ msgstr "" "backend de renderizado GLES2, y sólo a las plataformas de escritorio. No es " "necesaria cuando se utiliza el backend de Vulkan." -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -60641,7 +60774,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -60650,13 +60783,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -60665,7 +60798,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -60675,7 +60808,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -60687,7 +60820,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -60697,24 +60830,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -60723,7 +60856,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -60731,7 +60864,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -60740,7 +60873,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -60750,7 +60883,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -60758,31 +60891,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 #, fuzzy msgid "" "Default background clear color. Overridable per [Viewport] using its " @@ -60796,7 +60929,7 @@ msgstr "" "predeterminado de forma programada, utilice el [method RenderingServer." "set_default_clear_color]." -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -60812,21 +60945,21 @@ msgstr "" "reserva, es mejor borrar [code]default_env.tres[/code], o especificar aquà " "un entorno por defecto diferente." -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -60834,31 +60967,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -60866,7 +60999,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -60876,7 +61009,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -60885,7 +61018,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -60894,14 +61027,14 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import lossless textures " @@ -60912,7 +61045,7 @@ msgstr "" "Este algoritmo sólo es compatible con las plataformas y consolas de " "escritorio." -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 #, fuzzy msgid "" "The default compression level for lossless WebP. Higher levels result in " @@ -60929,7 +61062,7 @@ msgstr "" "[code]6[/code] pero podrÃa cambiar en el futuro debido a las actualizaciones " "subyacentes de zlib." -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -60937,7 +61070,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -60946,7 +61079,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -60956,13 +61089,13 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 #, fuzzy msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" @@ -60973,7 +61106,7 @@ msgstr "" "cinematico. Si [code]false[/code], las colisiones se manejarán como un " "cuerpo estático." -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -60982,13 +61115,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -60998,14 +61131,14 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 #, fuzzy msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " @@ -61015,7 +61148,7 @@ msgstr "" "size] en los dispositivos móviles, debido a problemas de rendimiento o de " "compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." @@ -61023,7 +61156,7 @@ msgstr "" "Desactiva el paso previo de profundidad para algunos fabricantes de GPU " "(normalmente móviles), ya que su arquitectura ya lo hace." -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " @@ -61033,7 +61166,7 @@ msgstr "" "renderizar los materiales. Esto aumenta el rendimiento en escenas con alto " "sobregiro, cuando se utilizan materiales complejos e iluminación." -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " @@ -61043,7 +61176,7 @@ msgstr "" "en sombras más nÃtidas, a costa del rendimiento. El valor se redondeará a la " "potencia más cercana de 2." -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." @@ -61052,7 +61185,7 @@ msgstr "" "directional_shadow/size] en los dispositivos móviles, debido a problemas de " "rendimiento o de apoyo al driver." -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 #, fuzzy msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" @@ -61070,7 +61203,7 @@ msgstr "" "[code]OS.get_current_video_driver[/code] para consultarla en tiempo de " "ejecución." -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -61082,7 +61215,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -61090,7 +61223,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 #, fuzzy msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " @@ -61105,7 +61238,7 @@ msgstr "" "[b]Nota:[/b] La MSAA no está disponible en la exportación a HTML5 utilizando " "el backend GLES2." -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -61114,7 +61247,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -61128,7 +61261,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 #, fuzzy msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " @@ -61143,7 +61276,7 @@ msgstr "" "la imagen se vea borrosa, especialmente en resoluciones más bajas. Puede " "funcionar relativamente bien en resoluciones grandes como 1440p y 4K." -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -61158,7 +61291,7 @@ msgstr "" "de memoria. Si [code]false[/code], se utiliza el filtrado lineal de mipmaps " "(también llamado \"filtrado trilÃneo\")." -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -61174,7 +61307,7 @@ msgstr "" "[code]DEPTH_TEXTURE[/code] no estarán disponibles en los shaders y los " "efectos de post-procesamiento no estarán disponibles en el [Environment]." -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " @@ -61184,14 +61317,14 @@ msgstr "" "framebuffer_allocation] en los dispositivos móviles, debido a problemas de " "rendimiento o de compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 #, fuzzy msgid "" "Lower-end override for [member rendering/quality/lightmapping/" @@ -61201,27 +61334,27 @@ msgstr "" "force_vertex_shading] en los dispositivos móviles, debido a problemas de " "rendimiento o de compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 #, fuzzy msgid "" "Lower-end override for [member rendering/quality/reflections/" @@ -61232,7 +61365,7 @@ msgstr "" "reflections/ggx_samples] en dispositivos móviles, debido a problemas de " "rendimiento o de compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -61243,7 +61376,7 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 #, fuzzy msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " @@ -61256,7 +61389,7 @@ msgstr "" "significativamente más lento de calcular y utiliza [member rendering/quality/" "reflections/roughness_layers] veces más memoria." -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " @@ -61266,7 +61399,7 @@ msgstr "" "reflections/texture_array_reflections] en dispositivos móviles, debido a " "problemas de rendimiento o compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." @@ -61274,7 +61407,7 @@ msgstr "" "Si [code]true[/code], utiliza un modelo Blinn más rápido pero de menor " "calidad para generar reflejos borrosos en lugar del modelo GGX." -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " @@ -61284,7 +61417,7 @@ msgstr "" "shadinging/force_blinn_over_ggx] en los dispositivos móviles, debido a " "problemas de rendimiento o de soporte de los conductores." -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." @@ -61292,7 +61425,7 @@ msgstr "" "Si [code]true[/code], utiliza un modelo de iluminación de material Lambert " "más rápido pero de menor calidad en lugar del Burley." -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " @@ -61302,7 +61435,7 @@ msgstr "" "shadinging/force_lambert_over_burley] en los dispositivos móviles, debido a " "problemas de rendimiento o de apoyo al conductor." -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " @@ -61313,7 +61446,7 @@ msgstr "" "la calidad enormemente. Se puede utilizar para optimizar el rendimiento en " "dispositivos móviles de gama baja." -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " @@ -61323,7 +61456,7 @@ msgstr "" "force_vertex_shading] en los dispositivos móviles, debido a problemas de " "rendimiento o de compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -61334,7 +61467,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -61343,8 +61476,8 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." @@ -61352,7 +61485,7 @@ msgstr "" "Tamaño del cuadrante de subdivisión para el mapeo de sombras. Ver la " "documentación del mapeo de sombras." -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." @@ -61360,7 +61493,7 @@ msgstr "" "Tamaño para el atlas de sombras (usado para OmniLights y SpotLights). Vea la " "documentación." -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." @@ -61369,7 +61502,7 @@ msgstr "" "size] en los dispositivos móviles, debido a problemas de rendimiento o de " "compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -61380,7 +61513,7 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 #, fuzzy msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " @@ -61390,14 +61523,14 @@ msgstr "" "size] en los dispositivos móviles, debido a problemas de rendimiento o de " "compatibilidad con el controlador." -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -61409,47 +61542,47 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 #, fuzzy msgid "Quality setting for subsurface scattering (samples taken)." msgstr "La fuerza del efecto de dispersión del subsuelo." -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 #, fuzzy msgid "Max radius used for subsurface scattering samples." msgstr "La fuerza del efecto de dispersión del subsuelo." -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " @@ -61459,7 +61592,7 @@ msgstr "" "mejorar enormemente el rendimiento, pero la sincronización con el hilo " "principal puede causar un poco más de temblor." -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -61467,7 +61600,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " @@ -61485,7 +61618,7 @@ msgstr "" "de texturas sólo está soportado en plataformas de escritorio, y sólo cuando " "se utiliza el renderizador Vulkan." -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " @@ -61502,7 +61635,7 @@ msgstr "" "de texturas sólo está soportado en plataformas de escritorio, y sólo cuando " "se utiliza el renderizador Vulkan." -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " @@ -61519,7 +61652,7 @@ msgstr "" "de texturas sólo está soportado en plataformas de escritorio, y sólo cuando " "se utiliza el renderizador Vulkan." -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " @@ -61536,7 +61669,7 @@ msgstr "" "de texturas sólo está soportado en plataformas de escritorio, y sólo cuando " "se utiliza el renderizador Vulkan." -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " @@ -61553,7 +61686,7 @@ msgstr "" "de texturas sólo está soportado en plataformas de escritorio, y sólo cuando " "se utiliza el renderizador Vulkan." -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 #, fuzzy msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " @@ -62438,14 +62571,22 @@ msgstr "" "Devuelve [code]true[/code] si este [Rect2] encierra completamente otro." #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." -msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "Devuelve el área de la [Rect2]." -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." @@ -62453,7 +62594,7 @@ msgstr "" "Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia " "todos los lados." -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." @@ -62461,7 +62602,7 @@ msgstr "" "Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia " "todos los lados." -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." @@ -62469,15 +62610,21 @@ msgstr "" "Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia " "la dirección del [enum Margin]." -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "Devuelve [code]true[/code] si la [Rect2] está plana o vacÃa." -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." -msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." +msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -62489,7 +62636,7 @@ msgstr "" "Si [code]include_borders[/code] es [code]true[/code], también se considerará " "que se superponen si sus bordes se tocan, incluso sin intersección." -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " @@ -62499,7 +62646,7 @@ msgstr "" "aproximadamente iguales, llamando a [code]is_equal_approx[/code] en cada " "componente." -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" "Devuelve un [Rect2] más grande que contiene este [Rect2] y [code]b[/code]." @@ -65637,6 +65784,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -65654,7 +65817,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -65662,11 +65825,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -65676,19 +65839,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -72744,12 +72907,15 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -"Adición de vértices de una determinada superficie [Mesh] al array de " -"vértices actual con la [Transform] especificada." -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." @@ -72757,13 +72923,13 @@ msgstr "" "Llamado antes de añadir cualquier vértice. Toma el tipo primitivo como " "argumento (por ejemplo, [constant Mesh.PRIMITIVE_TRIANGLES])." -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" "Despeja toda la información pasada a la herramienta de la superficie hasta " "ahora." -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 #, fuzzy msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " @@ -72781,7 +72947,7 @@ msgstr "" "constantes [code]ARRAY_COMPRESS_*[/code] en [enum Mesh.ArrayFormat] para " "otras banderas." -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " @@ -72791,11 +72957,11 @@ msgstr "" "add_surface_from_arrays]. De esta manera se puede seguir procesando los " "datos de la malla usando la API [ArrayMesh]." -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "Crea un array de vértices a partir de una [Mesh] existente." -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." @@ -72804,11 +72970,11 @@ msgstr "" "[Mesh] existente. Esto puede ser usado para extraer una pose especÃfica de " "una forma de mezcla." -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "Elimina el array de Ãndices expandiendo el array de vértices." -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -72820,7 +72986,7 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 #, fuzzy msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " @@ -72829,7 +72995,7 @@ msgstr "" "Genera un vector tangente para cada vértice. Requiere que cada vértice tenga " "ya fijados los UV y los normales." -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 #, fuzzy msgid "" "Shrinks the vertex array by creating an index array. This can improve " @@ -72838,7 +73004,7 @@ msgstr "" "Encoge el array de vértices creando un array de Ãndices (evita la " "reutilización de los vértices)." -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" "Establece [Material] para ser usado por la [Mesh] que estás construyendo." @@ -92249,6 +92415,40 @@ msgstr "" "Si es [code]true[/code], los nodos hijos son ordenados, de lo contrario el " "ordenado está deshabilitado." +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "Devuelve este [AABB] ampliado para incluir un punto dado." + +#, fuzzy +#~ msgid "Returns the [Physics2DDirectBodyState] of the body." +#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo." + +#, fuzzy +#~ msgid "Returns the [PhysicsDirectBodyState] of the body." +#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo." + +#~ msgid "" +#~ "Output latency in milliseconds for audio. Lower values will result in " +#~ "lower audio latency at the cost of increased CPU usage. Low values may " +#~ "result in audible cracking on slower hardware." +#~ msgstr "" +#~ "La latencia de salida en milisegundos para el audio. Valores más bajos " +#~ "resultarán en una menor latencia de audio a costa de un mayor uso de la " +#~ "CPU. Valores bajos pueden resultar en un cracking audible en un hardware " +#~ "más lento." + +#~ msgid "Returns this [Rect2] expanded to include a given point." +#~ msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado." + +#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#~ msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto." + +#~ msgid "" +#~ "Append vertices from a given [Mesh] surface onto the current vertex array " +#~ "with specified [Transform]." +#~ msgstr "" +#~ "Adición de vértices de una determinada superficie [Mesh] al array de " +#~ "vértices actual con la [Transform] especificada." + #, fuzzy #~ msgid "" #~ "Returns a list of intersecting [Area]s. For performance reasons " diff --git a/doc/translations/fa.po b/doc/translations/fa.po index 0ee48c3c05..b3ae3e927c 100644 --- a/doc/translations/fa.po +++ b/doc/translations/fa.po @@ -4030,112 +4030,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5213,7 +5222,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10612,17 +10621,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10631,24 +10644,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10662,62 +10675,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10725,35 +10738,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10761,13 +10774,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10779,77 +10792,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11305,8 +11318,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25318,21 +25334,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25341,14 +25368,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25358,80 +25389,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29647,7 +29678,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30959,7 +30992,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31024,22 +31058,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31054,7 +31090,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31062,19 +31098,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31145,7 +31181,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31203,7 +31240,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34752,7 +34791,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -38065,7 +38104,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38095,14 +38134,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38112,7 +38151,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40609,17 +40648,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40637,11 +40702,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40836,7 +40901,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41638,6 +41705,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41655,7 +41740,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41769,7 +41854,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44310,24 +44397,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44337,7 +44430,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44347,27 +44440,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44375,81 +44468,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44457,109 +44550,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44570,91 +44663,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44663,13 +44756,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44679,7 +44772,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44687,19 +44780,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44713,45 +44806,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44760,7 +44853,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44771,7 +44864,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44787,14 +44880,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44802,49 +44895,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44853,7 +44946,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44861,7 +44954,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44869,7 +44962,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44879,7 +44972,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44888,7 +44981,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44897,7 +44990,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44907,7 +45000,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44915,7 +45008,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44925,7 +45018,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44935,7 +45028,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44943,7 +45036,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44952,7 +45045,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44960,7 +45053,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44972,477 +45065,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45450,92 +45543,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45545,33 +45638,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45584,7 +45677,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45596,7 +45689,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45608,7 +45701,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45621,7 +45714,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45629,28 +45722,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45660,25 +45753,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45691,7 +45784,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45703,7 +45796,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45715,7 +45808,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45728,13 +45821,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45742,11 +45835,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45760,7 +45853,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45769,7 +45862,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45785,7 +45878,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45795,7 +45888,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45805,7 +45898,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45816,7 +45909,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45826,7 +45919,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45834,7 +45927,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45845,7 +45938,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45860,7 +45953,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45869,13 +45962,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45884,7 +45977,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45894,7 +45987,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45906,7 +45999,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45916,24 +46009,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45942,7 +46035,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45950,7 +46043,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45959,7 +46052,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45969,7 +46062,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45977,31 +46070,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46009,7 +46102,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46019,21 +46112,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46041,31 +46134,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46073,7 +46166,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46083,7 +46176,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46092,7 +46185,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46101,20 +46194,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46123,7 +46216,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46131,7 +46224,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46140,7 +46233,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46150,20 +46243,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46172,13 +46265,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46188,46 +46281,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46237,7 +46330,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46249,7 +46342,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46257,7 +46350,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46265,7 +46358,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46274,7 +46367,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46288,7 +46381,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46298,7 +46391,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46307,7 +46400,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46317,54 +46410,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46375,61 +46468,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46440,7 +46533,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46449,26 +46542,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46479,20 +46572,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46504,52 +46597,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46557,7 +46650,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46570,7 +46663,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46582,7 +46675,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46594,7 +46687,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46606,7 +46699,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46618,7 +46711,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47286,40 +47379,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47327,14 +47434,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49669,6 +49776,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49686,7 +49809,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49694,11 +49817,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49708,19 +49831,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55135,20 +55258,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55159,28 +55287,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55192,19 +55320,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/fi.po b/doc/translations/fi.po index e508724a41..c28650af80 100644 --- a/doc/translations/fi.po +++ b/doc/translations/fi.po @@ -3609,112 +3609,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4792,7 +4801,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10189,17 +10198,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10208,24 +10221,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10239,62 +10252,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10302,35 +10315,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10338,13 +10351,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10356,78 +10369,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Palauttaa parametrien arkustangentin." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10880,8 +10893,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24893,21 +24909,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24916,14 +24943,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24933,80 +24964,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29231,7 +29262,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30543,7 +30576,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30608,22 +30642,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30638,7 +30674,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30646,19 +30682,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30729,7 +30765,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30787,7 +30824,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34333,7 +34372,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37647,7 +37686,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37677,14 +37716,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37694,7 +37733,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40181,17 +40220,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40209,11 +40274,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40408,7 +40473,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41211,6 +41278,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41228,7 +41313,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41342,7 +41427,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43886,24 +43973,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43913,7 +44006,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43923,27 +44016,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43951,81 +44044,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44033,109 +44126,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44146,91 +44239,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44239,13 +44332,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44255,7 +44348,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44263,19 +44356,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44289,45 +44382,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44336,7 +44429,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44347,7 +44440,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44363,14 +44456,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44378,49 +44471,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44429,7 +44522,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44437,7 +44530,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44445,7 +44538,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44455,7 +44548,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44464,7 +44557,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44473,7 +44566,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44483,7 +44576,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44491,7 +44584,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44501,7 +44594,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44511,7 +44604,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44519,7 +44612,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44528,7 +44621,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44536,7 +44629,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44548,477 +44641,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45026,92 +45119,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45121,33 +45214,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45160,7 +45253,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45172,7 +45265,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45184,7 +45277,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45197,7 +45290,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45205,28 +45298,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45236,25 +45329,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45267,7 +45360,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45279,7 +45372,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45291,7 +45384,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45304,13 +45397,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45318,11 +45411,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45336,7 +45429,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45345,7 +45438,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45361,7 +45454,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45371,7 +45464,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45381,7 +45474,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45392,7 +45485,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45402,7 +45495,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45410,7 +45503,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45421,7 +45514,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45436,7 +45529,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45445,13 +45538,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45460,7 +45553,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45470,7 +45563,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45482,7 +45575,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45492,24 +45585,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45518,7 +45611,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45526,7 +45619,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45535,7 +45628,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45545,7 +45638,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45553,31 +45646,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45585,7 +45678,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45595,21 +45688,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45617,31 +45710,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45649,7 +45742,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45659,7 +45752,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45668,7 +45761,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45677,20 +45770,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45699,7 +45792,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45707,7 +45800,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45716,7 +45809,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45726,20 +45819,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45748,13 +45841,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45764,46 +45857,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45813,7 +45906,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45825,7 +45918,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45833,7 +45926,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45841,7 +45934,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45850,7 +45943,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45864,7 +45957,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45874,7 +45967,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45883,7 +45976,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45893,54 +45986,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45951,61 +46044,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46016,7 +46109,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46025,26 +46118,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46055,20 +46148,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46080,52 +46173,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46133,7 +46226,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46146,7 +46239,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46158,7 +46251,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46170,7 +46263,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46182,7 +46275,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46194,7 +46287,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46856,40 +46949,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46897,14 +47004,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49235,6 +49342,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49252,7 +49375,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49260,11 +49383,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49274,19 +49397,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54701,20 +54824,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54725,28 +54853,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54758,19 +54886,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/fil.po b/doc/translations/fil.po index 002a0c3f7f..58fec62601 100644 --- a/doc/translations/fil.po +++ b/doc/translations/fil.po @@ -3591,112 +3591,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4774,7 +4783,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10173,17 +10182,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10192,24 +10205,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10223,62 +10236,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10286,35 +10299,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10322,13 +10335,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10340,77 +10353,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10866,8 +10879,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24879,21 +24895,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24902,14 +24929,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24919,80 +24950,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29208,7 +29239,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30520,7 +30553,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30585,22 +30619,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30615,7 +30651,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30623,19 +30659,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30706,7 +30742,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30764,7 +30801,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34307,7 +34346,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37620,7 +37659,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37650,14 +37689,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37667,7 +37706,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40152,17 +40191,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40180,11 +40245,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40379,7 +40444,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41181,6 +41248,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41198,7 +41283,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41312,7 +41397,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43853,24 +43940,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43880,7 +43973,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43890,27 +43983,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43918,81 +44011,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44000,109 +44093,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44113,91 +44206,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44206,13 +44299,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44222,7 +44315,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44230,19 +44323,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44256,45 +44349,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44303,7 +44396,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44314,7 +44407,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44330,14 +44423,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44345,49 +44438,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44396,7 +44489,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44404,7 +44497,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44412,7 +44505,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44422,7 +44515,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44431,7 +44524,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44440,7 +44533,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44450,7 +44543,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44458,7 +44551,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44468,7 +44561,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44478,7 +44571,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44486,7 +44579,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44495,7 +44588,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44503,7 +44596,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44515,477 +44608,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44993,92 +45086,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45088,33 +45181,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45127,7 +45220,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45139,7 +45232,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45151,7 +45244,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45164,7 +45257,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45172,28 +45265,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45203,25 +45296,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45234,7 +45327,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45246,7 +45339,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45258,7 +45351,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45271,13 +45364,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45285,11 +45378,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45303,7 +45396,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45312,7 +45405,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45328,7 +45421,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45338,7 +45431,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45348,7 +45441,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45359,7 +45452,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45369,7 +45462,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45377,7 +45470,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45388,7 +45481,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45403,7 +45496,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45412,13 +45505,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45427,7 +45520,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45437,7 +45530,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45449,7 +45542,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45459,24 +45552,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45485,7 +45578,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45493,7 +45586,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45502,7 +45595,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45512,7 +45605,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45520,31 +45613,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45552,7 +45645,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45562,21 +45655,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45584,31 +45677,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45616,7 +45709,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45626,7 +45719,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45635,7 +45728,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45644,20 +45737,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45666,7 +45759,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45674,7 +45767,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45683,7 +45776,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45693,20 +45786,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45715,13 +45808,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45731,46 +45824,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45780,7 +45873,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45792,7 +45885,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45800,7 +45893,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45808,7 +45901,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45817,7 +45910,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45831,7 +45924,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45841,7 +45934,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45850,7 +45943,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45860,54 +45953,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45918,61 +46011,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45983,7 +46076,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45992,26 +46085,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46022,20 +46115,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46047,52 +46140,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46100,7 +46193,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46113,7 +46206,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46125,7 +46218,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46137,7 +46230,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46149,7 +46242,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46161,7 +46254,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46825,40 +46918,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46866,14 +46973,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49208,6 +49315,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49225,7 +49348,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49233,11 +49356,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49247,19 +49370,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54674,20 +54797,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54698,28 +54826,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54731,19 +54859,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/fr.po b/doc/translations/fr.po index c576784485..843666c2c2 100644 --- a/doc/translations/fr.po +++ b/doc/translations/fr.po @@ -45,13 +45,15 @@ # Rémi Verschelde <akien@godotengine.org>, 2021. # blfr <contact.blfr@gmail.com>, 2021. # Urbain <urbain.lantres@tutanota.com>, 2021. +# syns <jpo.drt@gmail.com>, 2021. +# Gallonigher <meduse1500@ovh.fr>, 2021. msgid "" 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: 2021-10-31 13:39+0000\n" -"Last-Translator: Urbain <urbain.lantres@tutanota.com>\n" +"PO-Revision-Date: 2021-11-12 13:49+0000\n" +"Last-Translator: Gallonigher <meduse1500@ovh.fr>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/fr/>\n" "Language: fr\n" @@ -59,7 +61,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -237,27 +239,27 @@ msgid "" "a message with clarifying details\n" "[/codeblock]" msgstr "" -"Vérifie que la [code]condition[/code] est vraie ([code]true[/code]). Si la " +"Vérifie que la [code]condition[/code] est vraie [code]true[/code]. Si la " "[code]condition[/code] est fausse ([code]false[/code]), une erreur est " "générée. Si le programme est lancé via l'éditeur, son exécution sera aussi " "interrompue jusqu'à ce que vous le redémarriez. Cela peut être utilisé comme " "une alternative plus radicale à [method push_error] pour rapporter des " "erreurs aux développeurs de projets ou utilisateurs de plugins.\n" "[b]Note :[/b] Par souci de performance, le code inclus dans [method assert] " -"n'est exécuté dans dans les builds de débogage, ou quand vous lancez votre " -"jeu depuis l'éditeur. N'incluez pas de code qui modifie l'état du script " -"dans un appel à [method assert]. Sinon, votre projet aura un fonctionnement " -"différent une fois exporté en build de production ([i]release[/i]).\n" +"n'est exécuté dans les builds de débogage, ou quand vous lancez votre jeu " +"depuis l'éditeur. N'incluez pas de code qui modifie l'état du script dans un " +"appel à [method assert]. Sinon, votre projet aura un fonctionnement " +"différent une fois exporté en build de production release.\n" "L'argument facultatif [code]message[/code], s'il est donné, est affiché en " -"plus du message générique « [i]Assertion failed[/i] » (Échec de " -"l'assertion). Vous pouvez l'utiliser pour fournir des détails " -"supplémentaires sur la raison de l'échec de l'assertion.\n" +"plus du message générique \"Assertion failed\" (Échec de l'assertion). Vous " +"pouvez l'utiliser pour fournir des détails supplémentaires sur la raison de " +"l'échec de l'assertion.\n" "[codeblock]\n" "# Imaginez que nous voulons une vitesse toujours comprise entre 0 et 20.\n" "speed = -10\n" "assert(speed < 20) # Vrai, le programme continue\n" "assert(speed >= 0) # Faux, le programme s'interrompt\n" -"assert(speed >= 0 && speed < 20) # Vous pouvez aussi combiner les deux " +"assert(speed >= 0 and speed < 20) # Vous pouvez aussi combiner les deux " "conditions en une seule vérification\n" "assert(speed < 20, \"speed = %f, mais la limite de vitesse est 20\" % speed) " "# Affiche un message avec de plus amples détails\n" @@ -516,7 +518,7 @@ msgstr "" "- 1.0: Linéaire\n" "- Supérieur à 1.0 (exclusif): Ease out\n" "[/codeblock]\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" +"[url=https ://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" "ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" "Voir également [méthode smoothstep]. Si vous avez besoin de réaliser des " "transitions plus avancées, utilisez [Tween] ou [AnimationPlayer]." @@ -610,7 +612,7 @@ msgstr "" " var x = 0.5 * i - 1.5\n" " print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n" "[/codeblock]\n" -"Donne :\n" +"Donne:\n" "[codeblock]\n" "-1.5 -0.0 0.0\n" "-1.0 -1.0 0.5\n" @@ -1172,7 +1174,7 @@ msgstr "" "for i in range(-3, 4):\n" " print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n" "[/codeblock]\n" -"Donne :\n" +"Donne:\n" "[codeblock]\n" "-3 0 0\n" "-2 -2 1\n" @@ -3548,6 +3550,8 @@ msgid "" "A button on the right Oculus Touch controller, X button on the left " "controller (also when used in OpenVR)." msgstr "" +"Bouton A sur le contrôleur Oculus Touch de droite, bouton X sur le " +"contrôleur de gauche (également en cas d'utilisation dans OpenVR)." #: doc/classes/@GlobalScope.xml:1061 msgid "" @@ -3565,7 +3569,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1070 msgid "Gamepad button Select." -msgstr "" +msgstr "Bouton Select de la manette." #: doc/classes/@GlobalScope.xml:1073 msgid "Gamepad button Start." @@ -3573,19 +3577,19 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1076 msgid "Gamepad DPad up." -msgstr "" +msgstr "DPad haut de la manette." #: doc/classes/@GlobalScope.xml:1079 msgid "Gamepad DPad down." -msgstr "" +msgstr "DPad bas de la manette." #: doc/classes/@GlobalScope.xml:1082 msgid "Gamepad DPad left." -msgstr "" +msgstr "DPad gauche de la manette." #: doc/classes/@GlobalScope.xml:1085 msgid "Gamepad DPad right." -msgstr "" +msgstr "DPad droite de la manette." #: doc/classes/@GlobalScope.xml:1088 #, fuzzy @@ -3594,7 +3598,7 @@ msgstr "Bouton guide du contrôleur de jeu SDL." #: doc/classes/@GlobalScope.xml:1091 msgid "Gamepad SDL miscellaneous button." -msgstr "" +msgstr "Bouton divers de la manette SDL." #: doc/classes/@GlobalScope.xml:1094 #, fuzzy @@ -3633,7 +3637,7 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu." #: doc/classes/@GlobalScope.xml:1115 msgid "Gamepad left stick click." -msgstr "" +msgstr "Clic du stick gauche de la manette." #: doc/classes/@GlobalScope.xml:1118 #, fuzzy @@ -3647,11 +3651,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu." #: doc/classes/@GlobalScope.xml:1124 msgid "Gamepad right stick click." -msgstr "" +msgstr "Clic du stick droit de la manette." #: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160 msgid "Gamepad left stick horizontal axis." -msgstr "" +msgstr "Axe horizontal du stick gauche de la manette." #: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163 #, fuzzy @@ -3660,7 +3664,7 @@ msgstr "Axe X de la manette gauche du contrôleur de jeu." #: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166 msgid "Gamepad right stick horizontal axis." -msgstr "" +msgstr "Axe horizontal du stick droite de la manette." #: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169 #, fuzzy @@ -3669,11 +3673,11 @@ msgstr "Axe X de la manette droite du contrôleur de jeu." #: doc/classes/@GlobalScope.xml:1139 msgid "Generic gamepad axis 4." -msgstr "" +msgstr "Axe 4 de la manette générique." #: doc/classes/@GlobalScope.xml:1142 msgid "Generic gamepad axis 5." -msgstr "" +msgstr "Axe 5 de la manette générique." #: doc/classes/@GlobalScope.xml:1145 #, fuzzy @@ -3687,11 +3691,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu." #: doc/classes/@GlobalScope.xml:1151 msgid "Generic gamepad axis 8." -msgstr "" +msgstr "Axe 8 de la manette générique." #: doc/classes/@GlobalScope.xml:1154 msgid "Generic gamepad axis 9." -msgstr "" +msgstr "Axe 9 de la manette générique." #: doc/classes/@GlobalScope.xml:1157 #, fuzzy @@ -3700,11 +3704,11 @@ msgstr "Nombre maximal de passes de tirage prises en charge." #: doc/classes/@GlobalScope.xml:1172 msgid "Gamepad left analog trigger." -msgstr "" +msgstr "Gâchette analogique gauche de la manette." #: doc/classes/@GlobalScope.xml:1175 msgid "Gamepad right analog trigger." -msgstr "" +msgstr "Gâchette analogique droite de la manette." #: doc/classes/@GlobalScope.xml:1178 #, fuzzy @@ -4134,15 +4138,14 @@ msgstr "" "boîte de dialogue de fichier apparaîtra pour choisir le chemin." #: doc/classes/@GlobalScope.xml:1415 -#, fuzzy msgid "" "Hints that a property is an instance of a [Resource]-derived type, " "optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). " "Editing it will show a popup menu of valid resource types to instantiate." msgstr "" "Indice que la propriété est une instance d'un type dérivé de [Resource], " -"spécifie optionnellement via le texte de l'indice (ex: [code]\"Texture2D\"[/" -"code]) En l'éditant un menu contextuel apparaitra avec les types de " +"spécifie optionnellement via le texte de l'indice (e.g. [code]\"Texture2D\"[/" +"code]) En l'éditant un menu contextuel apparaîtra avec les types de " "ressources valides a instancier." #: doc/classes/@GlobalScope.xml:1418 @@ -4556,22 +4559,31 @@ msgstr "" "autre." #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "Retourne cette [AABB] élargie pour inclure un point donné." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "Retourne le volume de l'[AABB]." -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "Récupère la position des 8 extrémités de l'[AABB] dans l'espace." -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "Retourne normalisé l'axe le plus long de l'[AABB]." -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." @@ -4579,15 +4591,15 @@ msgstr "" "Retourne l'index de l'axe le plus long de l'AABB] (d'après les constantes de " "[code]AXIS_*[/code] de [Vector3])." -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "Retourne la longueur scalaire de l'axe le plus long de l'[AABB]." -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "Retourne l'axe le plus court normalisé de l'[AABB]." -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." @@ -4595,11 +4607,11 @@ msgstr "" "Retourne l'index de l'axe le plus court de l'[AABB] (d'après l'énumération " "[Vector3]::AXIS*)." -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "Retourne la longueur scalaire de l’axe le plus court de l’[AABB]." -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." @@ -4607,7 +4619,7 @@ msgstr "" "Retourne le point d'appui dans une direction donnée. Ceci est utile pour les " "algorithmes de détection de collision." -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." @@ -4615,19 +4627,19 @@ msgstr "" "Retourne une copie de l'[AABB] agrandie d'un nombre donné d'unités dans " "toutes les directions." -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "Retourne [code]true[/code] si l'[AABB] est plate ou vide." -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "Retourne [code]true[/code] si l'[AABB] est vide." -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "Retourne [code]true[/code] si l'[AABB] contient un point." -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." @@ -4635,16 +4647,16 @@ msgstr "" "Retourne l’intersection entre deux [AABB]. Une AABB vide (taille 0,0,0) est " "retournée en cas d’échec." -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "Retourne [code]true[/code] si l'[AABB] chevauche une autre." -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" "Retourne [code]true[/code] si l'[AABB] est sur les deux côtés d'un plan." -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4652,7 +4664,7 @@ msgstr "" "Retourne [code]true[/code] si l'[AABB] coupe le segment de droite entre " "[code]from[/code] et [code]to[/code]." -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4662,14 +4674,14 @@ msgstr "" "approximativement égales, en appelant [method @GDScript.is_equal_approx] sur " "chaque composantes." -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" "retourne une [AABB] plus grande qui contient à la fois [AABB] et [code]with[/" "code]." -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." @@ -4677,11 +4689,11 @@ msgstr "" "Coin de fin. Calculé par [code]position + size[/code]. Changer cette valeur " "changera aussi la taille." -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "Coin de départ. A généralement des valeurs inférieures à [member end]." -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 #, fuzzy msgid "" "Size from [member position] to [member end]. Typically, all components are " @@ -4786,17 +4798,17 @@ msgid "" "[FileDialog] to disable hiding the dialog when pressing OK." msgstr "" "Si [code]vrai[/code], la boîte de dialogue est cachée quand le bouton OK est " -"poussé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par " +"pressé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par " "exemple, valider l'entrée quand le signal [signal confirmed] est reçu et " "gérer la dissimulation de la boîte de dialogue dans votre propre logique.\n" "[b]Note:[/b] Plusieurs nÅ“uds dérivés de cette classe peuvent avoir une " "valeur défaut différent et potentiellement leur propre logique intégrée qui " "outrepassera ce réglage. Par exemple [FileDialog] fait défaut à [code]false[/" "code], et contient sa propre logique pour valider l'entrée qui est appelée " -"quand vous poussez OK, qui finit par cachant la boîte de dialogue si " -"l'entrée est valide. Comme tel, cette propriété ne peut pas être utilisé en " +"quand vous pressez OK, qui éventuellement cache le dialogue si l'entrée est " +"valide. Comme tel, cette propriété ne peut pas être utilisé dans " "[FileDialog] pour désactiver la dissimulation de la boîte de dialogue quand " -"OK est poussé." +"OK est pressé." #: doc/classes/AcceptDialog.xml:69 msgid "The text displayed by the dialog." @@ -5950,9 +5962,9 @@ msgid "" "Gets all children nodes in order as a [code]name: node[/code] dictionary. " "Only useful when inheriting [AnimationRootNode]." msgstr "" -"Obtient tous les nÅ“uds enfants dans l'ordre en tant que dictionnaire de la " -"forme [code]nom: nÅ“ud[/code]. Utile uniquement lorsque [AnimationRootNode] " -"est hérité." +"Obtient tous les nÅ“uds enfants dans l'ordre en tant que dictionnaire " +"[code]name: node[/code]. Utile uniquement lorsque [AnimationRootNode] est " +"hérité." #: doc/classes/AnimationNode.xml:79 msgid "" @@ -6149,7 +6161,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -11759,17 +11771,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -11778,24 +11794,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -11809,63 +11825,63 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 #, fuzzy msgid "The rotation of the baked custom sky." msgstr "La racine de la scène éditée." -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -11873,36 +11889,36 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 #, fuzzy msgid "The calculated light data." msgstr "La hauteur de la capsule." -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -11910,13 +11926,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -11928,82 +11944,82 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 #, fuzzy msgid "The default bake quality mode." msgstr "L'arrière-plan par défaut pour [GraphNode]." -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 #, fuzzy msgid "Baking was successful." msgstr "La connexion a réussi." -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "Actuellement inutilisé." -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Renvoie l'arc tangente des paramètres." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 #, fuzzy msgid "The size of the generated lightmaps is too large." msgstr "Taille du plan généré." -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 #, fuzzy msgid "Returns if user cancels baking." msgstr "Retourne le bouton d'annulation." -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -12464,8 +12480,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -15430,7 +15449,6 @@ msgid "" msgstr "" #: doc/classes/Color.xml:37 -#, fuzzy msgid "" "Constructs a color from a 32-bit integer in RGBA format (each byte " "represents a color channel).\n" @@ -15438,10 +15456,10 @@ msgid "" "var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n" "[/codeblock]" msgstr "" -"Construit une couleur à partir d'une couleur existante, mais avec une valeur " -"alpha personnalisée.\n" +"Construit une couleur à partir d'un entier de 32 bits au format RGBA (chaque " +"octet représente un canal de couleur).\n" "[codeblock]\n" -"var red = Color(Color.red, 0.5) # 50% de rouge transparent.\n" +"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n" "[/codeblock]" #: doc/classes/Color.xml:49 @@ -15582,7 +15600,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Color.xml:158 -#, fuzzy msgid "" "Returns the linear interpolation with another color. The interpolation " "factor [code]weight[/code] is between 0 and 1.\n" @@ -15594,11 +15611,12 @@ msgid "" "[/codeblock]" msgstr "" "Retourne l'interpolation linéaire avec une autre couleur. Le facteur " -"d'interpolation [code]t[/code] est compris entre 0 et 1.\n" +"d'interpolation [code]weight[/code] est compris entre 0 et 1.\n" "[codeblock]\n" "var c1 = Color(1.0, 0.0, 0.0)\n" "var c2 = Color(0.0, 1.0, 0.0)\n" -"var li_c = c1.lerp(c2, 0.5) # Une couleur d'une RGBA( 128, 128, 0, 255)\n" +"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, " +"0.0)\n" "[/codeblock]" #: doc/classes/Color.xml:169 @@ -22885,9 +22903,8 @@ msgid "Removes an import plugin registered by [method add_import_plugin]." msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]." #: doc/classes/EditorPlugin.xml:423 -#, fuzzy msgid "Removes an inspector plugin registered by [method add_import_plugin]" -msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]." +msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]" #: doc/classes/EditorPlugin.xml:430 #, fuzzy @@ -27001,21 +27018,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -27024,14 +27052,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "Appelle [method bake] avec [code]create_visual_debug[/code] activé." -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -27041,61 +27073,61 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "Si [code]true[/code], permet le défilement horizontal." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." @@ -27104,22 +27136,26 @@ msgstr "" "plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du " "matériel bas de gamme." -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" "Utilise 128 subdivisions. Il s’agit du paramètre de qualité par défaut." -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "Utilise 256 subdivisions." -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 +#, fuzzy msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" +"Utilise 64 subdivisions. C’est le réglage de qualité la plus basse, mais le " +"plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du " +"matériel bas de gamme." -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -31429,7 +31465,9 @@ msgid "The drag position." msgstr "La position de glissement." #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -32789,7 +32827,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -32854,22 +32893,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -32884,7 +32925,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -32892,19 +32933,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -32978,7 +33019,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -33036,7 +33078,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -36654,7 +36698,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -40018,7 +40062,7 @@ msgstr "Retourne le nombre de formes assignées à une zone." #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -40048,14 +40092,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -40065,7 +40109,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -42611,17 +42655,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -42639,11 +42709,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -42854,7 +42924,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -43662,6 +43734,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -43679,7 +43769,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -43799,9 +43889,10 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -#, fuzzy -msgid "Returns the [PhysicsDirectBodyState] of the body." -msgstr "Retourne le [enum BitmaskMode] de l'autotile." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." +msgstr "" #: doc/classes/PhysicsServer.xml:370 msgid "" @@ -46434,24 +46525,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46461,7 +46558,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46471,27 +46568,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -46499,81 +46596,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -46581,112 +46678,112 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" "Si [code]true[/code], le mouvement linéaire à travers l’axe Z est limité." -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "Si [code]true[/code], le filtrage est activé." -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -46697,91 +46794,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "Pile d’appels maximale autorisée pour le débogage de GDScript." -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "Hotspot pour l’image de curseur de souris personnalisée." -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -46790,13 +46887,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -46806,7 +46903,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -46814,19 +46911,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -46840,45 +46937,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -46887,7 +46984,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -46898,7 +46995,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -46914,14 +47011,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -46929,49 +47026,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -46980,7 +47077,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46988,7 +47085,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46996,7 +47093,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -47006,7 +47103,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -47015,7 +47112,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -47024,7 +47121,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -47034,7 +47131,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47042,7 +47139,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -47052,7 +47149,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -47062,7 +47159,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47070,7 +47167,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -47079,7 +47176,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47087,7 +47184,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -47099,478 +47196,478 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 #, fuzzy msgid "If [code]true[/code], logs all output to files." msgstr "Si [code]true[/code], enregistre toutes les sorties aux fichiers." -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -47578,92 +47675,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -47673,19 +47770,19 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 #, fuzzy msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" @@ -47695,14 +47792,14 @@ msgstr "" "Taille de la table de hachage utilisée pour l'algorithme de grille de " "hachage 2D à large phase." -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47715,7 +47812,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47727,7 +47824,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47739,7 +47836,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47752,7 +47849,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -47760,28 +47857,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -47791,25 +47888,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47822,7 +47919,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47834,7 +47931,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47846,7 +47943,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47859,13 +47956,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -47873,11 +47970,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -47891,7 +47988,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -47900,7 +47997,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -47916,7 +48013,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -47926,7 +48023,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47936,7 +48033,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -47947,7 +48044,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47957,7 +48054,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -47965,7 +48062,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -47976,7 +48073,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -47991,7 +48088,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -48000,13 +48097,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -48015,7 +48112,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -48025,7 +48122,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -48037,7 +48134,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -48047,24 +48144,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -48073,7 +48170,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -48081,7 +48178,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -48090,7 +48187,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -48100,7 +48197,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -48108,31 +48205,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -48140,7 +48237,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -48150,21 +48247,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -48172,31 +48269,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -48204,7 +48301,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -48214,7 +48311,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -48223,7 +48320,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -48232,14 +48329,14 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 #, fuzzy msgid "" "If [code]true[/code], the texture importer will import lossless textures " @@ -48248,7 +48345,7 @@ msgstr "" "Si [code]true[/code], la [SpinBox] sera modifiable. Sinon, elle sera en " "lecture seule." -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -48257,7 +48354,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -48265,7 +48362,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -48274,7 +48371,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -48284,13 +48381,13 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 #, fuzzy msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" @@ -48300,7 +48397,7 @@ msgstr "" "Si [code]true[/code], l’état de la clé est pressé. Si [code]false[/code], " "l’état de la clé est libéré." -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -48309,13 +48406,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -48325,46 +48422,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -48374,7 +48471,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -48386,7 +48483,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -48394,7 +48491,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -48402,7 +48499,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -48411,7 +48508,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -48425,7 +48522,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -48435,7 +48532,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -48444,7 +48541,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -48454,54 +48551,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -48512,61 +48609,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -48577,7 +48674,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -48586,26 +48683,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -48616,20 +48713,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -48641,52 +48738,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -48694,7 +48791,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -48707,7 +48804,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -48719,7 +48816,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -48731,7 +48828,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -48743,7 +48840,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -48755,7 +48852,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -49436,40 +49533,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "Retourne la zone du [Rect2]." -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -49477,14 +49588,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -51839,6 +51950,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -51856,7 +51983,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -51864,11 +51991,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -51878,19 +52005,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -56288,7 +56415,6 @@ msgstr "" "de la [code]position[/code]." #: doc/classes/String.xml:272 -#, fuzzy msgid "" "Finds the first occurrence of a substring. Returns the starting position of " "the substring or [code]-1[/code] if not found. Optionally, the initial " @@ -56301,10 +56427,17 @@ msgid "" " pass\n" "[/codeblock]" msgstr "" -"Trouve la première occurence d'une sous-chaîne de caractères. Retourne la " +"Trouve la première occurrence d'une sous-chaîne de caractères. Retourne la " "position de départ de la sous-chaîne de caractères ou [code]-1[/code] si non " "trouvée. Optionnellement, l'index de recherche initial peut être passé (en " -"tant qu'argument) ." +"tant qu'argument).\n" +"[b]Note:[/b] Si vous voulez simplement savoir si une chaîne contient une " +"sous-chaîne, utilisez l'opérateur [code]in[/code] comme suit:\n" +"[codeblock]\n" +"# Évaluera à `false`.\n" +"if \"i\" in \"team\":\n" +" pass\n" +"[/codeblock]" #: doc/classes/String.xml:285 msgid "" @@ -57493,20 +57626,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -57517,28 +57655,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -57550,19 +57688,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -72260,8 +72398,8 @@ msgid "" "until you get a [signal connection_closed] signal to achieve the clean " "close. See [method WebSocketPeer.close] for more details." msgstr "" -"Émis lorsque le serveur demande une fermeture propre. Vous devriez continuer " -"à voter jusqu’à ce que vous obteniez un signal [signal connection_closed] " +"Émit lorsque le serveur demande une fermeture propre. Vous devriez continuer " +"à sonder jusqu'à ce que vous obteniez un signal [signal connection_closed] " "pour obtenir la fermeture propre. Voir [method WebSocketPeer.close] pour " "plus de détails." @@ -73182,6 +73320,13 @@ msgstr "" "Si [code]true[/code] (vrai), les nÅ“uds enfants sont triés, sinon le tri est " "désactivé." +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "Retourne cette [AABB] élargie pour inclure un point donné." + +#, fuzzy +#~ msgid "Returns the [PhysicsDirectBodyState] of the body." +#~ msgstr "Retourne le [enum BitmaskMode] de l'autotile." + #, fuzzy #~ msgid "Emitted when the resource value was set and user clicked to edit it." #~ msgstr "Émis lorsqu'une interface est supprimée." diff --git a/doc/translations/gl.po b/doc/translations/gl.po index b4b213e411..6cf999916b 100644 --- a/doc/translations/gl.po +++ b/doc/translations/gl.po @@ -3588,112 +3588,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4765,7 +4774,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10142,15 +10151,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10159,24 +10172,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10190,62 +10203,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10253,35 +10266,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10289,13 +10302,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10307,77 +10320,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10825,8 +10838,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24771,20 +24787,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24793,14 +24820,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24810,80 +24841,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29076,7 +29107,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30375,7 +30408,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30440,22 +30474,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30470,7 +30506,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30478,19 +30514,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30558,7 +30594,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30616,7 +30653,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34141,7 +34180,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37436,7 +37475,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37466,14 +37505,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37483,7 +37522,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39961,17 +40000,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39989,11 +40054,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40188,7 +40253,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40990,6 +41057,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41007,7 +41092,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41121,7 +41206,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43661,24 +43748,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43688,7 +43781,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43698,27 +43791,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43726,81 +43819,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43808,109 +43901,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43921,91 +44014,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44014,13 +44107,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44030,7 +44123,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44038,19 +44131,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44064,45 +44157,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44111,7 +44204,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44122,7 +44215,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44138,14 +44231,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44153,49 +44246,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44204,7 +44297,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44212,7 +44305,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44220,7 +44313,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44230,7 +44323,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44239,7 +44332,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44248,7 +44341,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44258,7 +44351,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44266,7 +44359,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44276,7 +44369,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44286,7 +44379,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44294,7 +44387,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44303,7 +44396,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44311,7 +44404,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44323,477 +44416,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44801,92 +44894,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44896,33 +44989,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44935,7 +45028,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44947,7 +45040,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44959,7 +45052,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44972,7 +45065,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44980,28 +45073,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45011,25 +45104,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45042,7 +45135,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45054,7 +45147,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45066,7 +45159,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45079,13 +45172,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45093,11 +45186,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45111,7 +45204,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45120,7 +45213,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45136,7 +45229,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45146,7 +45239,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45156,7 +45249,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45167,7 +45260,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45177,7 +45270,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45185,7 +45278,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45196,7 +45289,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45211,7 +45304,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45220,13 +45313,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45235,7 +45328,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45245,7 +45338,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45257,7 +45350,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45267,24 +45360,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45293,7 +45386,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45301,7 +45394,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45310,7 +45403,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45320,7 +45413,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45328,31 +45421,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45360,7 +45453,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45370,21 +45463,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45392,31 +45485,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45424,7 +45517,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45434,7 +45527,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45443,7 +45536,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45452,20 +45545,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45474,7 +45567,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45482,7 +45575,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45491,7 +45584,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45501,20 +45594,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45523,13 +45616,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45539,46 +45632,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45588,7 +45681,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45600,7 +45693,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45608,7 +45701,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45616,7 +45709,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45625,7 +45718,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45639,7 +45732,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45649,7 +45742,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45658,7 +45751,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45668,54 +45761,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45726,61 +45819,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45791,7 +45884,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45800,26 +45893,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45830,20 +45923,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45855,52 +45948,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45908,7 +46001,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45921,7 +46014,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45933,7 +46026,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45945,7 +46038,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45957,7 +46050,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45969,7 +46062,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46628,40 +46721,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46669,14 +46776,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49003,6 +49110,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49020,7 +49143,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49028,11 +49151,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49042,19 +49165,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54439,20 +54562,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54463,28 +54591,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54496,19 +54624,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/hi.po b/doc/translations/hi.po index 641d8c17dd..942e7dc94d 100644 --- a/doc/translations/hi.po +++ b/doc/translations/hi.po @@ -3586,112 +3586,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4763,7 +4772,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10140,15 +10149,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10157,24 +10170,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10188,62 +10201,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10251,35 +10264,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10287,13 +10300,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10305,77 +10318,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10823,8 +10836,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24769,20 +24785,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24791,14 +24818,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24808,80 +24839,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29074,7 +29105,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30373,7 +30406,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30438,22 +30472,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30468,7 +30504,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30476,19 +30512,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30556,7 +30592,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30614,7 +30651,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34139,7 +34178,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37434,7 +37473,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37464,14 +37503,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37481,7 +37520,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39959,17 +39998,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39987,11 +40052,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40186,7 +40251,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40988,6 +41055,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41005,7 +41090,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41119,7 +41204,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43659,24 +43746,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43686,7 +43779,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43696,27 +43789,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43724,81 +43817,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43806,109 +43899,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43919,91 +44012,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44012,13 +44105,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44028,7 +44121,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44036,19 +44129,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44062,45 +44155,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44109,7 +44202,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44120,7 +44213,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44136,14 +44229,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44151,49 +44244,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44202,7 +44295,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44210,7 +44303,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44218,7 +44311,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44228,7 +44321,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44237,7 +44330,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44246,7 +44339,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44256,7 +44349,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44264,7 +44357,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44274,7 +44367,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44284,7 +44377,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44292,7 +44385,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44301,7 +44394,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44309,7 +44402,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44321,477 +44414,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44799,92 +44892,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44894,33 +44987,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44933,7 +45026,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44945,7 +45038,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44957,7 +45050,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44970,7 +45063,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44978,28 +45071,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45009,25 +45102,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45040,7 +45133,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45052,7 +45145,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45064,7 +45157,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45077,13 +45170,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45091,11 +45184,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45109,7 +45202,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45118,7 +45211,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45134,7 +45227,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45144,7 +45237,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45154,7 +45247,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45165,7 +45258,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45175,7 +45268,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45183,7 +45276,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45194,7 +45287,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45209,7 +45302,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45218,13 +45311,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45233,7 +45326,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45243,7 +45336,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45255,7 +45348,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45265,24 +45358,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45291,7 +45384,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45299,7 +45392,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45308,7 +45401,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45318,7 +45411,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45326,31 +45419,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45358,7 +45451,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45368,21 +45461,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45390,31 +45483,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45422,7 +45515,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45432,7 +45525,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45441,7 +45534,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45450,20 +45543,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45472,7 +45565,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45480,7 +45573,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45489,7 +45582,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45499,20 +45592,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45521,13 +45614,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45537,46 +45630,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45586,7 +45679,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45598,7 +45691,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45606,7 +45699,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45614,7 +45707,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45623,7 +45716,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45637,7 +45730,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45647,7 +45740,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45656,7 +45749,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45666,54 +45759,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45724,61 +45817,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45789,7 +45882,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45798,26 +45891,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45828,20 +45921,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45853,52 +45946,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45906,7 +45999,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45919,7 +46012,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45931,7 +46024,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45943,7 +46036,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45955,7 +46048,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45967,7 +46060,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46626,40 +46719,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46667,14 +46774,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49001,6 +49108,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49018,7 +49141,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49026,11 +49149,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49040,19 +49163,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54437,20 +54560,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54461,28 +54589,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54494,19 +54622,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/hu.po b/doc/translations/hu.po index c917fe976a..d4797ed27b 100644 --- a/doc/translations/hu.po +++ b/doc/translations/hu.po @@ -5,12 +5,14 @@ # # Misi <varady.misi@gmail.com>, 2021. # Looky1173 <lgl1173and2006@gmail.com>, 2021. +# Frontrider <frontrider@tutanota.com>, 2021. +# Andras Virag <snowflake71@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 13:40+0000\n" -"Last-Translator: Looky1173 <lgl1173and2006@gmail.com>\n" +"PO-Revision-Date: 2021-11-15 21:14+0000\n" +"Last-Translator: Andras Virag <snowflake71@gmail.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/hu/>\n" "Language: hu\n" @@ -18,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -37,26 +39,24 @@ msgid "Methods" msgstr "Metódusok" #: doc/tools/make_rst.py -#, fuzzy msgid "Theme Properties" -msgstr "Téma Tulajdonságok" +msgstr "Téma Tulajdonságai" #: doc/tools/make_rst.py msgid "Signals" msgstr "Jelzések" #: doc/tools/make_rst.py -#, fuzzy msgid "Enumerations" -msgstr "Számlálók" +msgstr "Listák" #: doc/tools/make_rst.py msgid "Constants" -msgstr "Konstansok" +msgstr "Ãllandók" #: doc/tools/make_rst.py msgid "Property Descriptions" -msgstr "Tulajdonság leÃrások" +msgstr "Tulajdonság leÃrásai" #: doc/tools/make_rst.py msgid "Method Descriptions" @@ -1434,19 +1434,19 @@ msgstr "" #: doc/classes/@GlobalScope.xml:104 msgid "Top-left corner." -msgstr "" +msgstr "Bal felsÅ‘ sarok." #: doc/classes/@GlobalScope.xml:107 msgid "Top-right corner." -msgstr "" +msgstr "Jobb felsÅ‘ sarok." #: doc/classes/@GlobalScope.xml:110 msgid "Bottom-right corner." -msgstr "" +msgstr "Jobb alsó sarok." #: doc/classes/@GlobalScope.xml:113 msgid "Bottom-left corner." -msgstr "" +msgstr "Bal alsó sarok." #: doc/classes/@GlobalScope.xml:116 msgid "" @@ -1490,19 +1490,19 @@ msgstr "" #: doc/classes/@GlobalScope.xml:143 msgid "Escape key." -msgstr "" +msgstr "Escape billentyű." #: doc/classes/@GlobalScope.xml:146 msgid "Tab key." -msgstr "" +msgstr "Tab billentyű." #: doc/classes/@GlobalScope.xml:149 msgid "Shift+Tab key." -msgstr "" +msgstr "Shift+Tab billentyű." #: doc/classes/@GlobalScope.xml:152 msgid "Backspace key." -msgstr "" +msgstr "Backspace billentyű." #: doc/classes/@GlobalScope.xml:155 msgid "Return key (on the main keyboard)." @@ -3602,112 +3602,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4779,7 +4788,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10156,15 +10165,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10173,24 +10186,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10204,62 +10217,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10267,35 +10280,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10303,13 +10316,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10321,77 +10334,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10839,8 +10852,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24785,20 +24801,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24807,14 +24834,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24824,80 +24855,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29090,7 +29121,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30389,7 +30422,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30454,22 +30488,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30484,7 +30520,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30492,19 +30528,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30572,7 +30608,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30630,7 +30667,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34155,7 +34194,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37450,7 +37489,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37480,14 +37519,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37497,7 +37536,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39975,17 +40014,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40003,11 +40068,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40202,7 +40267,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41004,6 +41071,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41021,7 +41106,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41135,7 +41220,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43675,24 +43762,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43702,7 +43795,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43712,27 +43805,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43740,81 +43833,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43822,109 +43915,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43935,91 +44028,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44028,13 +44121,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44044,7 +44137,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44052,19 +44145,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44078,45 +44171,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44125,7 +44218,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44136,7 +44229,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44152,14 +44245,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44167,49 +44260,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44218,7 +44311,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44226,7 +44319,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44234,7 +44327,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44244,7 +44337,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44253,7 +44346,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44262,7 +44355,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44272,7 +44365,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44280,7 +44373,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44290,7 +44383,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44300,7 +44393,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44308,7 +44401,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44317,7 +44410,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44325,7 +44418,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44337,477 +44430,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44815,92 +44908,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44910,33 +45003,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44949,7 +45042,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44961,7 +45054,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44973,7 +45066,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44986,7 +45079,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44994,28 +45087,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45025,25 +45118,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45056,7 +45149,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45068,7 +45161,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45080,7 +45173,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45093,13 +45186,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45107,11 +45200,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45125,7 +45218,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45134,7 +45227,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45150,7 +45243,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45160,7 +45253,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45170,7 +45263,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45181,7 +45274,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45191,7 +45284,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45199,7 +45292,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45210,7 +45303,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45225,7 +45318,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45234,13 +45327,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45249,7 +45342,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45259,7 +45352,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45271,7 +45364,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45281,24 +45374,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45307,7 +45400,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45315,7 +45408,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45324,7 +45417,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45334,7 +45427,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45342,31 +45435,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45374,7 +45467,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45384,21 +45477,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45406,31 +45499,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45438,7 +45531,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45448,7 +45541,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45457,7 +45550,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45466,20 +45559,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45488,7 +45581,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45496,7 +45589,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45505,7 +45598,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45515,20 +45608,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45537,13 +45630,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45553,46 +45646,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45602,7 +45695,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45614,7 +45707,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45622,7 +45715,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45630,7 +45723,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45639,7 +45732,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45653,7 +45746,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45663,7 +45756,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45672,7 +45765,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45682,54 +45775,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45740,61 +45833,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45805,7 +45898,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45814,26 +45907,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45844,20 +45937,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45869,52 +45962,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45922,7 +46015,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45935,7 +46028,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45947,7 +46040,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45959,7 +46052,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45971,7 +46064,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45983,7 +46076,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46642,40 +46735,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46683,14 +46790,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49017,6 +49124,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49034,7 +49157,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49042,11 +49165,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49056,19 +49179,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54453,20 +54576,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54477,28 +54605,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54510,19 +54638,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/id.po b/doc/translations/id.po index 3e64a2b4c3..c19b00b573 100644 --- a/doc/translations/id.po +++ b/doc/translations/id.po @@ -9,12 +9,13 @@ # Hanz <hanzhaxors@gmail.com>, 2021. # Naufal Adriansyah <naufaladrn90@gmail.com>, 2021. # Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021. +# Stephen Gunawan Susilo <gunawanstephen@yahoo.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-07 10:24+0000\n" -"Last-Translator: Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: Stephen Gunawan Susilo <gunawanstephen@yahoo.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/id/>\n" "Language: id\n" @@ -22,7 +23,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -119,7 +120,6 @@ msgstr "" "dalam [Color]." #: modules/gdscript/doc_classes/@GDScript.xml:45 -#, fuzzy msgid "" "Returns the absolute value of parameter [code]s[/code] (i.e. positive " "value).\n" @@ -127,11 +127,10 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" -"Mengembalikan nilai mutlak dari parameter [code]s[/code] (misal: nilai " +"Mengembalikan nilai mutlak dari parameter [code]s[/code] (mis: nilai " "positif).\n" "[codeblock]\n" -"# a adalah 1\n" -"a = abs(-1)\n" +"a = abs(-1) # a adalah 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 @@ -3795,112 +3794,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4978,7 +4986,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10377,17 +10385,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10396,24 +10408,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10427,62 +10439,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10490,35 +10502,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10526,13 +10538,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10544,77 +10556,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11070,8 +11082,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25085,21 +25100,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25108,14 +25134,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25125,80 +25155,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29414,7 +29444,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30726,7 +30758,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30791,22 +30824,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30821,7 +30856,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30829,19 +30864,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30912,7 +30947,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30970,7 +31006,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34519,7 +34557,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37832,7 +37870,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37862,14 +37900,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37879,7 +37917,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40378,17 +40416,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40406,11 +40470,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40605,7 +40669,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41408,6 +41474,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41425,7 +41509,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41539,7 +41623,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44081,24 +44167,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44108,7 +44200,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44118,27 +44210,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44146,81 +44238,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44228,109 +44320,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44341,91 +44433,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44434,13 +44526,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44450,7 +44542,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44458,19 +44550,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44484,45 +44576,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44531,7 +44623,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44542,7 +44634,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44558,14 +44650,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44573,49 +44665,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44624,7 +44716,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44632,7 +44724,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44640,7 +44732,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44650,7 +44742,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44659,7 +44751,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44668,7 +44760,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44678,7 +44770,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44686,7 +44778,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44696,7 +44788,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44706,7 +44798,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44714,7 +44806,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44723,7 +44815,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44731,7 +44823,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44743,477 +44835,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45221,92 +45313,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45316,33 +45408,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45355,7 +45447,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45367,7 +45459,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45379,7 +45471,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45392,7 +45484,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45400,28 +45492,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45431,25 +45523,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45462,7 +45554,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45474,7 +45566,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45486,7 +45578,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45499,13 +45591,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45513,11 +45605,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45531,7 +45623,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45540,7 +45632,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45556,7 +45648,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45566,7 +45658,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45576,7 +45668,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45587,7 +45679,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45597,7 +45689,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45605,7 +45697,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45616,7 +45708,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45631,7 +45723,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45640,13 +45732,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45655,7 +45747,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45665,7 +45757,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45677,7 +45769,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45687,24 +45779,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45713,7 +45805,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45721,7 +45813,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45730,7 +45822,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45740,7 +45832,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45748,31 +45840,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45780,7 +45872,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45790,21 +45882,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45812,31 +45904,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45844,7 +45936,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45854,7 +45946,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45863,7 +45955,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45872,20 +45964,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45894,7 +45986,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45902,7 +45994,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45911,7 +46003,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45921,20 +46013,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45943,13 +46035,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45959,46 +46051,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46008,7 +46100,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46020,7 +46112,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46028,7 +46120,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46036,7 +46128,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46045,7 +46137,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46059,7 +46151,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46069,7 +46161,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46078,7 +46170,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46088,54 +46180,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46146,61 +46238,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46211,7 +46303,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46220,26 +46312,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46250,20 +46342,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46275,52 +46367,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46328,7 +46420,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46341,7 +46433,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46353,7 +46445,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46365,7 +46457,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46377,7 +46469,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46389,7 +46481,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47053,40 +47145,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47094,14 +47200,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49436,6 +49542,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49453,7 +49575,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49461,11 +49583,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49475,19 +49597,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54902,20 +55024,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54926,28 +55053,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54959,19 +55086,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/it.po b/doc/translations/it.po index cdc5e42f21..b5b5700045 100644 --- a/doc/translations/it.po +++ b/doc/translations/it.po @@ -21,12 +21,14 @@ # Jacopo Farina <jacopo1.farina@gmail.com>, 2021. # Riteo Siuga <riteo@posteo.net>, 2021. # ZeroKun265 <davidegiambirtone265@gmail.com>, 2021. +# Andrea Montagna <fullmontis@gmail.com>, 2021. +# Andrea Leganza <neogene@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 13:39+0000\n" -"Last-Translator: ZeroKun265 <davidegiambirtone265@gmail.com>\n" +"PO-Revision-Date: 2021-11-15 21:14+0000\n" +"Last-Translator: Andrea Leganza <neogene@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/it/>\n" "Language: it\n" @@ -34,7 +36,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -183,7 +185,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:78 -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -209,7 +210,7 @@ msgid "" "a message with clarifying details\n" "[/codeblock]" msgstr "" -"Controlla che [code]condizion[/code] sia [code]true[/code]. Se " +"Controlla che [code]condition[/code] sia [code]true[/code]. Se " "[code]condition[/code] è [code]false[/code], un errore è generato ed il " "programma viene fermato fin quando decidi di avviarlo di nuovo. Viene " "eseguito soltanto nelle build di debug, o quando il gioco viene eseguito " @@ -296,7 +297,6 @@ msgstr "" "dall'origine ed un angolo)." #: modules/gdscript/doc_classes/@GDScript.xml:135 -#, fuzzy msgid "" "Rounds [code]s[/code] upward (towards positive infinity), returning the " "smallest whole number that is not less than [code]s[/code].\n" @@ -306,12 +306,13 @@ msgid "" "[/codeblock]\n" "See also [method floor], [method round], [method stepify], and [int]." msgstr "" -"Arrotonda [code]s[/code] per eccesso, ritornando il più piccolo intero non " -"minore di [code]s[/code].\n" +"Arrotonda [code]s[/code] per eccesso (verso l'infinito positivo), ritornando " +"il più piccolo intero non minore di [code]s[/code].\n" "[codeblock]\n" -"i = ceil(1.45) # i è 2\n" -"i = ceil(1.001) # i è 2\n" -"[/codeblock]" +"a = ceil(1.45) # a è 2.0\n" +"a = ceil(1.001) # a è 2.0\n" +"[/codeblock]\n" +"Vedi anche [method floor], [method round], [method stepify], e [int]." #: modules/gdscript/doc_classes/@GDScript.xml:147 msgid "" @@ -334,7 +335,6 @@ msgstr "" "Questo è l'inverso di [method ord]." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -347,13 +347,9 @@ msgstr "" "Limita [code]value[/code] e ritorna un valore non minore di [code]min[/code] " "e non maggiore di [code]max[/code].\n" "[codeblock]\n" -"speed = 1000\n" -"# a è 20\n" -"a = clamp(speed, 1, 20)\n" -"\n" -"speed = -10\n" -"# a è 1\n" -"a = clamp(speed, 1, 20)\n" +"a = clamp(1000, 1, 20) # a è 20\n" +"a = clamp(-10, 1, 20) # a è 1\n" +"a = clamp(15, 1, 20) # a è 15\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 @@ -381,7 +377,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -391,13 +386,11 @@ msgid "" msgstr "" "RItorna il coseno dell'angolo [code]s[/code] in radianti.\n" "[codeblock]\n" -"# Stampa 1 poi -1\n" -"print(cos(PI * 2))\n" -"print(cos(PI))\n" +"a = cos(TAU) # a è 1.0\n" +"a = cos(PI) # a è -1.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:201 -#, fuzzy msgid "" "Returns the hyperbolic cosine of [code]s[/code] in radians.\n" "[codeblock]\n" @@ -406,8 +399,7 @@ msgid "" msgstr "" "Ritorna il coseno iperbolico di [code]s[/code] in radianti.\n" "[codeblock]\n" -"# Stampa 1.543081\n" -"print(cosh(1))\n" +"print(cosh(1)) # Stampa 1.543081\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:211 @@ -416,10 +408,9 @@ msgstr "Converte da decibel a energia lineare (audio)." #: modules/gdscript/doc_classes/@GDScript.xml:218 msgid "Deprecated alias for [method step_decimals]." -msgstr "" +msgstr "Alias deprecato per [method step_decimals]." #: modules/gdscript/doc_classes/@GDScript.xml:227 -#, fuzzy msgid "" "[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in " "Godot 4.0, please use [method move_toward] instead.\n" @@ -429,11 +420,12 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" -"Restituisce il risultato di [code]valore[/code] diminuito di [code]step[/" -"code]*[code]quantità [/code].\n" +"[b]Nota bene:[/b] [code]dectime[/code] è oramai deprecato e verrà rimosso in " +"Godot 4.0, si prega invece di usare [method move_toward].\n" +"Ritorna il valore di [code]value[/code] diminuito di [code]step[/code] * " +"[code]amount[/code].\n" "[codeblock]\n" -"# a = 59\n" -"a = dectime(60, 10, 0.1))\n" +"a = dectime(60, 10, 0.1)) # a è 59.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:238 @@ -449,13 +441,12 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 -#, fuzzy msgid "" "Converts a dictionary (previously created with [method inst2dict]) back to " "an instance. Useful for deserializing." msgstr "" -"Converte un'istanza precedentemente convertita in un dizionario di nuovo in " -"un istanza. Utile per la deserializzazione." +"Riconverte un dizionario (precedentemente creato usando [method inst2dict]) " +"in una istanza. Utile per la deserializzazione." #: modules/gdscript/doc_classes/@GDScript.xml:256 msgid "" @@ -477,6 +468,23 @@ msgid "" "See also [method smoothstep]. If you need to perform more advanced " "transitions, use [Tween] or [AnimationPlayer]." msgstr "" +"Ritorna un valore \"allentato\" di [code]x[/code] basato su una funzione di " +"allentamento definita in [code]curve[/code]. Questa funzione è basata su un " +"esponente. L'argomento [code]curve[/code] può essere qualunque numero " +"decimale, con valori specifici che portano ai seguenti comportamenti:\n" +"[codeblock]\n" +"- Minore di -1.0 (exclusive): Ease in-out\n" +"- 1.0: Lineare\n" +"- Compreso tra -1.0 and 0.0 (non compresi): Ease out-in\n" +"- 0.0: Costante\n" +"- Compreso tra 0.0 to 1.0 (non compresi): Ease in\n" +"- 1.0: Lineare\n" +"- Maggiore di 1.0 (non compreso): Ease out\n" +"[/codeblock]\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" +"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" +"Vedi anche [method smoothstep]. Se hai bisogno di transizioni più avanzate, " +"usa [Tween] oppure [AnimationPlayer]." #: modules/gdscript/doc_classes/@GDScript.xml:274 msgid "" @@ -499,7 +507,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:286 -#, fuzzy msgid "" "Rounds [code]s[/code] downward (towards negative infinity), returning the " "largest whole number that is not more than [code]s[/code].\n" @@ -514,18 +521,18 @@ msgid "" "directly." msgstr "" "Arrotonda [code]s[/code] verso il basso (all'infinito negativo), restituendo " -"il più grande intero che è minore di [code]s[/code]\n" +"il più grande intero minore di [code]s[/code].\n" "[codeblock]\n" -"# a è 2.0\n" -"a = floor(2.99)\n" -"# a è -3.0\n" -"a = floor(-2.99)\n" +"a = floor(2.45) # a è 2.0\n" +"a = floor(2.99) # a è 2.0\n" +"a = floor(-2.99) # a è -3.0\n" "[/codeblock]\n" -"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero puoi " -"direttamente usare [code]int(s)[/code]." +"Vedi anche [method ceil], [method round], [method stepify], e [int].\n" +"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero e " +"[code]s[/code] è un numero non negativo, puoi direttamente usare [code]int(s)" +"[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:301 -#, fuzzy msgid "" "Returns the floating-point remainder of [code]a/b[/code], keeping the sign " "of [code]a[/code].\n" @@ -537,13 +544,11 @@ msgstr "" "Restituisce il resto in virgola mobile di [code]a/b[/code], mantenendo il " "segno di [code]a[/code].\n" "[codeblock]\n" -"# Il resto è 1.5\n" -"var resto = fmod(7, 5.5)\n" +"r = fmod(7, 5.5) # r è 1.5\n" "[/codeblock]\n" "Per l'operazione di resto intero, utilizzare l'operatore %." #: modules/gdscript/doc_classes/@GDScript.xml:313 -#, fuzzy msgid "" "Returns the floating-point modulus of [code]a/b[/code] that wraps equally in " "positive and negative.\n" @@ -566,24 +571,19 @@ msgstr "" "Restituisce il modulo in virgola mobile di [code]a/b[/code] che arrotonda " "ugualmente in positivo e negativo.\n" "[codeblock]\n" -"var i = -6\n" -"while i < 5:\n" -" prints(i, fposmod(i, 3))\n" -" i += 1\n" +"for i in 7:\n" +" var x = 0.5 * i - 1.5\n" +" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n" "[/codeblock]\n" "Produce:\n" "[codeblock]\n" -"-6 0\n" -"-5 1\n" -"-4 2\n" -"-3 0\n" -"-2 1\n" -"-1 2\n" -"0 0\n" -"1 1\n" -"2 2\n" -"3 0\n" -"4 1\n" +"-1.5 -0.0 0.0\n" +"-1.0 -1.0 0.5\n" +"-0.5 -0.5 1.0\n" +" 0.0 0.0 0.0\n" +" 0.5 0.5 0.5\n" +" 1.0 1.0 1.0\n" +" 1.5 0.0 0.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:336 @@ -772,7 +772,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml:453 msgid "" "Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value." -msgstr "Ritorna se[code]s[/code] è un valore NaN (Not-A-Number) o invalido." +msgstr "Ritorna se [code]s[/code] è un valore NaN (Not-A-Number) o invalido." #: modules/gdscript/doc_classes/@GDScript.xml:460 msgid "" @@ -793,18 +793,18 @@ msgid "" "len(a) # Returns 4\n" "[/codeblock]" msgstr "" -"Restituisce la lunghezza della variante [code]var[/code]. La lunghezza è il " -"conteggio dei caratteri della Stringa, il conteggio degli elementi " -"dell'Array, la dimensione del Dizionario, ecc.\n" -"[b]Nota:[/b] Genera un errore fatale se la Variante non può fornire una " -"lunghezza.\n" +"Restituisce la lunghezza della variabile Variant [code]var[/code]. La " +"lunghezza è il conteggio dei caratteri di una variabile String, il conteggio " +"degli elementi di una variabile Array, la dimensione di una variabile " +"Dizionario, ecc.\n" +"[b]Nota:[/b] Genera un errore fatale se la variable Variant non può fornire " +"una lunghezza.\n" "[codeblock]\n" "a = [1, 2, 3, 4]\n" "len(a) # Restituisce 4\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:482 -#, fuzzy msgid "" "Linearly interpolates between two values by a normalized value. This is the " "opposite of [method inverse_lerp].\n" @@ -818,13 +818,14 @@ msgid "" "lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n" "[/codeblock]" msgstr "" -"Interpola linearmente tra due valori con un valore normalizzato. Questo è " -"l'opposto di [method inverse_lerp].\n" -"Se gli argomenti [code]da [/code] e da [code]a[/code] sono di tipo [int] o " +"Interpola linearmente tra due valori mediante un valore normalizzato. Questo " +"metodo è l'opposto di [method inverse_lerp].\n" +"Se gli argomenti [code]from[/code] e [code]to[/code] sono di tipo [int] o " "[float], il valore di ritorno è un [float].\n" "Se entrambi sono dello stesso tipo di vettore ([Vector2], [Vector3] o " "[Color]), il valore di ritorno sarà dello stesso tipo ([code]lerp[/code] " -"quindi chiama il metodo [code]lerp[/code] del tipo vettore).\n" +"quindi chiama il metodo [code]linear_interpolate[/code] del vettore " +"utilizzato).\n" "[codeblock].\n" "lerp(0, 4, 0.75) # Restituisce 3.0\n" "lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Restituisce Vector2(2, 3.5)\n" @@ -889,7 +890,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:527 -#, fuzzy msgid "" "Loads a resource from the filesystem located at [code]path[/code]. The " "resource is loaded on the method call (unless it's referenced already " @@ -911,15 +911,16 @@ msgid "" "This method is a simplified version of [method ResourceLoader.load], which " "can be used for more advanced scenarios." msgstr "" -"Carica una risorsa dai file system che si trova su [code]path[/code]. La " -"risorsa è caricata nella chiamata del metodo (a meno che ci sia già un " -"riferimento in un altro punto, per esempio un altro script o nella scena), " -"che potrebbe causare un ritardo, specialmente quando si caricano le scene. " -"Per evitare ritardi non necessari quando si carica qualcosa più volte, o si " -"salva la risorsa in una variabile o si usa [method preload].\n" +"Carica una risorsa dai file system posizionata in [code]path[/code]. La " +"risorsa è caricata alla chiamata del metodo (a meno che non sia già " +"indirizzato altrove, per esempio in un altro script o nella scena). Ciò " +"potrebbe causare un ritardo, specialmente al caricamento delle scene. Per " +"evitare ritardi superflui in caso di molteplici caricamenti, salvare la " +"risorsa in una variabile o usare [method preload].\n" "[b]Nota:[/b] I percorsi delle risorse possono essere ottenuti cliccando con " -"il tasto destro su una risorsa nel riquadro File di sistema \"Copia percorso" -"\" o trascinando il file dal riquadro File di sistema nello script.\n" +"il tasto destro su una risorsa nel riquadro File di Sistema e scegliendo " +"\"Copia percorso\" o trascinando il file dal riquadro File di Sistema nello " +"script.\n" "[codeblock]\n" "# Carica una scena chiamata main che si trova alla radice della cartella di " "progetto e salvala temporaneamente in una variabile.\n" @@ -927,7 +928,9 @@ msgstr "" "PackedScene.\n" "[/codeblock]\n" "[b]Importante:[/b] Il percorso deve essere assoluto, un percorso locale " -"ritornerà [code]null[/code]." +"ritornerà [code]null[/code].\n" +"Questo metodo è una versione semplificata di [method ResourceLoader.load], " +"che può essere usata in casi più avanzati." #: modules/gdscript/doc_classes/@GDScript.xml:541 msgid "" @@ -1056,7 +1059,6 @@ msgstr "" "Questo metodo è l'opposto di [method char]." #: modules/gdscript/doc_classes/@GDScript.xml:622 -#, fuzzy msgid "" "Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's " "type is what you expect.)\n" @@ -1076,15 +1078,15 @@ msgid "" "[/codeblock]\n" "See also [JSON] for an alternative way to parse JSON text." msgstr "" -"Converte una stringa JSON in Variant. (Usa [method typeof] per controllare " -"se la tipologia di Variant è quella prevista)\n" -"[b]Nota:[/b] La specifica JSON non presenta tipi integer o float, ma solo " +"Converte una stringa JSON in una variabile Variant. (Usa [method typeof] per " +"controllare se la tipologia di Variant è quella prevista.)\n" +"[b]Nota:[/b] La specifica JSON non definisce tipi integer o float, ma solo " "tipi [i]number[/i]. Perciò convertire una stringa JSON convertirà tutti i " "valori numerici in [float].\n" "[b]Nota:[/b] Gli oggetti JSON non mantengono l'ordinamento delle chiavi come " -"i dictionary Godot, quindi non dovresti dare per scontato che le chiavi " -"siano in un certo ordine se un dictionary è stato costruito da JSON. Al " -"contrario, gli array JSON mantengono l'ordine degli elementi.\n" +"i tipi Dictionary di Godot, quindi non si deve assumere che le chiavi siano " +"in un certo ordine se una variabile Dictionary è stata generata da JSON. Al " +"contrario, gli array JSON mantengono l'ordine degli elementi:\n" "[codeblock]\n" "var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n" "if typeof(p.result) == TYPE_ARRAY:\n" @@ -1204,6 +1206,16 @@ msgid "" "distinguishes them from print messages used for debugging purposes, while " "also displaying a stack trace when an error or warning is printed." msgstr "" +"Converte uno o più argomenti di qualunque tipo in una striga e li stampa " +"nella console.\n" +"[codeblock]\n" +"a = [1, 2, 3]\n" +"print(\"a\", \"=\", a) # Stampa a=[1, 2, 3]\n" +"[/codeblock]\n" +"[b]Nota:[/b] Valuta l'utilizzo di [method push_error] e [method " +"push_warning] per stampare messaggi di errore e di warning invece di " +"utilizzare [method print]. Questa scelta permette di distinguerli dai " +"messaggi di debug ed errore che vengono mostrati con la stack trace." #: modules/gdscript/doc_classes/@GDScript.xml:702 msgid "Like [method print], but prints only when used in debug mode." @@ -1212,7 +1224,6 @@ msgstr "" "debug." #: modules/gdscript/doc_classes/@GDScript.xml:708 -#, fuzzy msgid "" "Prints a stack track at code location, only works when running with debugger " "turned on.\n" @@ -1221,15 +1232,14 @@ msgid "" "Frame 0 - res://test.gd:16 in function '_process'\n" "[/codeblock]" msgstr "" -"Stampa un stack trace nella nel codice, funziona solo quando il debugger è " -"acceso.\n" +"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:718 -#, fuzzy msgid "" "Prints one or more arguments to strings in the best way possible to standard " "error line.\n" @@ -1238,7 +1248,7 @@ msgid "" "[/codeblock]" msgstr "" "Stampa uno o più argomenti come stringhe nella migliore maniera possibile " -"per standardizzare la linea dell'errore.\n" +"sullo standard error.\n" "[codeblock]\n" "printerr(\"prints to stderr\")\n" "[/codeblock]" @@ -1295,7 +1305,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:758 -#, fuzzy msgid "" "Pushes an error message to Godot's built-in debugger and to the OS " "terminal.\n" @@ -1312,7 +1321,10 @@ msgstr "" "[codeblock]\n" "push_error(\"errore di prova\") # Stampa \"errore di prova\" al debugger e " "al terminale con una error call\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Nota:[/b] Questo tipo di stampa degli errori non interrompe l'esecuzione. " +"Per stampare un messaggio d'errore e interrompere l'esecuzione nelle build " +"di debug, è necessario adoperare [code]assert(false, \"test error\")[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:769 msgid "" @@ -1344,7 +1356,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:790 -#, fuzzy msgid "" "Random range, any floating point value between [code]from[/code] and " "[code]to[/code].\n" @@ -1352,11 +1363,10 @@ msgid "" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" "[/codeblock]" msgstr "" -"Un range casuale, un qualsiasi numero con la virgola tra [code]from[/code] e " -"[code]to[/code]\n" +"Un range casuale, un qualsiasi numero in virgola mobile tra [code]from[/" +"code] e [code]to[/code]\n" "[codeblock]\n" -"prints(rand_range(0, 1), rand_range(0, 1)) # Per esempio stampa 0.135591 " -"0.405263\n" +"prints(rand_range(0, 1), rand_range(0, 1)) # Stampa 0.135591 0.405263\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:800 @@ -1366,6 +1376,11 @@ msgid "" "pseudo random number generator. The internal state of the current " "implementation is 64 bits." msgstr "" +"Genera un numero pseudocasuale da un seed: fornendo un [code]seed[/code], " +"viene restituito un array contenente sia il valore pseudocasuale generato " +"che il nuovo sedd. Con \"Seed\" si intente un valore adoperato internamente " +"dal generatore di valori pseudocasuali. La gestione di tale valore è a 64 " +"bits." #: modules/gdscript/doc_classes/@GDScript.xml:806 msgid "" @@ -1374,6 +1389,11 @@ msgid "" "randf() # Returns e.g. 0.375671\n" "[/codeblock]" msgstr "" +"Restituisce un numero casuale in virgola mobile nell'intervallo [code][0, 1]" +"[/code].\n" +"[codeblock]\n" +"randf() # Restituisce ad esempio 0.375671\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:815 msgid "" @@ -1387,6 +1407,15 @@ msgid "" "randi() % 100 + 1 # Returns random integer between 1 and 100\n" "[/codeblock]" msgstr "" +"Restituisce un numero intero unsigned pseudocasuale di 32-bit. Adoperando " +"l'operatore modulo/resto è possibile generare valori nell'intervallo [code]" +"[0, N - 1][/code] (dove N è minore di 2^32).\n" +"[codeblock]\n" +"randi() # Restituisce un intero pseudocasuale tra 0 e 2^32 - 1\n" +"randi() % 20 # Restituisce un intero pseudocasuale tra 0 e 19\n" +"randi() % 100 # Restituisce un intero pseudocasuale tra 0 e 99\n" +"randi() % 100 + 1 # Restituisce un intero pseudocasuale tra 1 e 100\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:827 msgid "" @@ -1397,6 +1426,13 @@ msgid "" " randomize()\n" "[/codeblock]" msgstr "" +"Randomizza il seed (o lo stato interno) di un generatore di numeri " +"pseudocasuali. L'implementazione attuale adopera un numero basato sul tempo " +"per randomizzarlo nuovamente.\n" +"[codeblock]\n" +"func _ready():\n" +" randomize()\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:837 msgid "" @@ -1448,9 +1484,13 @@ msgid "" "range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n" "[/codeblock]" msgstr "" +"Effettua una mappatura di un valore [code]value[/code] da un intervallo " +"[code][istart, istop][/code] in [code][ostart, ostop][/code].\n" +"[codeblock]\n" +"range_lerp(75, 0, 100, -1, 1) # Restituisce 0.5\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:884 -#, fuzzy msgid "" "Rounds [code]s[/code] to the nearest whole number, with halfway cases " "rounded away from zero.\n" @@ -1464,8 +1504,11 @@ msgstr "" "Arrotonda il risultato di [code]s[/code] al più vicino numero intero, e per " "eccesso nei casi equidistanti.\n" "[codeblock]\n" -"round(2.6) # Ritorna 32\n" -"[/codeblock]" +"a = round(2.49) # a assume il valore 2.0\n" +"a = round(2.5) # a assume il valore 3.0\n" +"a = round(2.51) # a assume il valore 3.0\n" +"[/codeblock]\n" +"Consulta inoltre [method floor], [method ceil], [method stepify], e [int]." #: modules/gdscript/doc_classes/@GDScript.xml:897 msgid "" @@ -1475,6 +1518,11 @@ msgid "" "seed(my_seed.hash())\n" "[/codeblock]" msgstr "" +"Imposta il seed per il generatore di numeri casuali.\n" +"[codeblock]\n" +"my_seed = \"Godot Rocks\"\n" +"seed(my_seed.hash())\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:908 msgid "" @@ -1486,6 +1534,13 @@ msgid "" "sign(6) # Returns 1\n" "[/codeblock]" msgstr "" +"Restituisce il segno di un valore [code]s[/code]: -1 o 1 per indicare se il " +"valore è < o > di 0 rispettivamente. Restituisce 0 se [code]s[/code] è 0.\n" +"[codeblock]\n" +"sign(-6) # Restituisce -1\n" +"sign(0) # Restituisce 0\n" +"sign(6) # Restituisce 1\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:920 msgid "" @@ -1494,6 +1549,10 @@ msgid "" "sin(0.523599) # Returns 0.5\n" "[/codeblock]" msgstr "" +"Restituisce il seno dell'angolo [code]s[/code] in radianti.\n" +"[codeblock]\n" +"sin(0.523599) # Restituisce 0.5\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:930 msgid "" @@ -1503,6 +1562,11 @@ msgid "" "sinh(a) # Returns 0.75\n" "[/codeblock]" msgstr "" +"Restituisce il seno iperbolico di [code]s[/code].\n" +"[codeblock]\n" +"a = log(2.0) # Restituisce 0.693147\n" +"sinh(a) # Restituisce 0.75\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:943 msgid "" @@ -1540,6 +1604,14 @@ msgid "" "[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need " "negative inputs, use [code]System.Numerics.Complex[/code] in C#." msgstr "" +"Restituisce la radice quadrata di [code]s[/code], dove [code]s[/code] è un " +"numero non negativo.\n" +"[codeblock]\n" +"sqrt(9) # Restituisce 3\n" +"[/codeblock]\n" +"[b]Nota:[/b] Adoperando valori negativi [code]s[/code] viene restituito NaN. " +"Se è necessario adoperare valori negativi è suggerito l'utilizzo di " +"[code]System.Numerics.Complex[/code] in C#." #: modules/gdscript/doc_classes/@GDScript.xml:971 msgid "" @@ -1552,6 +1624,14 @@ msgid "" "n = step_decimals(0.000000005) # n is 9\n" "[/codeblock]" msgstr "" +"Restituisce la posizione della prima cifra diversa da zero dopo il " +"separatore decimale. Il massimo valore restituito è 10, dovuto ad una scelta " +"implementativa.\n" +"[codeblock]\n" +"n = step_decimals(5) # n è 0\n" +"n = step_decimals(1.0005) # n è 4\n" +"n = step_decimals(0.000000005) # n è 9\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:984 msgid "" @@ -1594,6 +1674,13 @@ msgid "" "print(b[\"a\"]) # Prints 1\n" "[/codeblock]" msgstr "" +"Converte una stringa formattata restituita da [method var2str] nel valore " +"originale.\n" +"[codeblock]\n" +"a = '{ \"a\": 1, \"b\": 2 }'\n" +"b = str2var(a)\n" +"print(b[\"a\"]) # Stampa 1\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1020 msgid "" @@ -1602,6 +1689,10 @@ msgid "" "tan(deg2rad(45)) # Returns 1\n" "[/codeblock]" msgstr "" +"Restituisce la tangente dell'angolo [code]s[/code] in radianti.\n" +"[codeblock]\n" +"tan(deg2rad(45)) # Restituisce 1\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1030 #, fuzzy @@ -1635,6 +1726,22 @@ msgid "" "text will convert all numerical values to [float] types.\n" "See also [JSON] for an alternative way to convert a [Variant] to JSON text." msgstr "" +"Converte una [Variant] [code]var[/code] in un testo in formato JSON e lo " +"restituisce. È utile per serializzare dei dati per memorizzarli su un " +"dispositivo o inviarli attraverso la rete.\n" +"[codeblock]\n" +"# Entrambi i numeri sono interi.\n" +"a = { \"a\": 1, \"b\": 2 }\n" +"b = to_json(a)\n" +"print(b) # {\"a\":1, \"b\":2}\n" +"# Entrambi i numeri sono float, anche se mostrati senza valore decimale.\n" +"[/codeblock]\n" +"[b]Nota:[/b] Le specifiche del formato JSON non fanno distinzione tra interi " +"e float, ma descrivono solo un tipo numerico [i]number[/i]. Per tale motivo, " +"convertire [Variant] in JSON effettuerà automaticamente la conversione dei " +"valori da interi a [float].\n" +"Consulta [JSON] per valutare le possibilità per effettuare la conversione di " +"[Variant] in testo in formato JSON." #: modules/gdscript/doc_classes/@GDScript.xml:1057 msgid "" @@ -1644,6 +1751,12 @@ msgid "" "type_exists(\"Variant\") # Returns false\n" "[/codeblock]" msgstr "" +"Restituisce un booleano per confermare o no se una particolare classe è " +"disponibile [ClassDB].\n" +"[codeblock]\n" +"type_exists(\"Sprite\") # Restituisce true\n" +"type_exists(\"Variant\") # Restituisce false\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1068 msgid "" @@ -1671,6 +1784,16 @@ msgid "" " push_error(\"Invalid JSON: \" + v)\n" "[/codeblock]" msgstr "" +"Controlla che [code]json[/code] sia un dato JSON valido. Restituisce una " +"stringa vuota in caso affermativo, un errore altrimenti.\n" +"[codeblock]\n" +"j = to_json([1, 2, 3])\n" +"v = validate_json(j)\n" +"if not v:\n" +" print(\"Valid JSON.\")\n" +"else:\n" +" push_error(\"Invalid JSON: \" + v)\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1098 msgid "" @@ -1678,6 +1801,9 @@ msgid "" "[code]true[/code] encoding objects is allowed (and can potentially include " "code)." msgstr "" +"Converte una variabile in un array di byte. Quando il parametro " +"[code]full_objects[/code] è [code]true[/code] è possibile convertire istanze " +"di classi (incluso il codice presente)." #: modules/gdscript/doc_classes/@GDScript.xml:1105 msgid "" @@ -1695,6 +1821,19 @@ msgid "" "}\n" "[/codeblock]" msgstr "" +"Converte una Variant [code]var[/code] in una stringa formattata che può " +"essere successivamente processata adoperando [method str2var].\n" +"[codeblock]\n" +"a = { \"a\": 1, \"b\": 2 }\n" +"print(var2str(a))\n" +"[/codeblock]\n" +"prints\n" +"[codeblock]\n" +"{\n" +"\"a\": 1,\n" +"\"b\": 2\n" +"}\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:1123 msgid "" @@ -1705,6 +1844,12 @@ msgid "" "something else. However, until the object is actually destroyed the weak " "reference may return the object even if there are no strong references to it." msgstr "" +"Restituisce un riferimento debole/weak ad un oggetto.\n" +"Un riferimento debole/weak non è sufficiente per mantenerlo in vita: se è " +"l'unico riferimento rimasto il garbage collector è autorizzato a deallocarlo " +"in un qualunque momento. Comunque, finché non sarà deallocato, tale " +"riferimento consentirà di adoperare l'oggetto anche se non fossero presenti " +"riferimenti forti/strong ad esso." #: modules/gdscript/doc_classes/@GDScript.xml:1133 msgid "" @@ -1747,6 +1892,22 @@ msgid "" "[code]wrapi[/code] is more flexible than using the [method posmod] approach " "by giving the user control over the minimum value." msgstr "" +"Limita un valore intero [code]value[/code] tra [code]min[/code] e [code]max[/" +"code].\n" +"È utilizzabile per creare comportamenti in loop o superfici infinite.\n" +"[codeblock]\n" +"# Ciclo infinito tra 5 e 9\n" +"frame = wrapi(frame + 1, 5, 10)\n" +"[/codeblock]\n" +"[codeblock]\n" +"# Viene restituito -2\n" +"var result = wrapi(-6, -5, -1)\n" +"[/codeblock]\n" +"[b]Nota:[/b] Se [code]min[/code] è [code]0[/code], è equivalente ad " +"utilizzare [method posmod], in tal caso si suggerisce di adoperare " +"quest'ultimo.\n" +"[code]wrapi[/code] è più utile rispetto a [method posmod] quando è " +"necessario impostare anche il valore minimo." #: modules/gdscript/doc_classes/@GDScript.xml:1176 msgid "" @@ -1792,18 +1953,62 @@ msgid "" "[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), " "\"idle_frame\")[/code] from the above example." msgstr "" +"Interrompe l'esecuzione della funzione e ne restituisce lo stato attuale.\n" +"Basta invocare [method GDScriptFunctionState.resume] su tale stato per far " +"riprendere l'esecuzione. Questa operazione invalida lo stato. All'interno " +"della funzione [code]yield()[/code] restituisce cosa è stato passato alla " +"funzione [code]resume()[/code] .\n" +"Il ripristino della funzione, quando viene passato un oggetto e un segnale, " +"avviene quando l'oggetto invia tale segnale. In tal caso, [code]yield()[/" +"code] restituisce il valore passato a [code]emit_signal()[/code] se il " +"segnale accetta un solo un parametro, oppure un array di tutti i parametri " +"passati a [code]emit_signal()[/code].\n" +"You can also use [code]yield[/code] to wait for a function to finish:\n" +"[codeblock]\n" +"func _ready():\n" +" yield(countdown(), \"completed\") # attendi che countdown() termini\n" +" print('Ready')\n" +"\n" +"func countdown():\n" +" yield(get_tree(), \"idle_frame\") # restituisce un GDScriptFunctionState " +"object to _ready()\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" +"# Stampa:\n" +"# 3\n" +"# 2\n" +"# 1\n" +"# Ready\n" +"[/codeblock]\n" +"Quando si utilizza yield su una funzione viene emesso il segnale " +"[code]completed[/code] automaticamente quanto la funzione termina. Può " +"essere inoltre adoperata come parametro [code]signal[/code] del metodo " +"[code]yield[/code] per ripristinarne lo stato.\n" +"Per adoperare yield su una funzione, è necessario che questa restituisca un " +"[code]GDScriptFunctionState[/code]. Nota tale comportamento relativamente " +"alla riga di codice [code]yield(get_tree(), \"idle_frame\")[/code] ." #: modules/gdscript/doc_classes/@GDScript.xml:1207 msgid "" "Constant that represents how many times the diameter of a circle fits around " "its perimeter. This is equivalent to [code]TAU / 2[/code]." msgstr "" +"Constante che indica il rapporto tra diametro del cerchio e perimetro. This " +"is equivalent to [code]TAU / 2[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:1210 msgid "" "The circle constant, the circumference of the unit circle in radians. This " "is equivalent to [code]PI * 2[/code], or 360 degrees in rotations." msgstr "" +"Lunghezza della circonferenza del cerchio di raggio unitario in radianti " +"(Circonferenza = Pi * diametro). È equivalente a [code]PI * 2[/code], " +"equivalente a 360°." #: modules/gdscript/doc_classes/@GDScript.xml:1213 msgid "" @@ -1831,6 +2036,15 @@ msgid "" "[code]0[/code] will not result in [constant NAN] and will result in a run-" "time error instead." msgstr "" +"\"Not a Number\", indica un valore in virgola mobile non valido. [constant " +"NAN] ha proprietà particolari, ad esempio non è uguale a se stesso " +"([code]NAN == NAN[/code] restituisce [code]false[/code]). E restituito in " +"caso di operazioni non valide, come ad la una divisione del numero in " +"virgola mobile [code]0.0[/code] per [code]0.0[/code].\n" +"[b]Nota:[/b] \"Not a Number\" è correlato solo ad operazioni su numeri con " +"virgola mobile, non ha quindi un corrispettivo per gli interi. La divisione " +"dell'intero [code]0[/code] per [code]0[/code] non produrrà un [constant NAN] " +"ma genererà un errore run-time." #: doc/classes/@GlobalScope.xml:4 msgid "Global scope constants and variables." @@ -1846,136 +2060,148 @@ msgstr "" #: doc/classes/@GlobalScope.xml:16 msgid "The [ARVRServer] singleton." -msgstr "" +msgstr "Il singleton [ARVRServer]." #: doc/classes/@GlobalScope.xml:19 msgid "The [AudioServer] singleton." -msgstr "" +msgstr "Il singleton [AudioServer]." #: doc/classes/@GlobalScope.xml:22 msgid "The [CameraServer] singleton." -msgstr "" +msgstr "Il singleton [CameraServer]." #: doc/classes/@GlobalScope.xml:25 msgid "The [ClassDB] singleton." -msgstr "" +msgstr "Il singleton [ClassDB]." #: doc/classes/@GlobalScope.xml:28 msgid "The [Engine] singleton." -msgstr "" +msgstr "Il singleton [Engine]." #: doc/classes/@GlobalScope.xml:31 msgid "The [Geometry] singleton." -msgstr "" +msgstr "Il singleton [Geometry]." #: doc/classes/@GlobalScope.xml:34 msgid "The [IP] singleton." -msgstr "" +msgstr "Il singleton [IP]." #: doc/classes/@GlobalScope.xml:37 msgid "The [Input] singleton." -msgstr "" +msgstr "Il singleton [Input]." #: doc/classes/@GlobalScope.xml:40 msgid "The [InputMap] singleton." -msgstr "" +msgstr "Il singleton [InputMap]." #: doc/classes/@GlobalScope.xml:43 msgid "The [JSON] singleton." -msgstr "" +msgstr "Il singleton [JSON]." #: doc/classes/@GlobalScope.xml:46 msgid "" "The [JavaClassWrapper] singleton.\n" "[b]Note:[/b] Only implemented on Android." msgstr "" +"Il singleton [JavaClassWrapper].\n" +"[b]Note:[/b] Disponibile solo per Android." #: doc/classes/@GlobalScope.xml:50 msgid "" "The [JavaScript] singleton.\n" "[b]Note:[/b] Only implemented on HTML5." msgstr "" +"Il singleton [JavaScript].\n" +"[b]Note:[/b] Disponibile solo per HTML5." #: doc/classes/@GlobalScope.xml:54 msgid "The [Marshalls] singleton." -msgstr "" +msgstr "Il singleton [Marshalls]." #: doc/classes/@GlobalScope.xml:57 msgid "The [EditorNavigationMeshGenerator] singleton." -msgstr "" +msgstr "Il singleton [EditorNavigationMeshGenerator]." #: doc/classes/@GlobalScope.xml:60 msgid "The [OS] singleton." -msgstr "" +msgstr "Il singleton [OS]." #: doc/classes/@GlobalScope.xml:63 msgid "The [Performance] singleton." -msgstr "" +msgstr "Il singleton [Performance]." #: doc/classes/@GlobalScope.xml:66 msgid "The [Physics2DServer] singleton." -msgstr "" +msgstr "Il singleton [Physics2DServer]." #: doc/classes/@GlobalScope.xml:69 msgid "The [PhysicsServer] singleton." -msgstr "" +msgstr "Il singleton [PhysicsServer]." #: doc/classes/@GlobalScope.xml:72 msgid "The [ProjectSettings] singleton." -msgstr "" +msgstr "Il singleton [ProjectSettings]." #: doc/classes/@GlobalScope.xml:75 msgid "The [ResourceLoader] singleton." -msgstr "" +msgstr "Il singleton [ResourceLoader]." #: doc/classes/@GlobalScope.xml:78 msgid "The [ResourceSaver] singleton." -msgstr "" +msgstr "Il singleton [ResourceSaver]." #: doc/classes/@GlobalScope.xml:81 msgid "The [TranslationServer] singleton." -msgstr "" +msgstr "Il singleton [TranslationServer]." #: doc/classes/@GlobalScope.xml:84 msgid "The [VisualScriptEditor] singleton." -msgstr "" +msgstr "Il singleton [VisualScriptEditor]." #: doc/classes/@GlobalScope.xml:87 msgid "The [VisualServer] singleton." -msgstr "" +msgstr "Il singleton [VisualServer]." #: doc/classes/@GlobalScope.xml:92 msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes." msgstr "" +"Margine sinistro, generalmente adoperato nelle classi figlie di [Control] " +"oppure [StyleBox]." #: doc/classes/@GlobalScope.xml:95 msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes." msgstr "" +"Margine superiore, generalmente adoperato nelle classi figlie di [Control] o " +"[StyleBox]." #: doc/classes/@GlobalScope.xml:98 msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes." msgstr "" +"Margine destro, generalmente adoperato nelle classi figlie di [Control] o " +"[StyleBox]." #: doc/classes/@GlobalScope.xml:101 msgid "" "Bottom margin, usually used for [Control] or [StyleBox]-derived classes." msgstr "" +"Margine inferiore, generalmente adoperato nelle classi figlie di [Control] o " +"[StyleBox]." #: doc/classes/@GlobalScope.xml:104 msgid "Top-left corner." -msgstr "" +msgstr "Angolo superiore-sinistro." #: doc/classes/@GlobalScope.xml:107 msgid "Top-right corner." -msgstr "" +msgstr "Angolo superiore-destro." #: doc/classes/@GlobalScope.xml:110 msgid "Bottom-right corner." -msgstr "" +msgstr "Angolo inferiore-destro." #: doc/classes/@GlobalScope.xml:113 msgid "Bottom-left corner." -msgstr "" +msgstr "Angolo inferiore-sinistro." #: doc/classes/@GlobalScope.xml:116 msgid "" @@ -2019,43 +2245,43 @@ msgstr "" #: doc/classes/@GlobalScope.xml:143 msgid "Escape key." -msgstr "" +msgstr "Tasto ESC/Escape." #: doc/classes/@GlobalScope.xml:146 msgid "Tab key." -msgstr "" +msgstr "Tasto TAB/Tabulazione." #: doc/classes/@GlobalScope.xml:149 msgid "Shift+Tab key." -msgstr "" +msgstr "Tasto SHIFT+TAB." #: doc/classes/@GlobalScope.xml:152 msgid "Backspace key." -msgstr "" +msgstr "Tasto backspace." #: doc/classes/@GlobalScope.xml:155 msgid "Return key (on the main keyboard)." -msgstr "" +msgstr "Tasto return/invio (sulla tastiera principale)." #: doc/classes/@GlobalScope.xml:158 msgid "Enter key on the numeric keypad." -msgstr "" +msgstr "Tasto return/enter sul tastierino numerico." #: doc/classes/@GlobalScope.xml:161 msgid "Insert key." -msgstr "" +msgstr "Tasto INS/inserisci." #: doc/classes/@GlobalScope.xml:164 msgid "Delete key." -msgstr "" +msgstr "Tasto DEL/Canc." #: doc/classes/@GlobalScope.xml:167 msgid "Pause key." -msgstr "" +msgstr "Tasto Pausa/Pause." #: doc/classes/@GlobalScope.xml:170 msgid "Print Screen key." -msgstr "" +msgstr "Tasto Stamp/Print Screen." #: doc/classes/@GlobalScope.xml:173 msgid "System Request key." @@ -2063,63 +2289,63 @@ msgstr "" #: doc/classes/@GlobalScope.xml:176 msgid "Clear key." -msgstr "" +msgstr "Tasto Clear/Delete/Del." #: doc/classes/@GlobalScope.xml:179 msgid "Home key." -msgstr "" +msgstr "Tasto Home/Inizio." #: doc/classes/@GlobalScope.xml:182 msgid "End key." -msgstr "" +msgstr "Tasto End/Fine." #: doc/classes/@GlobalScope.xml:185 msgid "Left arrow key." -msgstr "" +msgstr "Freccia cursore a sinistra." #: doc/classes/@GlobalScope.xml:188 msgid "Up arrow key." -msgstr "" +msgstr "Freccia cursore alta." #: doc/classes/@GlobalScope.xml:191 msgid "Right arrow key." -msgstr "" +msgstr "Freccia cursore destra." #: doc/classes/@GlobalScope.xml:194 msgid "Down arrow key." -msgstr "" +msgstr "Freccia cursore in basso." #: doc/classes/@GlobalScope.xml:197 msgid "Page Up key." -msgstr "" +msgstr "Tasto Page Up/Page ^." #: doc/classes/@GlobalScope.xml:200 msgid "Page Down key." -msgstr "" +msgstr "Tasto Page Up/Page v." #: doc/classes/@GlobalScope.xml:203 msgid "Shift key." -msgstr "" +msgstr "Tasto Shift/Maiuscola." #: doc/classes/@GlobalScope.xml:206 msgid "Control key." -msgstr "" +msgstr "Tasto Control/CTRL." #: doc/classes/@GlobalScope.xml:209 msgid "Meta key." -msgstr "" +msgstr "Tasto Meta/Command." #: doc/classes/@GlobalScope.xml:212 msgid "Alt key." -msgstr "" +msgstr "Tasto Alt." #: doc/classes/@GlobalScope.xml:215 msgid "Caps Lock key." -msgstr "" +msgstr "Tasto Caps Lock/Blocco maiuscole." #: doc/classes/@GlobalScope.xml:218 msgid "Num Lock key." -msgstr "" +msgstr "Tasto Num Lock/Bloc num." #: doc/classes/@GlobalScope.xml:221 msgid "Scroll Lock key." @@ -2127,135 +2353,135 @@ msgstr "" #: doc/classes/@GlobalScope.xml:224 msgid "F1 key." -msgstr "" +msgstr "Tasto F1." #: doc/classes/@GlobalScope.xml:227 msgid "F2 key." -msgstr "" +msgstr "Tasto F2." #: doc/classes/@GlobalScope.xml:230 msgid "F3 key." -msgstr "" +msgstr "Tasto F3." #: doc/classes/@GlobalScope.xml:233 msgid "F4 key." -msgstr "" +msgstr "Tasto F4." #: doc/classes/@GlobalScope.xml:236 msgid "F5 key." -msgstr "" +msgstr "Tasto F5." #: doc/classes/@GlobalScope.xml:239 msgid "F6 key." -msgstr "" +msgstr "Tasto F6." #: doc/classes/@GlobalScope.xml:242 msgid "F7 key." -msgstr "" +msgstr "Tasto F7." #: doc/classes/@GlobalScope.xml:245 msgid "F8 key." -msgstr "" +msgstr "Tasto F8." #: doc/classes/@GlobalScope.xml:248 msgid "F9 key." -msgstr "" +msgstr "Tasto F9." #: doc/classes/@GlobalScope.xml:251 msgid "F10 key." -msgstr "" +msgstr "Tasto F10." #: doc/classes/@GlobalScope.xml:254 msgid "F11 key." -msgstr "" +msgstr "Tasto F11." #: doc/classes/@GlobalScope.xml:257 msgid "F12 key." -msgstr "" +msgstr "Tasto F12." #: doc/classes/@GlobalScope.xml:260 msgid "F13 key." -msgstr "" +msgstr "Tasto F13." #: doc/classes/@GlobalScope.xml:263 msgid "F14 key." -msgstr "" +msgstr "Tasto F14." #: doc/classes/@GlobalScope.xml:266 msgid "F15 key." -msgstr "" +msgstr "Tasto F15." #: doc/classes/@GlobalScope.xml:269 msgid "F16 key." -msgstr "" +msgstr "Tasto F16." #: doc/classes/@GlobalScope.xml:272 msgid "Multiply (*) key on the numeric keypad." -msgstr "" +msgstr "Tasto */ Moltiplica sul tastierino numerico." #: doc/classes/@GlobalScope.xml:275 msgid "Divide (/) key on the numeric keypad." -msgstr "" +msgstr "Tasto '/' / divisione sul tastierino numerico." #: doc/classes/@GlobalScope.xml:278 msgid "Subtract (-) key on the numeric keypad." -msgstr "" +msgstr "Tasto - / Sottrazione sul tastierino numerico." #: doc/classes/@GlobalScope.xml:281 msgid "Period (.) key on the numeric keypad." -msgstr "" +msgstr "Tasto . sul tastierino numerico." #: doc/classes/@GlobalScope.xml:284 msgid "Add (+) key on the numeric keypad." -msgstr "" +msgstr "Tasto +/ Somma sul tastierino numerico." #: doc/classes/@GlobalScope.xml:287 msgid "Number 0 on the numeric keypad." -msgstr "" +msgstr "Numero 0 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:290 msgid "Number 1 on the numeric keypad." -msgstr "" +msgstr "Numero 1 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:293 msgid "Number 2 on the numeric keypad." -msgstr "" +msgstr "Numero 2 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:296 msgid "Number 3 on the numeric keypad." -msgstr "" +msgstr "Numero 3 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:299 msgid "Number 4 on the numeric keypad." -msgstr "" +msgstr "Numero 4 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:302 msgid "Number 5 on the numeric keypad." -msgstr "" +msgstr "Numero 5 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:305 msgid "Number 6 on the numeric keypad." -msgstr "" +msgstr "Numero 6 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:308 msgid "Number 7 on the numeric keypad." -msgstr "" +msgstr "Numero 7 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:311 msgid "Number 8 on the numeric keypad." -msgstr "" +msgstr "Numero 8 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:314 msgid "Number 9 on the numeric keypad." -msgstr "" +msgstr "Numero 9 sul tastierino numerico." #: doc/classes/@GlobalScope.xml:317 msgid "Left Super key (Windows key)." -msgstr "" +msgstr "Tasto 'Windows' sinistro." #: doc/classes/@GlobalScope.xml:320 msgid "Right Super key (Windows key)." -msgstr "" +msgstr "Tasto 'Windows' destro." #: doc/classes/@GlobalScope.xml:323 msgid "Context menu key." @@ -4134,112 +4360,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5318,7 +5553,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10737,17 +10972,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10756,24 +10995,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10787,62 +11026,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10850,35 +11089,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10886,13 +11125,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10904,78 +11143,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Restituisce l'arco-tangente dei parametri." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11431,8 +11670,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25491,21 +25733,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25514,14 +25767,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25531,36 +25788,36 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." @@ -25568,46 +25825,46 @@ msgstr "" "Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento " "è disabilitato." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29843,7 +30100,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -31160,7 +31419,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31225,22 +31485,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31255,7 +31517,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31263,19 +31525,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31346,7 +31608,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31404,7 +31667,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34963,7 +35228,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -38283,7 +38548,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38313,14 +38578,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38330,7 +38595,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40848,17 +41113,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40876,11 +41167,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -41075,7 +41366,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41878,6 +42171,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41895,7 +42206,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -42009,7 +42320,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44556,24 +44869,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44583,7 +44902,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44593,27 +44912,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44621,81 +44940,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44703,109 +45022,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44816,91 +45135,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44909,13 +45228,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44925,7 +45244,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44933,19 +45252,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44959,45 +45278,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -45006,7 +45325,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -45017,7 +45336,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -45033,14 +45352,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -45048,49 +45367,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -45099,7 +45418,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45107,7 +45426,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45115,7 +45434,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45125,7 +45444,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -45134,7 +45453,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -45143,7 +45462,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45153,7 +45472,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45161,7 +45480,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -45171,7 +45490,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -45181,7 +45500,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45189,7 +45508,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -45198,7 +45517,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45206,7 +45525,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -45218,477 +45537,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45696,92 +46015,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45791,33 +46110,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45830,7 +46149,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45842,7 +46161,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45854,7 +46173,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45867,7 +46186,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45875,28 +46194,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45906,25 +46225,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45937,7 +46256,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45949,7 +46268,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45961,7 +46280,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45974,13 +46293,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45988,11 +46307,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -46006,7 +46325,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -46015,7 +46334,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -46031,7 +46350,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -46041,7 +46360,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46051,7 +46370,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -46062,7 +46381,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46072,7 +46391,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -46080,7 +46399,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -46091,7 +46410,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -46106,7 +46425,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -46115,13 +46434,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -46130,7 +46449,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -46140,7 +46459,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -46152,7 +46471,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -46162,24 +46481,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -46188,7 +46507,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -46196,7 +46515,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -46205,7 +46524,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -46215,7 +46534,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -46223,31 +46542,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46255,7 +46574,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46265,21 +46584,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46287,31 +46606,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46319,7 +46638,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46329,7 +46648,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46338,7 +46657,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46347,20 +46666,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46369,7 +46688,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46377,7 +46696,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46386,7 +46705,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46396,20 +46715,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46418,13 +46737,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46434,46 +46753,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46483,7 +46802,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46495,7 +46814,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46503,7 +46822,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46511,7 +46830,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46520,7 +46839,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46534,7 +46853,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46544,7 +46863,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46553,7 +46872,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46563,54 +46882,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46621,61 +46940,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46686,7 +47005,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46695,26 +47014,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46725,20 +47044,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46750,52 +47069,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46803,7 +47122,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46816,7 +47135,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46828,7 +47147,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46840,7 +47159,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46852,7 +47171,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46864,7 +47183,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47534,40 +47853,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47575,14 +47908,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49918,6 +50251,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49935,7 +50284,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49943,11 +50292,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49957,19 +50306,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55399,20 +55748,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55423,28 +55777,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55456,19 +55810,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -60565,7 +60919,6 @@ msgid "Service type." msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:66 -#, fuzzy msgid "OK." msgstr "OK." @@ -60851,9 +61204,8 @@ msgstr "" "Ritorna [code]true[/code] se il vettore è normalizzato, o falso altrimenti." #: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131 -#, fuzzy msgid "Returns the length (magnitude) of this vector." -msgstr "Restituisce la lunghezza (magnitudine) di questo vettore." +msgstr "Restituisce la lunghezza di questo vettore." #: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137 msgid "" @@ -70321,6 +70673,8 @@ msgid "" "Gets the contents of a text node. This will raise an error in any other type " "of node." msgstr "" +"Restituisce il contenuto del nodo di testo. Genera un errore se adoperato su " +"un altro tipo di nodo." #: doc/classes/XMLParser.xml:61 msgid "" @@ -70328,6 +70682,8 @@ msgid "" "current node type is neither [constant NODE_ELEMENT] nor [constant " "NODE_ELEMENT_END]." msgstr "" +"Restituisce il nome del nodo corrente. Produce un errore se il nodo non " +"appartiene a [constant NODE_ELEMENT] oppure a [constant NODE_ELEMENT_END]." #: doc/classes/XMLParser.xml:67 msgid "" @@ -70339,10 +70695,12 @@ msgstr "" msgid "" "Gets the type of the current node. Compare with [enum NodeType] constants." msgstr "" +"Restituisce il tipo del nodo attuale. Effettua il confronto adoperando le " +"costanti [enum NodeType]." #: doc/classes/XMLParser.xml:80 msgid "Check whether the current element has a certain attribute." -msgstr "" +msgstr "Verifica che l'elemento attuale abbia un certo attributo." #: doc/classes/XMLParser.xml:86 msgid "" @@ -70352,7 +70710,7 @@ msgstr "" #: doc/classes/XMLParser.xml:93 msgid "Opens an XML file for parsing. This returns an error code." -msgstr "" +msgstr "Apre un file XML per effettuarne il parsing. Può restituire un errore." #: doc/classes/XMLParser.xml:100 msgid "Opens an XML raw buffer for parsing. This returns an error code." @@ -70388,23 +70746,23 @@ msgstr "" #: doc/classes/XMLParser.xml:134 msgid "Text node." -msgstr "" +msgstr "Nodo Testo." #: doc/classes/XMLParser.xml:137 msgid "Comment node." -msgstr "" +msgstr "Nodo Commento." #: doc/classes/XMLParser.xml:140 msgid "CDATA content." -msgstr "" +msgstr "Contenuto CDATA." #: doc/classes/XMLParser.xml:143 msgid "Unknown node." -msgstr "" +msgstr "Nodo sconosciuto." #: doc/classes/YSort.xml:4 msgid "Sort all child nodes based on their Y positions." -msgstr "" +msgstr "Ordina tutti i nodi figli in base alla loro posizione Y." #: doc/classes/YSort.xml:7 msgid "" @@ -70416,6 +70774,12 @@ msgid "" "the same space as the parent YSort, allowing to better organize a scene or " "divide it in multiple ones, yet keep the unique sorting." msgstr "" +"Ordina tutti i nodi figli in base alla loro posizione Y. I nodi figli devono " +"derivare da [CanvasItem]. I nodi con y maggiore saranno disegnati " +"successivamente e quindi appariranno sopra gli altri. \n" +"È possibile creare gerarchie di nodi ordinati rispetto all'asse Y. Nodi " +"figli ordinati rispetto all'asse Y vengono organizzati rispetto " +"all'ordinamento applicato al nodo padre." #: doc/classes/YSort.xml:16 msgid "" diff --git a/doc/translations/ja.po b/doc/translations/ja.po index 611e762e31..a7a1436ccc 100644 --- a/doc/translations/ja.po +++ b/doc/translations/ja.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-24 20:52+0000\n" -"Last-Translator: Itoyo Onuki <bettawat@yahoo.co.jp>\n" +"PO-Revision-Date: 2021-11-05 11:56+0000\n" +"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ja/>\n" "Language: ja\n" @@ -4499,22 +4499,31 @@ msgstr "" "ã“ã® [AABB] ãŒã‚‚ã†ã²ã¨ã¤ã‚’完全ã«å†…包ã™ã‚‹å ´åˆ [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚" +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "[AABB] ã®ä½“ç©ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "空間ã«ã‚ã‚‹ [AABB] ã® 8 ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "[AABB] ã®æœ€é•·è»¸ã‚’æ£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." @@ -4522,15 +4531,15 @@ msgstr "" "[AABB] ã®æœ€é•·è»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3]ã® [code]AXIS_*[/code] 定数" "ã«åŸºã¥ã)。" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "[AABB] ã®æœ€é•·è»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "[AABB] ã®æœ€çŸè»¸ã‚’æ£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." @@ -4538,11 +4547,11 @@ msgstr "" "[AABB] ã®æœ€çŸè»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3] ã® [code]AXIS_*[/code] 定" "æ•°ã«åŸºã¥ã)。" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "[AABB] ã®æœ€çŸè»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." @@ -4550,25 +4559,25 @@ msgstr "" "指定ã—ãŸæ–¹å‘ã®ã‚µãƒãƒ¼ãƒˆãƒã‚¤ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€è¡çªæ¤œå‡ºã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ å‘ã‘ã«" "便利ã§ã™ã€‚" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "与ãˆã‚‰ã‚ŒãŸé‡ã ã‘免颿–¹å‘ã«æ‹¡å¤§ã—㟠[AABB] ã®ã‚³ãƒ”ーを返ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "[AABB] ãŒå¹³å¦ã‚ã‚‹ã„ã¯ç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "[AABB] ãŒç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "[AABB] ãŒãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." @@ -4576,16 +4585,16 @@ msgstr "" "2ã¤ã® [AABB] ã®äº¤å·®éƒ¨ã‚’è¿”ã—ã¾ã™ã€‚失敗ã—ãŸæ™‚ã¯ã€ç©ºã® AABB (大ãã• 0,0,0)ãŒè¿”り" "ã¾ã™ã€‚" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" "ã“ã® [AABB] ãŒã‚‚ã†ä¸€æ–¹ã¨é‡ãªã£ã¦ã„ã‚‹ã¨ãã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "[AABB] ãŒç‰¹å®šã®å¹³é¢ã®ä¸¡å´ã«ã‚ã‚‹å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4593,7 +4602,7 @@ msgstr "" "[code]from[/code] ã‹ã‚‰ [code]to[/code] ã¾ã§ã®ç·šåˆ†ã«ã“ã® [AABB] ãŒäº¤å·®ã—ã¦ã„れ" "ã° [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4603,13 +4612,13 @@ msgstr "" "ã™ã€‚ãれãžã‚Œã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§ [method @GDScript.is_equal_approx] ãŒå‘¼ã°ã‚Œã¾" "ã™ã€‚" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" "ã“ã® [AABB] 㨠[code]with[/code] を両方å«ã‚€ã€ã‚ˆã‚Šå¤§ã㪠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." @@ -4617,11 +4626,11 @@ msgstr "" "終端。ã“れ㯠[code]position + size[/code] ã¨ã—ã¦è¨ˆç®—ã•れã¾ã™ã€‚ã“ã®å€¤ã‚’変更ã™" "ã‚‹ã¨ã€åŒæ™‚ã«å¤§ãã•も変ã‚りã¾ã™ã€‚" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "開始角。通常㯠[member end] よりも低ã„値をæŒã¡ã¾ã™ã€‚" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 #, fuzzy msgid "" "Size from [member position] to [member end]. Typically, all components are " @@ -6055,7 +6064,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -12632,17 +12641,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/ja/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -12651,24 +12664,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -12682,63 +12695,63 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 #, fuzzy msgid "The rotation of the baked custom sky." msgstr "エリアã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã®åå‰ã§ã™ã€‚" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -12746,35 +12759,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -12782,13 +12795,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -12800,79 +12813,79 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 #, fuzzy msgid "Baking was successful." msgstr "接続æˆåŠŸã€‚" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "ç¾åœ¨ã¯æœªä½¿ç”¨ã§ã™ã€‚" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "複数パラメータã®é€†ã‚¿ãƒ³ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -13433,8 +13446,11 @@ msgstr "[code]true[/code]ã«ãªã£ã¦ã„るビットマップè¦ç´ ã®æ•°ã‚’è¿”ã #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -27673,10 +27689,21 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." @@ -27691,12 +27718,12 @@ msgstr "" "[member ProjectSettings.rendering/quality/gi_probes/quality]ã§ãƒ—ãƒãƒ¼ãƒ–ã®å“質" "を下ã’れã°ã€ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/ja/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -27705,14 +27732,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -27722,81 +27753,81 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "[code]true[/code] ã®å ´åˆã€åå°„ã«ãŠã‘る空ã®å¯„与ãŒç„¡è¦–ã•れã¾ã™ã€‚" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -32060,7 +32091,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -33401,7 +33434,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -33466,22 +33500,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -33496,7 +33532,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -33504,19 +33540,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -33587,7 +33623,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -33645,7 +33682,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -37223,7 +37262,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -40548,7 +40587,7 @@ msgstr "ブレンド空間内ã®ãƒã‚¤ãƒ³ãƒˆæ•°ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -40578,14 +40617,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -40595,7 +40634,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -43125,17 +43164,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -43153,11 +43218,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -43352,7 +43417,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -44155,6 +44222,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -44172,7 +44257,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -44286,7 +44371,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -46856,24 +46943,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46883,7 +46976,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -46893,27 +46986,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -46921,12 +47014,12 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 #, fuzzy msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " @@ -46935,20 +47028,20 @@ msgstr "" "[code]true[/code] ã®å ´åˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ [code]bus_idx[/code] ã®ãƒã‚¹ã‚’ミュート" "ã—ã¾ã™ã€‚" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function is declared with the " @@ -46957,51 +47050,51 @@ msgstr "" "[code]true[/code]ã®å ´åˆã€ã‚ªãƒ–ジェクトã¯è·é›¢ã«é–¢ä¿‚ãªãåŒã˜ã‚µã‚¤ã‚ºã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°" "ã•れã¾ã™ã€‚" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -47009,74 +47102,74 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." @@ -47084,38 +47177,38 @@ msgstr "" "[code]true[/code] ã®å ´åˆã€ã‚·ãƒ¼ãƒ³ãƒ„リーã«è¿½åŠ ã•れãŸã¨ãã«ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãŒå†ç”Ÿã•れ" "ã¾ã™ã€‚" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "[code]true[/code]ã®å ´åˆã€æ³•ç·šãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -47126,91 +47219,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -47219,13 +47312,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -47235,7 +47328,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -47243,19 +47336,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -47269,45 +47362,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -47316,7 +47409,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -47327,7 +47420,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -47343,14 +47436,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -47358,49 +47451,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -47409,7 +47502,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47417,7 +47510,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47425,7 +47518,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -47435,7 +47528,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -47444,7 +47537,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -47453,7 +47546,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -47463,7 +47556,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47471,7 +47564,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -47481,7 +47574,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -47491,7 +47584,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47499,7 +47592,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -47508,7 +47601,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -47516,7 +47609,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -47528,477 +47621,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -48006,92 +48099,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -48101,33 +48194,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -48140,7 +48233,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -48152,7 +48245,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -48164,7 +48257,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -48177,7 +48270,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -48185,28 +48278,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -48216,25 +48309,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -48247,7 +48340,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -48259,7 +48352,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -48271,7 +48364,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -48284,13 +48377,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -48298,11 +48391,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -48316,7 +48409,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -48325,7 +48418,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -48341,7 +48434,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -48351,7 +48444,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -48361,7 +48454,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -48372,7 +48465,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -48382,7 +48475,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -48390,7 +48483,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -48401,7 +48494,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -48416,7 +48509,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -48425,13 +48518,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -48440,7 +48533,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -48450,7 +48543,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -48462,7 +48555,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -48472,24 +48565,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -48498,7 +48591,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -48506,7 +48599,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -48515,7 +48608,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -48525,7 +48618,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -48533,31 +48626,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -48565,7 +48658,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -48575,21 +48668,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -48597,31 +48690,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -48629,7 +48722,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -48639,7 +48732,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -48648,7 +48741,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -48657,20 +48750,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -48679,7 +48772,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -48687,7 +48780,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -48696,7 +48789,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -48706,20 +48799,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -48728,13 +48821,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -48744,46 +48837,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -48793,7 +48886,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -48805,7 +48898,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -48813,7 +48906,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -48821,7 +48914,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -48830,7 +48923,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -48844,7 +48937,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -48854,7 +48947,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -48863,7 +48956,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -48873,54 +48966,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -48931,61 +49024,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -48996,7 +49089,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -49005,26 +49098,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -49035,20 +49128,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -49060,54 +49153,54 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 #, fuzzy msgid "Quality setting for subsurface scattering (samples taken)." msgstr "サブサーフェス スã‚ャタリング効果ã®å¼·ã•。" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 #, fuzzy msgid "Max radius used for subsurface scattering samples." msgstr "サブサーフェス スã‚ャタリング効果ã®å¼·ã•。" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -49115,7 +49208,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -49128,7 +49221,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -49140,7 +49233,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -49152,7 +49245,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -49164,7 +49257,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -49176,7 +49269,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -49851,40 +49944,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -49892,14 +49999,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -52246,6 +52353,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -52263,7 +52386,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -52271,11 +52394,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -52285,19 +52408,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -58025,20 +58148,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -58049,28 +58177,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -58082,19 +58210,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -73153,7 +73281,7 @@ msgstr "" #: doc/classes/YSort.xml:4 msgid "Sort all child nodes based on their Y positions." -msgstr "" +msgstr "ã™ã¹ã¦ã®åノードをYä½ç½®ã«åŸºã¥ãソートã™ã‚‹ã€‚" #: doc/classes/YSort.xml:7 msgid "" @@ -73165,11 +73293,22 @@ msgid "" "the same space as the parent YSort, allowing to better organize a scene or " "divide it in multiple ones, yet keep the unique sorting." msgstr "" +"ã™ã¹ã¦ã®åノードをYä½ç½®ã«åŸºã¥ã„ã¦ã‚½ãƒ¼ãƒˆã—ã¾ã™ã€‚ソートã™ã‚‹ãŸã‚ã«ã¯ã€åノードã¯" +"[CanvasItem]を継承ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Yä½ç½®ãŒé«˜ã„ノードã¯å¾Œã§æç”»ã•れるãŸ" +"ã‚ã€Yä½ç½®ãŒä½Žã„ノードã®ä¸Šã«è¡¨ç¤ºã•れã¾ã™ã€‚\n" +"YSortノードã¯ãƒã‚¹ãƒˆå¯èƒ½ã§ã™ã€‚åã®YSortノードã¯ã€è¦ªã®YSortã¨åŒã˜ç©ºé–“ã§ã‚½ãƒ¼ãƒˆã•" +"れるã®ã§ã€ç‹¬è‡ªã®ã‚½ãƒ¼ãƒˆã‚’ç¶æŒã—ãŸã¾ã¾ã€ã‚·ãƒ¼ãƒ³ã‚’より整ç†ã—ãŸã‚Šã€è¤‡æ•°ã®ã‚·ãƒ¼ãƒ³ã«" +"分割ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: doc/classes/YSort.xml:16 msgid "" "If [code]true[/code], child nodes are sorted, otherwise sorting is disabled." msgstr "" +"[code]true[/code]ã®å ´åˆã€åノードã¯ã‚½ãƒ¼ãƒˆã•れã¾ã™ã€‚ãã†ã§ãªã‘れã°ã‚½ãƒ¼ãƒˆã¯ç„¡åй" +"ã«ãªã‚Šã¾ã™ã€‚" + +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚" #, fuzzy #~ msgid "" diff --git a/doc/translations/ko.po b/doc/translations/ko.po index 055ac1daf8..d14d8903de 100644 --- a/doc/translations/ko.po +++ b/doc/translations/ko.po @@ -12,12 +12,13 @@ # Jaemin Park <ppparkje@naver.com>, 2021. # dewcked <dewcked@protonmail.ch>, 2021. # ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021. +# whatthesamuel <alex01763@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-28 22:08+0000\n" -"Last-Translator: ì‹ ë™ê·œ <rlsl0422@gmail.com>\n" +"PO-Revision-Date: 2021-11-19 08:44+0000\n" +"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ko/>\n" "Language: ko\n" @@ -25,7 +26,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -33,7 +34,7 @@ msgstr "설명" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "강좌" +msgstr "íŠœí† ë¦¬ì–¼" #: doc/tools/make_rst.py msgid "Properties" @@ -130,8 +131,7 @@ msgid "" msgstr "" "[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n" "[codeblock]\n" -"# a 는 1\n" -"a = abs(-1)\n" +"a = abs(-1) # a 는 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 @@ -3717,112 +3717,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4901,7 +4910,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10302,17 +10311,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10321,24 +10334,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10352,62 +10365,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10415,35 +10428,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10451,13 +10464,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10469,78 +10482,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "ë§¤ê°œë³€ìˆ˜ë“¤ì˜ ì•„í¬íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10996,8 +11009,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25108,21 +25124,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25131,14 +25158,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25148,80 +25179,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29446,7 +29477,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30760,7 +30793,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30825,22 +30859,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30855,7 +30891,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30863,19 +30899,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30946,7 +30982,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31004,7 +31041,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34557,7 +34596,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -35224,8 +35263,8 @@ msgstr "" "는 ê²ƒì„ í™•ì‹ í• ìˆ˜ 있습니다.\n" "(특히 ì”¬ì„ ë‹¤ë¥¸ ì”¬ì— ì¸ìŠ¤í„´ì‹±í• ë•Œ) 씬 계층구조를 ì¶”ì 하기 위해 [member " "owner] ì†ì„±ìœ¼ë¡œ ë…¸ë“œì˜ \"주ì¸\"ì„ ì„¤ì •í• ìˆ˜ 있습니다. ì´ë¥¼ 통해 누가 ì´ ì”¬ì„ " -"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í• ìˆ˜ 있습니다. ì—디터나 ë„구를 작성하는 ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— " -"ì´ ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n" +"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í• ìˆ˜ 있습니다. ì—디터나 íˆ´ì„ ìž‘ì„±í•˜ëŠ” ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— ì´ " +"ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n" "마지막으로, [method Object.free]나 [method queue_free]를 통해 노드를 í•´ì œí•˜" "는 경우 ìžì† ë…¸ë“œë“¤ë„ ê°™ì´ í•´ì œë©ë‹ˆë‹¤.\n" "[b]그룹:[/b] 노드는 ì›í™œí•œ 관리를 위해 필요한 ë§Œí¼ ê·¸ë£¹ì— ì¶”ê°€ë 수 있는ë°, " @@ -37999,7 +38038,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38029,14 +38068,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38046,7 +38085,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40547,17 +40586,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40575,11 +40640,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40774,7 +40839,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41577,6 +41644,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41594,7 +41679,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41708,7 +41793,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44253,24 +44340,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44280,7 +44373,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44290,27 +44383,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44318,81 +44411,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44400,109 +44493,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44513,91 +44606,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44606,13 +44699,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44622,7 +44715,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44630,19 +44723,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44656,45 +44749,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44703,7 +44796,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44714,7 +44807,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44730,14 +44823,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44745,49 +44838,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44796,7 +44889,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44804,7 +44897,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44812,7 +44905,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44822,7 +44915,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44831,7 +44924,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44840,7 +44933,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44850,7 +44943,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44858,7 +44951,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44868,7 +44961,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44878,7 +44971,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44886,7 +44979,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44895,7 +44988,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44903,7 +44996,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44915,477 +45008,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45393,92 +45486,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45488,33 +45581,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45527,7 +45620,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45539,7 +45632,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45551,7 +45644,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45564,7 +45657,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45572,28 +45665,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45603,25 +45696,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45634,7 +45727,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45646,7 +45739,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45658,7 +45751,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45671,13 +45764,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45685,11 +45778,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45703,7 +45796,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45712,7 +45805,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45728,7 +45821,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45738,7 +45831,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45748,7 +45841,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45759,7 +45852,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45769,7 +45862,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45777,7 +45870,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45788,7 +45881,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45803,7 +45896,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45812,13 +45905,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45827,7 +45920,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45837,7 +45930,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45849,7 +45942,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45859,24 +45952,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45885,7 +45978,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45893,7 +45986,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45902,7 +45995,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45912,7 +46005,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45920,31 +46013,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45952,7 +46045,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45962,21 +46055,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45984,31 +46077,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46016,7 +46109,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46026,7 +46119,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46035,7 +46128,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46044,20 +46137,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46066,7 +46159,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46074,7 +46167,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46083,7 +46176,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46093,20 +46186,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46115,13 +46208,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46131,46 +46224,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46180,7 +46273,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46192,7 +46285,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46200,7 +46293,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46208,7 +46301,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46217,7 +46310,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46231,7 +46324,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46241,7 +46334,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46250,7 +46343,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46260,54 +46353,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46318,61 +46411,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46383,7 +46476,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46392,26 +46485,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46422,20 +46515,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46447,52 +46540,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46500,7 +46593,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46513,7 +46606,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46525,7 +46618,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46537,7 +46630,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46549,7 +46642,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46561,7 +46654,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47225,40 +47318,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47266,14 +47373,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49608,6 +49715,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49625,7 +49748,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49633,11 +49756,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49647,19 +49770,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55074,20 +55197,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55098,28 +55226,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55131,19 +55259,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -61238,6 +61366,17 @@ msgid "" "Finally, viewports can also behave as render targets, in which case they " "will not be visible unless the associated texture is used to draw." msgstr "" +"ë·°í¬íŠ¸ëŠ” ì”¬ì— ë‹¤ë¥¸ 뷰를 ìƒì„±í•˜ê±°ë‚˜ 다른 ë·°í¬íЏ ë‚´ë¶€ì— ì„œë¸Œ 뷰를 ìƒì„±í•©ë‹ˆë‹¤. " +"ìžì‹ 2D 노드가 ì—¬ê¸°ì— í‘œì‹œë˜ê³ ìžì‹ ì¹´ë©”ë¼ 3D ë…¸ë“œë„ ì—¬ê¸°ì— ë Œë”ë§ë©ë‹ˆë‹¤.\n" +"ë·°í¬íŠ¸ëŠ” ìžì²´ì 으로 2D ë˜ëŠ” 3D 세계를 가질 수 있으므로 다른 ë·°í¬íŠ¸ì™€ 그리는 " +"ë‚´ìš©ì„ ê³µìœ í•˜ì§€ 않습니다.\n" +"ë·°í¬íŠ¸ê°€ [ViewportContainer]ì˜ ìžì‹ì´ë©´ ìžë™ìœ¼ë¡œ í¬ê¸°ë¥¼ 차지하며, ê·¸ë ‡ì§€ 않으" +"ë©´ 수ë™ìœ¼ë¡œ ì„¤ì •í•´ì•¼ 합니다.\n" +"ë·°í¬íŠ¸ëŠ” ë˜í•œ 오디오 리스너가 ë˜ë„ë¡ ì„ íƒí• 수 있으므로 ë·°í¬íŠ¸ì˜ 2D ë˜ëŠ” 3D " +"ì¹´ë©”ë¼ ìžì‹ì— ë”°ë¼ positional audio를 ìƒì„±í•©ë‹ˆë‹¤.\n" +"ë˜í•œ ìž¥ì¹˜ì— ì—¬ëŸ¬ í™”ë©´ì´ ìžˆëŠ” 경우 ë·°í¬íŠ¸ë¥¼ 다른 í™”ë©´ì— í• ë‹¹í• ìˆ˜ 있습니다.\n" +"마지막으로 ë·°í¬íŠ¸ëŠ” ë Œë” íƒ€ê²Ÿìœ¼ë¡œ ìž‘ë™í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° ì—°ê²°ëœí…스처" +"를 사용하여 그리지 않는 한 ë³´ì´ì§€ 않습니다." #: doc/classes/Viewport.xml:16 #, fuzzy @@ -69847,6 +69986,14 @@ msgid "" "skybox). Usually, these are added in order to improve the realism/color " "balance of the scene." msgstr "" +"[WorldEnvironment] 노드는 ì”¬ì˜ ê¸°ë³¸ [Environment]를 ì„¤ì •í•˜ëŠ” ë° ì‚¬ìš©ë©ë‹ˆë‹¤.\n" +"[WorldEnvironment]ì— ì •ì˜ëœ 매개변수는 현재 [Camera]ì— ì„¤ì •ëœ [Environment] " +"ë…¸ë“œì— ì˜í•´ ìž¬ì •ì˜ë 수 있습니다. ë˜í•œ 한 ë²ˆì— í•˜ë‚˜ì˜ [WorldEnvironment]ë§Œ ì§€" +"ì •ëœ ì”¬ì—서 ì¸ìŠ¤í„´ìŠ¤í™”í• ìˆ˜ 있습니다.\n" +"[WorldEnvironment]를 통해 사용ìžëŠ” 기본 조명 매개변수(예: ambient lighting), " +"다양한 후처리 효과(예: SSAO, DOF, Tonemapping), ë°°ê²½ 그리는 방법(예: solid " +"color, skybox)ì„ ì§€ì •í• ìˆ˜ 있습니다. ì¼ë°˜ì 으로 ì”¬ì˜ ì‚¬ì‹¤ê°/ìƒ‰ìƒ ê· í˜•ì„ ê°œì„ " +"하기 위해 추가ë©ë‹ˆë‹¤." #: doc/classes/WorldEnvironment.xml:21 msgid "" diff --git a/doc/translations/lv.po b/doc/translations/lv.po index 33cbdd282e..2740831460 100644 --- a/doc/translations/lv.po +++ b/doc/translations/lv.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 22:17+0000\n" +"PO-Revision-Date: 2021-11-12 13:49+0000\n" "Last-Translator: M E <gruffy7932@gmail.com>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/lv/>\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -49,7 +49,7 @@ msgstr "SignÄli" #: doc/tools/make_rst.py msgid "Enumerations" -msgstr "UzskaitÄ«jumi" +msgstr "Uzskaites" #: doc/tools/make_rst.py msgid "Constants" @@ -3605,112 +3605,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4788,7 +4797,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10187,17 +10196,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10206,24 +10219,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10237,62 +10250,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10300,35 +10313,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10336,13 +10349,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10354,77 +10367,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10880,8 +10893,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24893,21 +24909,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24916,14 +24943,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24933,80 +24964,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29222,7 +29253,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30534,7 +30567,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30599,22 +30633,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30629,7 +30665,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30637,19 +30673,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30720,7 +30756,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30778,7 +30815,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34321,7 +34360,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37634,7 +37673,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37664,14 +37703,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37681,7 +37720,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40166,17 +40205,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40194,11 +40259,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40393,7 +40458,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41195,6 +41262,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41212,7 +41297,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41326,7 +41411,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43867,24 +43954,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43894,7 +43987,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43904,27 +43997,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43932,81 +44025,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44014,109 +44107,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44127,91 +44220,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44220,13 +44313,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44236,7 +44329,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44244,19 +44337,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44270,45 +44363,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44317,7 +44410,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44328,7 +44421,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44344,14 +44437,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44359,49 +44452,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44410,7 +44503,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44418,7 +44511,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44426,7 +44519,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44436,7 +44529,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44445,7 +44538,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44454,7 +44547,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44464,7 +44557,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44472,7 +44565,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44482,7 +44575,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44492,7 +44585,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44500,7 +44593,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44509,7 +44602,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44517,7 +44610,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44529,477 +44622,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45007,92 +45100,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45102,33 +45195,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45141,7 +45234,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45153,7 +45246,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45165,7 +45258,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45178,7 +45271,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45186,28 +45279,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45217,25 +45310,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45248,7 +45341,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45260,7 +45353,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45272,7 +45365,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45285,13 +45378,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45299,11 +45392,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45317,7 +45410,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45326,7 +45419,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45342,7 +45435,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45352,7 +45445,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45362,7 +45455,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45373,7 +45466,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45383,7 +45476,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45391,7 +45484,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45402,7 +45495,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45417,7 +45510,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45426,13 +45519,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45441,7 +45534,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45451,7 +45544,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45463,7 +45556,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45473,24 +45566,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45499,7 +45592,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45507,7 +45600,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45516,7 +45609,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45526,7 +45619,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45534,31 +45627,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45566,7 +45659,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45576,21 +45669,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45598,31 +45691,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45630,7 +45723,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45640,7 +45733,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45649,7 +45742,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45658,20 +45751,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45680,7 +45773,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45688,7 +45781,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45697,7 +45790,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45707,20 +45800,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45729,13 +45822,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45745,46 +45838,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45794,7 +45887,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45806,7 +45899,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45814,7 +45907,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45822,7 +45915,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45831,7 +45924,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45845,7 +45938,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45855,7 +45948,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45864,7 +45957,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45874,54 +45967,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45932,61 +46025,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45997,7 +46090,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46006,26 +46099,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46036,20 +46129,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46061,52 +46154,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46114,7 +46207,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46127,7 +46220,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46139,7 +46232,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46151,7 +46244,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46163,7 +46256,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46175,7 +46268,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46839,40 +46932,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46880,14 +46987,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49222,6 +49329,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49239,7 +49362,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49247,11 +49370,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49261,19 +49384,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54688,20 +54811,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54712,28 +54840,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54745,19 +54873,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/mr.po b/doc/translations/mr.po index 352da4a417..6def4dd098 100644 --- a/doc/translations/mr.po +++ b/doc/translations/mr.po @@ -3586,112 +3586,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4763,7 +4772,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10140,15 +10149,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10157,24 +10170,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10188,62 +10201,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10251,35 +10264,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10287,13 +10300,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10305,77 +10318,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10823,8 +10836,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24769,20 +24785,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24791,14 +24818,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24808,80 +24839,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29074,7 +29105,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30373,7 +30406,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30438,22 +30472,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30468,7 +30504,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30476,19 +30512,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30556,7 +30592,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30614,7 +30651,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34139,7 +34178,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37434,7 +37473,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37464,14 +37503,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37481,7 +37520,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39959,17 +39998,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39987,11 +40052,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40186,7 +40251,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40988,6 +41055,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41005,7 +41090,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41119,7 +41204,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43659,24 +43746,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43686,7 +43779,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43696,27 +43789,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43724,81 +43817,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43806,109 +43899,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43919,91 +44012,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44012,13 +44105,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44028,7 +44121,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44036,19 +44129,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44062,45 +44155,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44109,7 +44202,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44120,7 +44213,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44136,14 +44229,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44151,49 +44244,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44202,7 +44295,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44210,7 +44303,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44218,7 +44311,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44228,7 +44321,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44237,7 +44330,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44246,7 +44339,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44256,7 +44349,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44264,7 +44357,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44274,7 +44367,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44284,7 +44377,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44292,7 +44385,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44301,7 +44394,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44309,7 +44402,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44321,477 +44414,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44799,92 +44892,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44894,33 +44987,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44933,7 +45026,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44945,7 +45038,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44957,7 +45050,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44970,7 +45063,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44978,28 +45071,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45009,25 +45102,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45040,7 +45133,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45052,7 +45145,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45064,7 +45157,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45077,13 +45170,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45091,11 +45184,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45109,7 +45202,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45118,7 +45211,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45134,7 +45227,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45144,7 +45237,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45154,7 +45247,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45165,7 +45258,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45175,7 +45268,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45183,7 +45276,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45194,7 +45287,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45209,7 +45302,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45218,13 +45311,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45233,7 +45326,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45243,7 +45336,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45255,7 +45348,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45265,24 +45358,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45291,7 +45384,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45299,7 +45392,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45308,7 +45401,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45318,7 +45411,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45326,31 +45419,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45358,7 +45451,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45368,21 +45461,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45390,31 +45483,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45422,7 +45515,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45432,7 +45525,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45441,7 +45534,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45450,20 +45543,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45472,7 +45565,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45480,7 +45573,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45489,7 +45582,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45499,20 +45592,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45521,13 +45614,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45537,46 +45630,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45586,7 +45679,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45598,7 +45691,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45606,7 +45699,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45614,7 +45707,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45623,7 +45716,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45637,7 +45730,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45647,7 +45740,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45656,7 +45749,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45666,54 +45759,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45724,61 +45817,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45789,7 +45882,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45798,26 +45891,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45828,20 +45921,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45853,52 +45946,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45906,7 +45999,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45919,7 +46012,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45931,7 +46024,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45943,7 +46036,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45955,7 +46048,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45967,7 +46060,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46626,40 +46719,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46667,14 +46774,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49001,6 +49108,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49018,7 +49141,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49026,11 +49149,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49040,19 +49163,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54437,20 +54560,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54461,28 +54589,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54494,19 +54622,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/nb.po b/doc/translations/nb.po index 0e6b60e4d0..1f08034df2 100644 --- a/doc/translations/nb.po +++ b/doc/translations/nb.po @@ -3596,112 +3596,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4773,7 +4782,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10150,15 +10159,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10167,24 +10180,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10198,62 +10211,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10261,35 +10274,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10297,13 +10310,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10315,77 +10328,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10833,8 +10846,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24779,20 +24795,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24801,14 +24828,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24818,80 +24849,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29084,7 +29115,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30383,7 +30416,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30448,22 +30482,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30478,7 +30514,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30486,19 +30522,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30566,7 +30602,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30624,7 +30661,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34149,7 +34188,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37444,7 +37483,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37474,14 +37513,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37491,7 +37530,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39969,17 +40008,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39997,11 +40062,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40196,7 +40261,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40998,6 +41065,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41015,7 +41100,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41129,7 +41214,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43669,24 +43756,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43696,7 +43789,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43706,27 +43799,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43734,81 +43827,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43816,109 +43909,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43929,91 +44022,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44022,13 +44115,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44038,7 +44131,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44046,19 +44139,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44072,45 +44165,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44119,7 +44212,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44130,7 +44223,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44146,14 +44239,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44161,49 +44254,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44212,7 +44305,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44220,7 +44313,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44228,7 +44321,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44238,7 +44331,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44247,7 +44340,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44256,7 +44349,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44266,7 +44359,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44274,7 +44367,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44284,7 +44377,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44294,7 +44387,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44302,7 +44395,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44311,7 +44404,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44319,7 +44412,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44331,477 +44424,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44809,92 +44902,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44904,33 +44997,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44943,7 +45036,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44955,7 +45048,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44967,7 +45060,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44980,7 +45073,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44988,28 +45081,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45019,25 +45112,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45050,7 +45143,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45062,7 +45155,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45074,7 +45167,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45087,13 +45180,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45101,11 +45194,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45119,7 +45212,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45128,7 +45221,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45144,7 +45237,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45154,7 +45247,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45164,7 +45257,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45175,7 +45268,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45185,7 +45278,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45193,7 +45286,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45204,7 +45297,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45219,7 +45312,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45228,13 +45321,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45243,7 +45336,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45253,7 +45346,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45265,7 +45358,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45275,24 +45368,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45301,7 +45394,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45309,7 +45402,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45318,7 +45411,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45328,7 +45421,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45336,31 +45429,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45368,7 +45461,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45378,21 +45471,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45400,31 +45493,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45432,7 +45525,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45442,7 +45535,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45451,7 +45544,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45460,20 +45553,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45482,7 +45575,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45490,7 +45583,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45499,7 +45592,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45509,20 +45602,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45531,13 +45624,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45547,46 +45640,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45596,7 +45689,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45608,7 +45701,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45616,7 +45709,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45624,7 +45717,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45633,7 +45726,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45647,7 +45740,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45657,7 +45750,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45666,7 +45759,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45676,54 +45769,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45734,61 +45827,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45799,7 +45892,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45808,26 +45901,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45838,20 +45931,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45863,52 +45956,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45916,7 +46009,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45929,7 +46022,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45941,7 +46034,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45953,7 +46046,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45965,7 +46058,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45977,7 +46070,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46636,40 +46729,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46677,14 +46784,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49011,6 +49118,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49028,7 +49151,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49036,11 +49159,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49050,19 +49173,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54447,20 +54570,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54471,28 +54599,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54504,19 +54632,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/nl.po b/doc/translations/nl.po index df5a6168a0..26d5127ccc 100644 --- a/doc/translations/nl.po +++ b/doc/translations/nl.po @@ -6,12 +6,13 @@ # Stijn Hinlopen <f.a.hinlopen@gmail.com>, 2020. # marnicq van loon <marnicqvanloon@gmail.com>, 2020. # Pierre Stempin <pierre.stempin@gmail.com>, 2020. +# Daan van Luijk <daanvl@outlook.be>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2020-12-26 14:29+0000\n" -"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n" +"PO-Revision-Date: 2021-11-07 22:24+0000\n" +"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot-" "class-reference/nl/>\n" "Language: nl\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.4.1-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -47,7 +48,7 @@ msgstr "Signalen" #: doc/tools/make_rst.py msgid "Enumerations" -msgstr "Enumeratie" +msgstr "Enumeraties" #: doc/tools/make_rst.py msgid "Constants" @@ -117,7 +118,6 @@ msgstr "" "zijn gedefinieerd." #: modules/gdscript/doc_classes/@GDScript.xml:45 -#, fuzzy msgid "" "Returns the absolute value of parameter [code]s[/code] (i.e. positive " "value).\n" @@ -125,11 +125,10 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" -"Geeft als resultaat de absolute waarde van de parameter [code]s[/code] (d.w." -"z. ongetekende waarde, werkt voor integer en float).\n" +"Geeft als resultaat de absolute waarde van de parameter terug [code]s[/code] " +"(d.w.z. positieve waarde).\n" "[codeblock]\n" -"# a is 1\n" -"a = abs(-1)\n" +"a = abs(-1) # a is 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 @@ -3640,112 +3639,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4823,7 +4831,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10222,17 +10230,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10241,24 +10253,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10272,62 +10284,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10335,35 +10347,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10371,13 +10383,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10389,77 +10401,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10915,8 +10927,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24928,21 +24943,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24951,14 +24977,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24968,80 +24998,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29257,7 +29287,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30569,7 +30601,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30634,22 +30667,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30664,7 +30699,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30672,19 +30707,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30755,7 +30790,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30813,7 +30849,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34356,7 +34394,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37669,7 +37707,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37699,14 +37737,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37716,7 +37754,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40201,17 +40239,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40229,11 +40293,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40428,7 +40492,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41230,6 +41296,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41247,7 +41331,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41361,7 +41445,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43902,24 +43988,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43929,7 +44021,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43939,27 +44031,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43967,81 +44059,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44049,109 +44141,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44162,91 +44254,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44255,13 +44347,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44271,7 +44363,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44279,19 +44371,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44305,45 +44397,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44352,7 +44444,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44363,7 +44455,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44379,14 +44471,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44394,49 +44486,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44445,7 +44537,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44453,7 +44545,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44461,7 +44553,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44471,7 +44563,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44480,7 +44572,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44489,7 +44581,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44499,7 +44591,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44507,7 +44599,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44517,7 +44609,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44527,7 +44619,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44535,7 +44627,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44544,7 +44636,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44552,7 +44644,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44564,477 +44656,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45042,92 +45134,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45137,33 +45229,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45176,7 +45268,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45188,7 +45280,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45200,7 +45292,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45213,7 +45305,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45221,28 +45313,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45252,25 +45344,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45283,7 +45375,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45295,7 +45387,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45307,7 +45399,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45320,13 +45412,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45334,11 +45426,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45352,7 +45444,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45361,7 +45453,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45377,7 +45469,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45387,7 +45479,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45397,7 +45489,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45408,7 +45500,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45418,7 +45510,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45426,7 +45518,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45437,7 +45529,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45452,7 +45544,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45461,13 +45553,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45476,7 +45568,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45486,7 +45578,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45498,7 +45590,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45508,24 +45600,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45534,7 +45626,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45542,7 +45634,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45551,7 +45643,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45561,7 +45653,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45569,31 +45661,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45601,7 +45693,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45611,21 +45703,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45633,31 +45725,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45665,7 +45757,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45675,7 +45767,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45684,7 +45776,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45693,20 +45785,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45715,7 +45807,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45723,7 +45815,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45732,7 +45824,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45742,20 +45834,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45764,13 +45856,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45780,46 +45872,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45829,7 +45921,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45841,7 +45933,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45849,7 +45941,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45857,7 +45949,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45866,7 +45958,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45880,7 +45972,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45890,7 +45982,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45899,7 +45991,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45909,54 +46001,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45967,61 +46059,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46032,7 +46124,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46041,26 +46133,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46071,20 +46163,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46096,52 +46188,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46149,7 +46241,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46162,7 +46254,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46174,7 +46266,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46186,7 +46278,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46198,7 +46290,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46210,7 +46302,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46874,40 +46966,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46915,14 +47021,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49258,6 +49364,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49275,7 +49397,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49283,11 +49405,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49297,19 +49419,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54724,20 +54846,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54748,28 +54875,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54781,19 +54908,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/pl.po b/doc/translations/pl.po index 921ba76bc8..e7c2358cea 100644 --- a/doc/translations/pl.po +++ b/doc/translations/pl.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 13:40+0000\n" +"PO-Revision-Date: 2021-11-06 19:35+0000\n" "Last-Translator: CXVMNER <cxvmner@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/pl/>\n" @@ -238,12 +238,12 @@ msgid "" "a = atan(0.5) # a is 0.463648\n" "[/codeblock]" msgstr "" -"Zwraca tangens Å‚uku [code]s[/code] w radianach. Użyj go by uzyskać kÄ…t z " -"kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n" +"Zwraca arcus tangens kÄ…ta [code]s[/code] w radianach. Użyj go by uzyskać kÄ…t " +"z kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n" "Metoda nie wie w którym kwadrancie wypada kÄ…t . Sprawdź [method atan2] jeÅ›li " "posiadasz oba [code]y[/code] oraz [code]x[/code].\n" "[codeblock]\n" -"a = atan(0.5) # a is 0.463648\n" +"a = atan(0.5) # a ma wartość 0.463648\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:107 @@ -290,7 +290,6 @@ msgstr "" "współrzÄ™dne biegunowe (odlegÅ‚ość od poczÄ…tku ukÅ‚adu i kÄ…t)." #: modules/gdscript/doc_classes/@GDScript.xml:135 -#, fuzzy msgid "" "Rounds [code]s[/code] upward (towards positive infinity), returning the " "smallest whole number that is not less than [code]s[/code].\n" @@ -301,11 +300,12 @@ msgid "" "See also [method floor], [method round], [method stepify], and [int]." msgstr "" "ZaokrÄ…gla [code]s[/code] w górÄ™ (w kierunku dodatnim), zwracajÄ…c najmniejszÄ… " -"liczbÄ™ caÅ‚kowitÄ…, która jest nie mniejsza niż [code]s[/code] (tj. sufit).\n" +"liczbÄ™ caÅ‚kowitÄ…, która jest nie mniejsza niż [code]s[/code].\n" "[codeblock]\n" -"i = ceil(1.45) # i is 2\n" -"i = ceil(1.001) # i is 2\n" -"[/codeblock]" +"a = ceil(1.45) # a jest równe 2\n" +"a = ceil(1.001) # a jest równe 2\n" +"[/codeblock]\n" +"Zobacz też [method floor], [method round], [method stepify] oraz [int]." #: modules/gdscript/doc_classes/@GDScript.xml:147 msgid "" @@ -328,7 +328,6 @@ msgstr "" "Jest to odwrotność [method ord]." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -341,13 +340,9 @@ msgstr "" "Ogranicza [code]value[/code] i zwraca wartość nie mniejszÄ… od [code]min[/" "code] i nie wiÄ™kszÄ… od [code]max[/code].\n" "[codeblock]\n" -"speed = 1000\n" -"# a is 20\n" -"a = clamp(speed, 1, 20)\n" -"\n" -"speed = -10\n" -"# a is 1\n" -"a = clamp(speed, 1, 20)\n" +"a = clamp(1000, 1, 20) # a jest równe 20\n" +"a = clamp(-10, 1, 20) # a jest równe 1\n" +"a = clamp(15, 1, 20) # a jest równe 15\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 @@ -375,7 +370,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -385,13 +379,11 @@ msgid "" msgstr "" "Zwraca kosinus kÄ…ta [code]s[/code] w radianach.\n" "[codeblock]\n" -"# Wypisze 1 nastÄ™pnie -1\n" -"print(cos(PI * 2))\n" -"print(cos(PI))\n" +"a = cos(TAU) # a równe 1.0\n" +"a = cos(PI) # a równe -1.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:201 -#, fuzzy msgid "" "Returns the hyperbolic cosine of [code]s[/code] in radians.\n" "[codeblock]\n" @@ -400,8 +392,7 @@ msgid "" msgstr "" "Zwraca hiperboliczny cosinus [code]s[/code] w radianach.\n" "[codeblock]\n" -"# Wypisze 1.543081\n" -"print(cosh(1))\n" +"print(cosh(1)) # Wypisze 1.543081\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:211 @@ -410,10 +401,9 @@ msgstr "Konwertuje decybele na liniowy przekaz energii (dźwiÄ™k)." #: modules/gdscript/doc_classes/@GDScript.xml:218 msgid "Deprecated alias for [method step_decimals]." -msgstr "" +msgstr "PrzestarzaÅ‚y odpowiednik metody [method step_decimals]." #: modules/gdscript/doc_classes/@GDScript.xml:227 -#, fuzzy msgid "" "[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in " "Godot 4.0, please use [method move_toward] instead.\n" @@ -423,25 +413,24 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" -"Zwraca wynik zmniejszania wartoÅ›ci [code]value[/code] o [code]step[/code] * " +"[b]Notka:[/b] [code]dectime[/code] jest przestarzaÅ‚a i zostanie usuniÄ™ta w " +"Godot 4.0. Zamiast tego, użyj [method move_toward].\n" +"Zwraca wartość [code]value[/code] zmniejszonÄ… o [code]step[/code] * " "[code]amount[/code].\n" "[codeblock]\n" -"# a = 59\n" -"a = dectime(60, 10, 0.1))\n" +"a = dectime(60, 10, 0.1)) # a równe 59.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:238 -#, fuzzy msgid "" "Converts an angle expressed in degrees to radians.\n" "[codeblock]\n" "r = deg2rad(180) # r is 3.141593\n" "[/codeblock]" msgstr "" -"Zwraca kÄ…t wyrażony w stopniach do radianów.\n" +"Przelicza kÄ…t wyrażony w stopniach na kÄ…t w radianach.\n" "[codeblock]\n" -"# r is 3.141593\n" -"r = deg2rad(180)\n" +"r = deg2rad(180) # r równe 3.141593\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 @@ -453,6 +442,7 @@ msgstr "" "instancjÄ™. Przydatne podczas deserializacji." #: modules/gdscript/doc_classes/@GDScript.xml:256 +#, fuzzy msgid "" "Returns an \"eased\" value of [code]x[/code] based on an easing function " "defined with [code]curve[/code]. This easing function is based on an " @@ -472,6 +462,24 @@ msgid "" "See also [method smoothstep]. If you need to perform more advanced " "transitions, use [Tween] or [AnimationPlayer]." msgstr "" +"Zwraca \"wygÅ‚adzonÄ…\" wartość [code]x[/code] w oparciu o funkcjÄ™ przejÅ›cia " +"zdefiniowanÄ… przez [code]curve[/code]. Funkcja przejÅ›cia jest funkcjÄ… " +"potÄ™gowÄ…. [code]curve[/code] może być dowolnÄ… liczbÄ… zmiennoprzecinkowÄ…, dla " +"której okreÅ›lonych wartoÅ›ci zachodzÄ… nastÄ™pujÄ…ce zależnoÅ›ci:\n" +"[codeblock]\n" +"- Mniej niż -1.0 (przedziaÅ‚ otwarty): Ease in-out\n" +"- 1.0: przejÅ›cie liniowe\n" +"- Od -1.0 do 0.0 (przedziaÅ‚ otwarty): Ease out-in\n" +"- 0.0: staÅ‚a wartość\n" +"- Od 0.0 to 1.0 (przedziaÅ‚ otwarty): Ease in\n" +"- 1.0: przejÅ›cie liniowe\n" +"- WiÄ™cej niż 1.0 (przedziaÅ‚ otwarty): Ease out\n" +"[/codeblock]\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" +"ease_cheatsheet.png]przykÅ‚adowe krzywe ease() dla różnych wartoÅ›ci curve[/" +"url]\n" +"Zobacz też [method smoothstep]. JeÅ›li potrzebujesz bardziej zaawansowanych " +"metod przejÅ›cia użyj [Tween] lub [AnimationPlayer]." #: modules/gdscript/doc_classes/@GDScript.xml:274 msgid "" @@ -520,7 +528,6 @@ msgstr "" "liczby caÅ‚kowitej użyj bezpoÅ›rednio metody [code]int(s)[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:301 -#, fuzzy msgid "" "Returns the floating-point remainder of [code]a/b[/code], keeping the sign " "of [code]a[/code].\n" @@ -529,16 +536,14 @@ msgid "" "[/codeblock]\n" "For the integer remainder operation, use the % operator." msgstr "" -"Zwraca zmiennoprzecinkowÄ… resztÄ™ [code]a/b[/code], zachowujÄ…c znak [code]a[/" -"code].\n" +"Zwraca zmiennoprzecinkowÄ… resztÄ™ z [code]a/b[/code], zachowujÄ…c znak " +"[code]a[/code].\n" "[codeblock]\n" -"# Reszta wynosi 1.5\n" -"var reszta = fmod(7, 5.5)\n" +"r = fmod(7, 5.5) # r równe 1.5\n" "[/codeblock]\n" "Dla operacji z caÅ‚kowitÄ… resztÄ…, użyj operatora %." #: modules/gdscript/doc_classes/@GDScript.xml:313 -#, fuzzy msgid "" "Returns the floating-point modulus of [code]a/b[/code] that wraps equally in " "positive and negative.\n" @@ -558,27 +563,22 @@ msgid "" " 1.5 0.0 0.0\n" "[/codeblock]" msgstr "" -"Zwraca zmiennoprzecinkowy moduÅ‚ [code]a /b[/code], który zawiera równo " +"Zwraca zmiennoprzecinkowy moduÅ‚ z [code]a /b[/code], który zawiera równo " "wartość dodatniÄ… jak i ujemnÄ….\n" "[codeblock]\n" -"var i = -6\n" -"while i < 5:\n" -" prints(i, fposmod(i, 3))\n" -" i += 1\n" +"for i in 7:\n" +" var x = 0.5 * i - 1.5\n" +" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n" "[/codeblock]\n" -"Daje nam te wartoÅ›ci:\n" +"Daje nam wartoÅ›ci:\n" "[codeblock]\n" -"-6 0\n" -"-5 1\n" -"-4 2\n" -"-3 0\n" -"-2 1\n" -"-1 2\n" -"0 0\n" -"1 1\n" -"2 2\n" -"3 0\n" -"4 1\n" +"-1.5 -0.0 0.0\n" +"-1.0 -1.0 0.5\n" +"-0.5 -0.5 1.0\n" +" 0.0 0.0 0.0\n" +" 0.5 0.5 0.5\n" +" 1.0 1.0 1.0\n" +" 1.5 0.0 0.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:336 @@ -4034,112 +4034,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5218,7 +5227,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10625,17 +10634,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10644,24 +10657,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10675,62 +10688,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10738,35 +10751,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10774,13 +10787,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10792,78 +10805,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Zwraca arcus tangens parametrów." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11319,8 +11332,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25351,21 +25367,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25374,14 +25401,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25391,36 +25422,36 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." @@ -25428,46 +25459,46 @@ msgstr "" "JeÅ›li [code]true[/code], potomne wÄ™zÅ‚y sÄ… sortowane. W innym przypadku jest " "wyłączone." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29695,7 +29726,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -31017,7 +31050,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31082,22 +31116,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31112,7 +31148,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31120,19 +31156,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31203,7 +31239,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31261,7 +31298,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34820,7 +34859,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -38139,7 +38178,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38169,14 +38208,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38186,7 +38225,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40702,17 +40741,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40730,11 +40795,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40929,7 +40994,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41732,6 +41799,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41749,7 +41834,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41863,7 +41948,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44410,24 +44497,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44437,7 +44530,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44447,27 +44540,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44475,81 +44568,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44557,109 +44650,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44670,91 +44763,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44763,13 +44856,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44779,7 +44872,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44787,19 +44880,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44813,45 +44906,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44860,7 +44953,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44871,7 +44964,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44887,14 +44980,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44902,49 +44995,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44953,7 +45046,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44961,7 +45054,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44969,7 +45062,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44979,7 +45072,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44988,7 +45081,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44997,7 +45090,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45007,7 +45100,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45015,7 +45108,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -45025,7 +45118,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -45035,7 +45128,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45043,7 +45136,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -45052,7 +45145,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45060,7 +45153,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -45072,477 +45165,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45550,92 +45643,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45645,33 +45738,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45684,7 +45777,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45696,7 +45789,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45708,7 +45801,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45721,7 +45814,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45729,28 +45822,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45760,25 +45853,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45791,7 +45884,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45803,7 +45896,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45815,7 +45908,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45828,13 +45921,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45842,11 +45935,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45860,7 +45953,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45869,7 +45962,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45885,7 +45978,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45895,7 +45988,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45905,7 +45998,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45916,7 +46009,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45926,7 +46019,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45934,7 +46027,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45945,7 +46038,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45960,7 +46053,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45969,13 +46062,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45984,7 +46077,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45994,7 +46087,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -46006,7 +46099,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -46016,24 +46109,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -46042,7 +46135,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -46050,7 +46143,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -46059,7 +46152,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -46069,7 +46162,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -46077,31 +46170,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46109,7 +46202,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46119,21 +46212,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46141,31 +46234,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46173,7 +46266,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46183,7 +46276,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46192,7 +46285,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46201,20 +46294,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46223,7 +46316,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46231,7 +46324,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46240,7 +46333,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46250,20 +46343,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46272,13 +46365,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46288,46 +46381,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46337,7 +46430,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46349,7 +46442,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46357,7 +46450,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46365,7 +46458,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46374,7 +46467,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46388,7 +46481,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46398,7 +46491,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46407,7 +46500,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46417,54 +46510,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46475,61 +46568,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46540,7 +46633,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46549,26 +46642,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46579,20 +46672,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46604,52 +46697,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46657,7 +46750,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46670,7 +46763,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46682,7 +46775,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46694,7 +46787,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46706,7 +46799,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46718,7 +46811,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47390,40 +47483,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47431,14 +47538,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49773,6 +49880,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49790,7 +49913,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49798,11 +49921,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49812,19 +49935,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55249,20 +55372,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55273,28 +55401,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55306,19 +55434,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po index e74b0335e6..0e60bcc6bc 100644 --- a/doc/translations/pt_BR.po +++ b/doc/translations/pt_BR.po @@ -26,12 +26,15 @@ # William Weber Berrutti <wwberrutti@protonmail.ch>, 2021. # jak3z <jose_renato06@outlook.com>, 2021. # Henrique Darko <henridark00@gmail.com>, 2021. +# Cearaj <pmoraisleal@gmail.com>, 2021. +# Fernando H. Rosa <ferhrosa@gmail.com>, 2021. +# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 13:40+0000\n" -"Last-Translator: jak3z <jose_renato06@outlook.com>\n" +"PO-Revision-Date: 2021-11-17 07:42+0000\n" +"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot-class-reference/pt_BR/>\n" "Language: pt_BR\n" @@ -39,7 +42,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -190,7 +193,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:78 -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -216,24 +218,29 @@ msgid "" "a message with clarifying details\n" "[/codeblock]" msgstr "" -"Afirma que o [code]condition[/code] é [code]true[/code]. Se o " -"[code]condition[/code] é [code]false[/code], um erro é gerado e o programa é " -"interrompido até que você o retome. Apenas executa em compilações de " -"depuração, ou quando executando o jogo a partir do editor. Use-o por motivos " -"de depuração, para ter certeza que a declaração é [code]true[/code] durante " -"o desenvolvimento.\n" +"Afirma que [code]condition[/code] (condição) é [code]true[/code]. Se " +"[code]condition[/code] é [code]false[/code], um erro é gerado. Ao executar a " +"partir do editor, o programa também será interrompido, até que você o " +"retome. Isso pode ser usado como uma forma mais forte de [method push_error] " +"para reportar erros aos desenvolvedores do projeto ou para utilizadores de " +"add-ons.\n" +"[b]Obs.:[/b] Por motivos de desempenho, o código inserido no [method assert] " +"só é executado em compilações de depuração ou quando o projeto é executado a " +"partir do editor. Não insira código com efeitos colaterais dentro de um " +"[method assert], senão o projeto terá um comportamento diferente quando " +"exportado em modo de lançamento.\n" "O argumento opcional [code]message[/code], se dado, é mostrado em " -"complemento a mensagem genérica \"Assertion failed\". Você pode usar isso " -"para prover detalhes adicionais do o porquê a afirmação falhou.\n" +"complemento à mensagem genérica \"Assertion failed\". Você pode usar isso " +"para fornecer detalhes adicionais do porquê a afirmação falhou.\n" "[codeblock]\n" -"# Imagine que queremos que uma velocidade esteja entre 0 e 20\n" -"speed = -10\n" +"# Imagine que queremos que a velocidade se situe sempre entre 0 e 20.\n" +"var speed = -10\n" "assert(speed < 20) # True, o programa irá continuar\n" "assert(speed >= 0) # False, o programa irá parar\n" -"assert(speed >= 0 && speed < 20) # Você pode, inclusive, combinar dois " +"assert(speed >= 0 && speed < 20) # Você também pode combinar os dois " "parâmetros condicionais em uma verificação\n" -"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # " -"Mostra uma mensagem com detalhes esclarecedores\n" +"assert(speed < 20, \"speed = %f, mas o limite de velocidade é 20\" % speed) " +"# Mostra uma mensagem com mais detalhes\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:95 @@ -301,7 +308,6 @@ msgstr "" "ângulo)." #: modules/gdscript/doc_classes/@GDScript.xml:135 -#, fuzzy msgid "" "Rounds [code]s[/code] upward (towards positive infinity), returning the " "smallest whole number that is not less than [code]s[/code].\n" @@ -340,7 +346,6 @@ msgstr "" "Isso é o inverso de [method ord]." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -356,7 +361,7 @@ msgstr "" "a = clamp(1000, 1, 20) # a é 20\n" "a = clamp(-10, 1, 20) # a é 1\n" "a = clamp(15, 1, 20) # a é 15\n" -"[/ codeblock]" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 msgid "" @@ -383,7 +388,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -391,7 +395,7 @@ msgid "" "a = cos(PI) # a is -1.0\n" "[/codeblock]" msgstr "" -"Retorna o seno do ângulo [code]s[/code] em radianos.\n" +"Retorna o cosseno do ângulo [code]s[/code] em radianos.\n" "[codeblock]\n" "a = cos(TAU) # a é 1.0\n" "a = cos(PI) # a é -1.0\n" @@ -406,8 +410,7 @@ msgid "" msgstr "" "Retorna o cosseno hiperbólico de [code]s[/code] em radianos.\n" "[codeblock]\n" -"# Imprime 1.543081\n" -"print(cosh(1))\n" +"print(cosh(1)) # Imprime 1.543081\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:211 @@ -449,13 +452,12 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 -#, fuzzy msgid "" "Converts a dictionary (previously created with [method inst2dict]) back to " "an instance. Useful for deserializing." msgstr "" -"Converte uma instância pré-convertida em um dicionário, de volta em uma " -"instância. Útil para desserialização." +"Converte uma instância pré-convertida em um dicionário (com [method " +"inst2dict]), de volta em uma instância. Útil para desserialização." #: modules/gdscript/doc_classes/@GDScript.xml:256 #, fuzzy @@ -480,8 +482,8 @@ msgid "" msgstr "" "Retorna um valor \"suavizado\" de [code]x[/code] baseado em uma função de " "atenuação definida com [code]curve[/code]. Essa função de atenuação é " -"baseada em um exponente. A [code]curve[/code] pode ser qualquer número de " -"ponto flutuante, com especÃficos valores lavando para os seguintes " +"baseada em um exponente. [code]curve[/code] pode ser qualquer número de " +"ponto flutuante, com valores especÃficos resultando nos seguintes " "comportamentos:\n" "[codeblock]\n" "- Menor que -1.0 (exclusivo): Ease in-out\n" @@ -1978,12 +1980,12 @@ msgstr "" "em torno de seu perÃmetro. Isto equivale a [code]TAU / 2[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:1210 -#, fuzzy msgid "" "The circle constant, the circumference of the unit circle in radians. This " "is equivalent to [code]PI * 2[/code], or 360 degrees in rotations." msgstr "" -"A constante do cÃrculo, a circunferência do cÃrculo unitário em radianos." +"A constante do cÃrculo, a circunferência do cÃrculo unitário em radianos. " +"Isto é equivalente a [code]PI * 2[/code] ou 360 graus em rotações." #: modules/gdscript/doc_classes/@GDScript.xml:1213 msgid "" @@ -3304,121 +3306,119 @@ msgstr "Máscara do segundo botão extra do mouse." #: doc/classes/@GlobalScope.xml:938 msgid "Invalid button or axis." -msgstr "" +msgstr "Botão ou eixo inválido." #: doc/classes/@GlobalScope.xml:941 msgid "Gamepad button 0." -msgstr "" +msgstr "Botão 0 do controle." #: doc/classes/@GlobalScope.xml:944 -#, fuzzy msgid "Gamepad button 1." -msgstr "Máscara do primeiro botão extra do mouse." +msgstr "Botão 1 do controle." #: doc/classes/@GlobalScope.xml:947 -#, fuzzy msgid "Gamepad button 2." -msgstr "Máscara do segundo botão extra do mouse." +msgstr "Botão 2 do controle." #: doc/classes/@GlobalScope.xml:950 msgid "Gamepad button 3." -msgstr "" +msgstr "Botão 3 do controle." #: doc/classes/@GlobalScope.xml:953 msgid "Gamepad button 4." -msgstr "" +msgstr "Botão 4 do controle." #: doc/classes/@GlobalScope.xml:956 msgid "Gamepad button 5." -msgstr "" +msgstr "Botão 5 do controle." #: doc/classes/@GlobalScope.xml:959 msgid "Gamepad button 6." -msgstr "" +msgstr "Botão 6 do controle." #: doc/classes/@GlobalScope.xml:962 msgid "Gamepad button 7." -msgstr "" +msgstr "Botão 7 do controle." #: doc/classes/@GlobalScope.xml:965 msgid "Gamepad button 8." -msgstr "" +msgstr "Botão 8 do controle." #: doc/classes/@GlobalScope.xml:968 msgid "Gamepad button 9." -msgstr "" +msgstr "Botão 9 do controle." #: doc/classes/@GlobalScope.xml:971 msgid "Gamepad button 10." -msgstr "" +msgstr "Botão 10 do controle." #: doc/classes/@GlobalScope.xml:974 msgid "Gamepad button 11." -msgstr "" +msgstr "Botão 11 do controle." #: doc/classes/@GlobalScope.xml:977 msgid "Gamepad button 12." -msgstr "" +msgstr "Botão 12 do controle." #: doc/classes/@GlobalScope.xml:980 msgid "Gamepad button 13." -msgstr "" +msgstr "Botão 13 do controle." #: doc/classes/@GlobalScope.xml:983 msgid "Gamepad button 14." -msgstr "" +msgstr "Botão 14 do controle." #: doc/classes/@GlobalScope.xml:986 msgid "Gamepad button 15." -msgstr "" +msgstr "Botão 15 do controle." #: doc/classes/@GlobalScope.xml:989 msgid "Gamepad button 16." -msgstr "" +msgstr "Botão 16 do controle." #: doc/classes/@GlobalScope.xml:992 msgid "Gamepad button 17." -msgstr "" +msgstr "Botão 17 do controle." #: doc/classes/@GlobalScope.xml:995 msgid "Gamepad button 18." -msgstr "" +msgstr "Botão 18 do controle." #: doc/classes/@GlobalScope.xml:998 msgid "Gamepad button 19." -msgstr "" +msgstr "Botão 19 do controle." #: doc/classes/@GlobalScope.xml:1001 msgid "Gamepad button 20." -msgstr "" +msgstr "Botão 20 do controle." #: doc/classes/@GlobalScope.xml:1004 msgid "Gamepad button 21." -msgstr "" +msgstr "Botão 21 do controle." #: doc/classes/@GlobalScope.xml:1007 msgid "Gamepad button 22." -msgstr "" +msgstr "Botão 22 do controle." #: doc/classes/@GlobalScope.xml:1010 msgid "Represents the maximum number of joystick buttons supported." -msgstr "" +msgstr "Representa o número máximo de botões de joystick suportados." #: doc/classes/@GlobalScope.xml:1013 msgid "DualShock circle button." -msgstr "" +msgstr "Botão CÃrculo do DualShock." #: doc/classes/@GlobalScope.xml:1016 msgid "DualShock X button." -msgstr "" +msgstr "Botão X do DualShock." #: doc/classes/@GlobalScope.xml:1019 msgid "DualShock square button." -msgstr "" +msgstr "Botão quadrado do DualShock." #: doc/classes/@GlobalScope.xml:1022 msgid "DualShock triangle button." -msgstr "" +msgstr "Botão triângulo do Dualshock." #: doc/classes/@GlobalScope.xml:1025 #, fuzzy @@ -3470,7 +3470,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1055 msgid "Trigger on a VR controller." -msgstr "" +msgstr "Gatilho em um controle VR." #: doc/classes/@GlobalScope.xml:1058 msgid "" @@ -3494,11 +3494,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1070 msgid "Gamepad button Select." -msgstr "" +msgstr "Botão Select do controle." #: doc/classes/@GlobalScope.xml:1073 msgid "Gamepad button Start." -msgstr "" +msgstr "Botão Start do controle." #: doc/classes/@GlobalScope.xml:1076 msgid "Gamepad DPad up." @@ -3696,7 +3696,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1223 msgid "Generic error." -msgstr "" +msgstr "Erro genérico." #: doc/classes/@GlobalScope.xml:1226 msgid "Unavailable error." @@ -3728,15 +3728,15 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1247 msgid "File: Bad path error." -msgstr "" +msgstr "Arquivo: Erro caminho incorreto." #: doc/classes/@GlobalScope.xml:1250 msgid "File: No permission error." -msgstr "" +msgstr "Aquivo: Erro sem permissão." #: doc/classes/@GlobalScope.xml:1253 msgid "File: Already in use error." -msgstr "" +msgstr "Arquivo: Erro arquivo já em uso." #: doc/classes/@GlobalScope.xml:1256 msgid "File: Can't open error." @@ -3800,7 +3800,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1301 msgid "Connection error." -msgstr "" +msgstr "Erro de conexão." #: doc/classes/@GlobalScope.xml:1304 msgid "Can't acquire resource error." @@ -3836,11 +3836,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1328 msgid "Compilation failed error." -msgstr "" +msgstr "Erro de compilação fracassada." #: doc/classes/@GlobalScope.xml:1331 msgid "Method not found error." -msgstr "" +msgstr "Erro de método não encontrado." #: doc/classes/@GlobalScope.xml:1334 msgid "Linking failed error." @@ -3856,7 +3856,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1343 msgid "Invalid declaration error." -msgstr "" +msgstr "Erro de declaração inválida." #: doc/classes/@GlobalScope.xml:1346 msgid "Duplicate symbol error." @@ -3876,7 +3876,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1358 msgid "Help error." -msgstr "" +msgstr "Erro de ajuda." #: doc/classes/@GlobalScope.xml:1361 msgid "Bug error." @@ -4037,7 +4037,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1445 msgid "The property can be checked in the editor inspector." -msgstr "" +msgstr "A propriedade pode ser checada no inspetor do editor." #: doc/classes/@GlobalScope.xml:1448 msgid "The property is checked in the editor inspector." @@ -4112,111 +4112,111 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1502 msgid "Variable is [code]null[/code]." -msgstr "" +msgstr "Variável é [code]null[/code]." #: doc/classes/@GlobalScope.xml:1505 msgid "Variable is of type [bool]." -msgstr "" +msgstr "Variável é do tipo [bool]." #: doc/classes/@GlobalScope.xml:1508 msgid "Variable is of type [int]." -msgstr "" +msgstr "Variável é do tipo [int]." #: doc/classes/@GlobalScope.xml:1511 msgid "Variable is of type [float] (real)." -msgstr "" +msgstr "Variável é do tipo [float] (real)." #: doc/classes/@GlobalScope.xml:1514 msgid "Variable is of type [String]." -msgstr "" +msgstr "Variável é do tipo [String]." #: doc/classes/@GlobalScope.xml:1517 msgid "Variable is of type [Vector2]." -msgstr "" +msgstr "Variável é do tipo [Vector2]." #: doc/classes/@GlobalScope.xml:1520 msgid "Variable is of type [Rect2]." -msgstr "" +msgstr "Variável é do tipo [Rect2]." #: doc/classes/@GlobalScope.xml:1523 msgid "Variable is of type [Vector3]." -msgstr "" +msgstr "Variável é do tipo [Vector3]." #: doc/classes/@GlobalScope.xml:1526 msgid "Variable is of type [Transform2D]." -msgstr "" +msgstr "Variável é do tipo [Transform2D]." #: doc/classes/@GlobalScope.xml:1529 msgid "Variable is of type [Plane]." -msgstr "" +msgstr "Variável é do tipo [Plane]." #: doc/classes/@GlobalScope.xml:1532 msgid "Variable is of type [Quat]." -msgstr "" +msgstr "Variável é do tipo [Quat]." #: doc/classes/@GlobalScope.xml:1535 msgid "Variable is of type [AABB]." -msgstr "" +msgstr "Variável é do tipo [AABB]." #: doc/classes/@GlobalScope.xml:1538 msgid "Variable is of type [Basis]." -msgstr "" +msgstr "Variável é do tipo [Basis]." #: doc/classes/@GlobalScope.xml:1541 msgid "Variable is of type [Transform]." -msgstr "" +msgstr "Variável é do tipo [Transform]." #: doc/classes/@GlobalScope.xml:1544 msgid "Variable is of type [Color]." -msgstr "" +msgstr "Variável é do tipo [Color]." #: doc/classes/@GlobalScope.xml:1547 msgid "Variable is of type [NodePath]." -msgstr "" +msgstr "Variável é do tipo [NodePath]." #: doc/classes/@GlobalScope.xml:1550 msgid "Variable is of type [RID]." -msgstr "" +msgstr "Variável é do tipo [RID]." #: doc/classes/@GlobalScope.xml:1553 msgid "Variable is of type [Object]." -msgstr "" +msgstr "Variável é do tipo [Object]." #: doc/classes/@GlobalScope.xml:1556 msgid "Variable is of type [Dictionary]." -msgstr "" +msgstr "Variável é do tipo [Dictionary]." #: doc/classes/@GlobalScope.xml:1559 msgid "Variable is of type [Array]." -msgstr "" +msgstr "Variável é do tipo [Array]." #: doc/classes/@GlobalScope.xml:1562 msgid "Variable is of type [PoolByteArray]." -msgstr "" +msgstr "Variável é do tipo [PoolByteArray]." #: doc/classes/@GlobalScope.xml:1565 msgid "Variable is of type [PoolIntArray]." -msgstr "" +msgstr "Variável é do tipo [PoolIntArray]." #: doc/classes/@GlobalScope.xml:1568 msgid "Variable is of type [PoolRealArray]." -msgstr "" +msgstr "Variável é do tipo [PoolRealArray]." #: doc/classes/@GlobalScope.xml:1571 msgid "Variable is of type [PoolStringArray]." -msgstr "" +msgstr "Variável é do tipo [PoolStringArray]." #: doc/classes/@GlobalScope.xml:1574 msgid "Variable is of type [PoolVector2Array]." -msgstr "" +msgstr "Variável é do tipo [PoolVector2Array]." #: doc/classes/@GlobalScope.xml:1577 msgid "Variable is of type [PoolVector3Array]." -msgstr "" +msgstr "Variável é do tipo [PoolVector3Array]." #: doc/classes/@GlobalScope.xml:1580 msgid "Variable is of type [PoolColorArray]." -msgstr "" +msgstr "Variável é do tipo [PoolColorArray]." #: doc/classes/@GlobalScope.xml:1583 msgid "Represents the size of the [enum Variant.Type] enum." @@ -4244,11 +4244,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1601 msgid "Greater than or equal operator ([code]>=[/code])." -msgstr "" +msgstr "Operador igual ou maior que ([code]>=[/code])." #: doc/classes/@GlobalScope.xml:1604 msgid "Addition operator ([code]+[/code])." -msgstr "" +msgstr "Operador de adição ([code]+[/code])." #: doc/classes/@GlobalScope.xml:1607 msgid "Subtraction operator ([code]-[/code])." @@ -4256,11 +4256,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1610 msgid "Multiplication operator ([code]*[/code])." -msgstr "" +msgstr "Operador de multiplicação ([code]*[/code])." #: doc/classes/@GlobalScope.xml:1613 msgid "Division operator ([code]/[/code])." -msgstr "" +msgstr "Operador de divisão ([code]/[/code])." #: doc/classes/@GlobalScope.xml:1616 msgid "Unary negation operator ([code]-[/code])." @@ -4377,112 +4377,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4578,6 +4587,8 @@ msgstr "" #: doc/classes/AcceptDialog.xml:82 msgid "Emitted when a custom button is pressed. See [method add_button]." msgstr "" +"Emitido quando um botão personalizado é pressionado. Veja [method " +"add_button]." #: doc/classes/AESContext.xml:4 msgid "Interface to low level AES encryption features." @@ -4724,19 +4735,19 @@ msgstr "" #: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48 msgid "If [code]true[/code], texture will be centered." -msgstr "" +msgstr "Se [code]true[/code], a texture será centralizada." #: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39 #: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21 #: doc/classes/TextureRect.xml:20 msgid "If [code]true[/code], texture is flipped horizontally." -msgstr "" +msgstr "Se [code]true[/code], a textura será invertida horizontalmente." #: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42 #: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24 #: doc/classes/TextureRect.xml:23 msgid "If [code]true[/code], texture is flipped vertically." -msgstr "" +msgstr "Se [code]true[/code], a textura será invertida verticalmente." #: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38 msgid "The displayed animation frame's index." @@ -4744,7 +4755,7 @@ msgstr "" #: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41 msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "" +msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)." #: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58 #: doc/classes/SpriteBase3D.xml:63 @@ -4757,7 +4768,7 @@ msgstr "" #: doc/classes/AnimatedSprite.xml:62 msgid "The animation speed is multiplied by this value." -msgstr "" +msgstr "A velocidade da animação é multiplicada por este valor." #: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50 msgid "" @@ -4768,7 +4779,7 @@ msgstr "" #: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55 msgid "Emitted when [member frame] changed." -msgstr "" +msgstr "Emitido quando [member frame] muda." #: doc/classes/AnimatedSprite3D.xml:4 msgid "" @@ -4922,7 +4933,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html" #: doc/classes/Animation.xml:28 msgid "Adds a track to the Animation." -msgstr "" +msgstr "Adiciona uma trilha à Animação." #: doc/classes/Animation.xml:36 msgid "" @@ -5130,7 +5141,7 @@ msgstr "" #: doc/classes/Animation.xml:317 msgid "Gets the type of a track." -msgstr "" +msgstr "Obtém o tipo de uma trilha." #: doc/classes/Animation.xml:327 msgid "Insert a generic key in a given track." @@ -5149,7 +5160,7 @@ msgstr "" #: doc/classes/Animation.xml:348 msgid "Moves a track down." -msgstr "" +msgstr "Move uma trilha para baixo." #: doc/classes/Animation.xml:356 msgid "" @@ -5159,7 +5170,7 @@ msgstr "" #: doc/classes/Animation.xml:363 msgid "Moves a track up." -msgstr "" +msgstr "Move uma trilha para cima." #: doc/classes/Animation.xml:371 msgid "Removes a key by index in a given track." @@ -5315,11 +5326,11 @@ msgstr "" #: doc/classes/Animation.xml:552 msgid "Linear interpolation." -msgstr "" +msgstr "Interpolação linear." #: doc/classes/Animation.xml:555 msgid "Cubic interpolation." -msgstr "" +msgstr "Interpolação cúbica." #: doc/classes/Animation.xml:558 msgid "Update between keyframes." @@ -5341,7 +5352,7 @@ msgstr "" #: doc/classes/AnimationNode.xml:4 msgid "Base resource for [AnimationTree] nodes." -msgstr "" +msgstr "Recurso base para nós [AnimationTree]." #: doc/classes/AnimationNode.xml:7 msgid "" @@ -5565,7 +5576,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -5879,18 +5890,20 @@ msgid "" "Returns [code]true[/code] if a sub-node with specified [code]name[/code] " "exists." msgstr "" +"Retorna [code]true[/code] se um subnó com um [code]name[/code] especificado " +"existe." #: doc/classes/AnimationNodeBlendTree.xml:64 msgid "Removes a sub-node." -msgstr "" +msgstr "Remove um subnó." #: doc/classes/AnimationNodeBlendTree.xml:72 msgid "Changes the name of a sub-node." -msgstr "" +msgstr "Muda o nome de um subnó." #: doc/classes/AnimationNodeBlendTree.xml:80 msgid "Modifies the position of a sub-node." -msgstr "" +msgstr "Modifica a posição de um subnó." #: doc/classes/AnimationNodeBlendTree.xml:86 msgid "The global offset of all sub-nodes." @@ -6144,7 +6157,7 @@ msgstr "" #: doc/classes/AnimationNodeStateMachineTransition.xml:29 msgid "The transition type." -msgstr "" +msgstr "O tipo de transição." #: doc/classes/AnimationNodeStateMachineTransition.xml:32 msgid "The time to cross-fade between this state and the next." @@ -6473,11 +6486,11 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:234 msgid "Notifies when an animation finished playing." -msgstr "" +msgstr "Notifica quando uma animação termina de reproduzir." #: doc/classes/AnimationPlayer.xml:240 msgid "Notifies when an animation starts playing." -msgstr "" +msgstr "Notifica quando uma animação começa a reproduzir." #: doc/classes/AnimationPlayer.xml:245 msgid "" @@ -6738,7 +6751,7 @@ msgstr "" #: doc/classes/AnimationTreePlayer.xml:188 msgid "Check if a node exists (by name)." -msgstr "" +msgstr "Checa se um nó existe (pelo nome)." #: doc/classes/AnimationTreePlayer.xml:195 msgid "" @@ -6851,7 +6864,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]." #: doc/classes/AnimationTreePlayer.xml:357 msgid "Resets this [AnimationTreePlayer]." -msgstr "" +msgstr "Reseta este [AnimationTreePlayer]." #: doc/classes/AnimationTreePlayer.xml:364 #, fuzzy @@ -6964,7 +6977,7 @@ msgstr "" #: doc/classes/AnimationTreePlayer.xml:478 msgid "Animation node." -msgstr "" +msgstr "Nó de animação." #: doc/classes/AnimationTreePlayer.xml:481 msgid "OneShot node." @@ -6976,15 +6989,15 @@ msgstr "" #: doc/classes/AnimationTreePlayer.xml:487 msgid "Blend2 node." -msgstr "" +msgstr "Nó Blend2." #: doc/classes/AnimationTreePlayer.xml:490 msgid "Blend3 node." -msgstr "" +msgstr "Nó Blend3." #: doc/classes/AnimationTreePlayer.xml:493 msgid "Blend4 node." -msgstr "" +msgstr "Nó Blend4." #: doc/classes/AnimationTreePlayer.xml:496 msgid "TimeScale node." @@ -6996,7 +7009,7 @@ msgstr "" #: doc/classes/AnimationTreePlayer.xml:502 msgid "Transition node." -msgstr "" +msgstr "Nó de transição." #: doc/classes/Area.xml:4 msgid "3D area for detection and physics and audio influence." @@ -8251,11 +8264,11 @@ msgstr "" #: doc/classes/ARVRController.xml:76 msgid "Emitted when a button on this controller is pressed." -msgstr "" +msgstr "Emitido quando um botão é pressionado neste controle." #: doc/classes/ARVRController.xml:82 msgid "Emitted when a button on this controller is released." -msgstr "" +msgstr "Emitido quando um botão é solto neste controle." #: doc/classes/ARVRController.xml:88 msgid "" @@ -8338,7 +8351,7 @@ msgstr "" #: doc/classes/ARVRInterface.xml:63 msgid "Turns the interface off." -msgstr "" +msgstr "Desliga a interface." #: doc/classes/ARVRInterface.xml:69 msgid "On an AR interface, [code]true[/code] if anchor detection is enabled." @@ -8666,7 +8679,7 @@ msgstr "" #: doc/classes/ARVRServer.xml:120 msgid "Removes this interface." -msgstr "" +msgstr "Remove esta interface." #: doc/classes/ARVRServer.xml:127 msgid "Removes this positional tracker." @@ -8684,11 +8697,11 @@ msgstr "" #: doc/classes/ARVRServer.xml:143 msgid "Emitted when a new interface has been added." -msgstr "" +msgstr "Emitido quando uma nova interface é adicionada." #: doc/classes/ARVRServer.xml:149 msgid "Emitted when an interface is removed." -msgstr "" +msgstr "Emitido quando uma interface é removida." #: doc/classes/ARVRServer.xml:157 msgid "" @@ -9412,7 +9425,7 @@ msgstr "" #: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123 #: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159 msgid "The voice's volume." -msgstr "" +msgstr "O volume da voz." #: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126 #: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162 @@ -9426,7 +9439,7 @@ msgstr "" #: doc/classes/AudioEffectChorus.xml:168 msgid "The amount of voices in the effect." -msgstr "" +msgstr "A quantidade de vozes no efeito." #: doc/classes/AudioEffectChorus.xml:171 msgid "The effect's processed signal." @@ -9592,7 +9605,7 @@ msgstr "" #: doc/classes/AudioEffectDistortion.xml:18 msgid "Distortion power. Value can range from 0 to 1." -msgstr "" +msgstr "Poder de distorção. O valor pode variar de 0 a 1." #: doc/classes/AudioEffectDistortion.xml:21 msgid "" @@ -9602,7 +9615,7 @@ msgstr "" #: doc/classes/AudioEffectDistortion.xml:24 msgid "Distortion type." -msgstr "" +msgstr "Tipo de distorção." #: doc/classes/AudioEffectDistortion.xml:27 msgid "" @@ -10323,7 +10336,7 @@ msgstr "" #: doc/classes/AudioServer.xml:321 msgid "Emitted when the [AudioBusLayout] changes." -msgstr "" +msgstr "Emitido quando o [AudioBusLayout] muda." #: doc/classes/AudioServer.xml:327 msgid "Two or fewer speakers were detected." @@ -10524,7 +10537,7 @@ msgstr "" #: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44 #: doc/classes/AudioStreamPlayer3D.xml:45 msgid "Stops the audio." -msgstr "" +msgstr "Para o áudio." #: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56 msgid "If [code]true[/code], audio plays when added to scene tree." @@ -10550,7 +10563,7 @@ msgstr "" #: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68 #: doc/classes/AudioStreamPlayer3D.xml:94 msgid "If [code]true[/code], audio is playing." -msgstr "" +msgstr "Se [code]true[/code], o áudio está sendo reproduzido." #: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71 msgid "The [AudioStream] object to be played." @@ -10564,20 +10577,20 @@ msgstr "" #: doc/classes/AudioStreamPlayer.xml:75 msgid "Volume of sound, in dB." -msgstr "" +msgstr "Volume do som, em dB." #: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83 #: doc/classes/AudioStreamPlayer3D.xml:112 msgid "Emitted when the audio stops playing." -msgstr "" +msgstr "Emitido quando o áudio para de reproduzir." #: doc/classes/AudioStreamPlayer.xml:87 msgid "The audio will be played only on the first channel." -msgstr "" +msgstr "O áudio será tocado somente no primeiro canal." #: doc/classes/AudioStreamPlayer.xml:90 msgid "The audio will be played on all surround channels." -msgstr "" +msgstr "O áudio será reproduzido em todos os canais surround." #: doc/classes/AudioStreamPlayer.xml:93 msgid "" @@ -10586,7 +10599,7 @@ msgstr "" #: doc/classes/AudioStreamPlayer2D.xml:4 msgid "Plays positional sound in 2D space." -msgstr "" +msgstr "Reproduz um som posicional em espaço 2D." #: doc/classes/AudioStreamPlayer2D.xml:7 msgid "" @@ -10635,7 +10648,7 @@ msgstr "" #: doc/classes/AudioStreamPlayer3D.xml:4 msgid "Plays positional sound in 3D space." -msgstr "" +msgstr "Reproduz um som posicional em espaço 3D." #: doc/classes/AudioStreamPlayer3D.xml:7 msgid "" @@ -10888,11 +10901,11 @@ msgstr "" #: doc/classes/AudioStreamSample.xml:50 msgid "8-bit audio codec." -msgstr "" +msgstr "Codec de áudio 8-bits." #: doc/classes/AudioStreamSample.xml:53 msgid "16-bit audio codec." -msgstr "" +msgstr "Codec de áudio 16-bits." #: doc/classes/AudioStreamSample.xml:56 msgid "Audio is compressed using IMA ADPCM." @@ -10900,7 +10913,7 @@ msgstr "" #: doc/classes/AudioStreamSample.xml:59 msgid "Audio does not loop." -msgstr "" +msgstr "O áudio não repete." #: doc/classes/AudioStreamSample.xml:62 msgid "" @@ -10975,17 +10988,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10994,24 +11011,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -11025,62 +11042,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -11088,35 +11105,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -11124,13 +11141,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -11142,78 +11159,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." -msgstr "" +msgstr "Atualmente inutilizado." -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Retorna o arco-tangente dos parâmetros." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11305,7 +11322,7 @@ msgstr "" #: doc/classes/BaseButton.xml:62 msgid "[ButtonGroup] associated to the button." -msgstr "" +msgstr "[ButtonGroup] associado ao botão." #: doc/classes/BaseButton.xml:65 msgid "" @@ -11344,11 +11361,11 @@ msgstr "" #: doc/classes/BaseButton.xml:85 msgid "Emitted when the button starts being held down." -msgstr "" +msgstr "Emitido quando um botão começa a ser pressionado." #: doc/classes/BaseButton.xml:90 msgid "Emitted when the button stops being held down." -msgstr "" +msgstr "Emitido quando um botão para de ser pressionado." #: doc/classes/BaseButton.xml:95 msgid "" @@ -11670,8 +11687,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -11953,7 +11973,7 @@ msgstr "" #: doc/classes/Button.xml:4 msgid "Standard themed Button." -msgstr "" +msgstr "Botão temático padrão." #: doc/classes/Button.xml:7 msgid "" @@ -12022,15 +12042,15 @@ msgstr "" #: doc/classes/Button.xml:51 msgid "Align the text to the left." -msgstr "" +msgstr "Alinha o texto pela esquerda." #: doc/classes/Button.xml:54 msgid "Align the text to the center." -msgstr "" +msgstr "Alinha o texto pelo centro." #: doc/classes/Button.xml:57 msgid "Align the text to the right." -msgstr "" +msgstr "Alinha o texto pela direita." #: doc/classes/Button.xml:62 msgid "[StyleBox] used when the [Button] is disabled." @@ -12049,7 +12069,7 @@ msgstr "" #: doc/classes/Button.xml:71 msgid "Default text [Color] of the [Button]." -msgstr "" +msgstr "[Color] do texto padrão do [Button]." #: doc/classes/Button.xml:74 msgid "Text [Color] used when the [Button] is disabled." @@ -12088,7 +12108,7 @@ msgstr "" #: doc/classes/ButtonGroup.xml:4 msgid "Group of Buttons." -msgstr "" +msgstr "Grupo de botões." #: doc/classes/ButtonGroup.xml:7 msgid "" @@ -12109,7 +12129,7 @@ msgstr "" #: doc/classes/ButtonGroup.xml:33 msgid "Emitted when one of the buttons of the group is pressed." -msgstr "" +msgstr "Emitido quando um dos botões do grupo é pressionado." #: doc/classes/Camera.xml:4 msgid "Camera node, displays from a point of view." @@ -12396,7 +12416,7 @@ msgstr "" #: doc/classes/Camera2D.xml:4 msgid "Camera node for 2D scenes." -msgstr "" +msgstr "Nó de câmera para cenas 2D." #: doc/classes/Camera2D.xml:7 msgid "" @@ -12441,7 +12461,7 @@ msgstr "" #: doc/classes/Camera2D.xml:38 msgid "Returns the camera position." -msgstr "" +msgstr "Retorna a posição da câmera." #: doc/classes/Camera2D.xml:44 msgid "" @@ -12550,6 +12570,7 @@ msgstr "" msgid "" "If [code]true[/code], draws the camera's limits rectangle in the editor." msgstr "" +"Se [code]true[/code], desenha o retângulo dos limites da câmera no editor." #: doc/classes/Camera2D.xml:126 msgid "" @@ -12716,7 +12737,7 @@ msgstr "" #: doc/classes/CameraFeed.xml:54 msgid "Unspecified position." -msgstr "" +msgstr "Posição não especificada." #: doc/classes/CameraFeed.xml:57 msgid "Camera is mounted at the front of the device." @@ -12756,7 +12777,7 @@ msgstr "" #: doc/classes/CameraServer.xml:43 msgid "Removes a [CameraFeed]." -msgstr "" +msgstr "Remove uma [CameraFeed]." #: doc/classes/CameraServer.xml:51 msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)." @@ -12811,7 +12832,7 @@ msgstr "" #: doc/classes/CanvasItem.xml:4 msgid "Base class of anything 2D." -msgstr "" +msgstr "Classe base de qualquer coisa 2D." #: doc/classes/CanvasItem.xml:7 msgid "" @@ -12874,7 +12895,7 @@ msgstr "" #: doc/classes/CanvasItem.xml:57 msgid "Draws a colored circle." -msgstr "" +msgstr "Desenha um cÃrculo colorido." #: doc/classes/CanvasItem.xml:69 msgid "Draws a colored polygon of any amount of points, convex or concave." @@ -13023,7 +13044,7 @@ msgstr "" #: doc/classes/CanvasItem.xml:287 msgid "Returns the global position of the mouse." -msgstr "" +msgstr "Retorna a posição global do mouse." #: doc/classes/CanvasItem.xml:293 msgid "Returns the global transform matrix of this item." @@ -13136,7 +13157,7 @@ msgstr "" #: doc/classes/CanvasItem.xml:418 msgid "The color applied to textures on this [CanvasItem]." -msgstr "" +msgstr "A cor aplicada à s texturas neste [CanvasItem]." #: doc/classes/CanvasItem.xml:421 msgid "" @@ -13146,11 +13167,11 @@ msgstr "" #: doc/classes/CanvasItem.xml:424 msgid "If [code]true[/code], the object draws behind its parent." -msgstr "" +msgstr "Se [code]true[/code], o objeto é desenhado por trás de seu pai." #: doc/classes/CanvasItem.xml:427 msgid "If [code]true[/code], the object draws on top of its parent." -msgstr "" +msgstr "Se [code]true[/code], o objeto é desenhado por cima de seu pai." #: doc/classes/CanvasItem.xml:430 msgid "" @@ -13249,7 +13270,7 @@ msgstr "" #: doc/classes/CanvasItemMaterial.xml:4 msgid "A material for [CanvasItem]s." -msgstr "" +msgstr "Um material para [CanvasItem]s." #: doc/classes/CanvasItemMaterial.xml:7 msgid "" @@ -13437,11 +13458,11 @@ msgstr "" #: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7 msgid "Capsule shape for collisions." -msgstr "" +msgstr "Formato de cápsula para colisões." #: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15 msgid "The capsule's height." -msgstr "" +msgstr "A altura da cápsula." #: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18 msgid "The capsule's radius." @@ -13449,11 +13470,11 @@ msgstr "" #: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7 msgid "Capsule shape for 2D collisions." -msgstr "" +msgstr "Formato de cápsula para colisões 2D." #: doc/classes/CenterContainer.xml:4 msgid "Keeps children controls centered." -msgstr "" +msgstr "Mantém os controles dos filhos centralizados." #: doc/classes/CenterContainer.xml:7 msgid "" @@ -13765,7 +13786,7 @@ msgstr "" #: doc/classes/CircleShape2D.xml:4 msgid "Circular shape for 2D collisions." -msgstr "" +msgstr "Formato circular para colisões 2D." #: doc/classes/CircleShape2D.xml:7 msgid "" @@ -13902,7 +13923,7 @@ msgstr "" #: doc/classes/ClassDB.xml:162 msgid "Returns the names of all the classes available." -msgstr "" +msgstr "Retorna os nomes de todas as classes disponÃveis." #: doc/classes/ClassDB.xml:169 msgid "" @@ -14007,7 +14028,7 @@ msgstr "" #: doc/classes/CollisionObject.xml:4 msgid "Base node for collision objects." -msgstr "" +msgstr "Nó base para objetos de colisão." #: doc/classes/CollisionObject.xml:7 msgid "" @@ -14047,7 +14068,7 @@ msgstr "" #: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45 msgid "Returns the object's [RID]." -msgstr "" +msgstr "Retorna o [RID] do objeto." #: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58 msgid "" @@ -14178,7 +14199,7 @@ msgstr "" #: doc/classes/CollisionObject2D.xml:4 msgid "Base node for 2D collision objects." -msgstr "" +msgstr "Nó base para objetos de colisão 2D." #: doc/classes/CollisionObject2D.xml:7 msgid "" @@ -14316,7 +14337,7 @@ msgstr "" #: doc/classes/CollisionPolygon.xml:18 msgid "If [code]true[/code], no collision will be produced." -msgstr "" +msgstr "Se [code]true[/code], não se produzirá colisões." #: doc/classes/CollisionPolygon.xml:21 msgid "" @@ -14336,7 +14357,7 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml:4 msgid "Defines a 2D collision polygon." -msgstr "" +msgstr "Define um polÃgono de colisão 2D." #: doc/classes/CollisionPolygon2D.xml:7 msgid "" @@ -14823,7 +14844,7 @@ msgstr "" #: doc/classes/Color.xml:298 msgid "Black color." -msgstr "" +msgstr "Cor Preta." #: doc/classes/Color.xml:301 msgid "Blanche almond color." @@ -14831,7 +14852,7 @@ msgstr "" #: doc/classes/Color.xml:304 msgid "Blue color." -msgstr "" +msgstr "Cor azul." #: doc/classes/Color.xml:307 msgid "Blue violet color." @@ -14839,7 +14860,7 @@ msgstr "" #: doc/classes/Color.xml:310 msgid "Brown color." -msgstr "" +msgstr "Cor marrom." #: doc/classes/Color.xml:313 msgid "Burly wood color." @@ -14987,7 +15008,7 @@ msgstr "" #: doc/classes/Color.xml:421 msgid "Gold color." -msgstr "" +msgstr "Cor dourada." #: doc/classes/Color.xml:424 msgid "Goldenrod color." @@ -14995,11 +15016,11 @@ msgstr "" #: doc/classes/Color.xml:427 msgid "Gray color." -msgstr "" +msgstr "Cor cinza." #: doc/classes/Color.xml:430 msgid "Green color." -msgstr "" +msgstr "Cor verde." #: doc/classes/Color.xml:433 msgid "Green yellow color." @@ -15047,7 +15068,7 @@ msgstr "" #: doc/classes/Color.xml:466 msgid "Light blue color." -msgstr "" +msgstr "Cor azul claro." #: doc/classes/Color.xml:469 msgid "Light coral color." @@ -15111,7 +15132,7 @@ msgstr "" #: doc/classes/Color.xml:514 msgid "Magenta color." -msgstr "" +msgstr "Cor magenta." #: doc/classes/Color.xml:517 msgid "Maroon color." @@ -15231,7 +15252,7 @@ msgstr "" #: doc/classes/Color.xml:604 msgid "Pink color." -msgstr "" +msgstr "Cor rosa." #: doc/classes/Color.xml:607 msgid "Plum color." @@ -15243,7 +15264,7 @@ msgstr "" #: doc/classes/Color.xml:613 msgid "Purple color." -msgstr "" +msgstr "Cor roxa." #: doc/classes/Color.xml:616 msgid "Rebecca purple color." @@ -15251,7 +15272,7 @@ msgstr "" #: doc/classes/Color.xml:619 msgid "Red color." -msgstr "" +msgstr "Cor vermelha." #: doc/classes/Color.xml:622 msgid "Rosy brown color." @@ -15287,7 +15308,7 @@ msgstr "" #: doc/classes/Color.xml:646 msgid "Silver color." -msgstr "" +msgstr "Cor prata." #: doc/classes/Color.xml:649 msgid "Sky blue color." @@ -15363,7 +15384,7 @@ msgstr "" #: doc/classes/Color.xml:703 msgid "White color." -msgstr "" +msgstr "Cor branca." #: doc/classes/Color.xml:706 msgid "White smoke color." @@ -15371,7 +15392,7 @@ msgstr "" #: doc/classes/Color.xml:709 msgid "Yellow color." -msgstr "" +msgstr "Cor amarela." #: doc/classes/Color.xml:712 msgid "Yellow green color." @@ -15446,7 +15467,7 @@ msgstr "" #: doc/classes/ColorPicker.xml:65 msgid "Emitted when the color is changed." -msgstr "" +msgstr "Emitido quando a cor muda." #: doc/classes/ColorPicker.xml:71 msgid "Emitted when a preset is added." @@ -15531,7 +15552,7 @@ msgstr "" #: doc/classes/ColorPickerButton.xml:44 msgid "Emitted when the color changes." -msgstr "" +msgstr "Emitido quando a cor muda." #: doc/classes/ColorPickerButton.xml:49 msgid "" @@ -15541,7 +15562,7 @@ msgstr "" #: doc/classes/ColorPickerButton.xml:54 msgid "Emitted when the [ColorPicker] is closed." -msgstr "" +msgstr "Emitido quando o [ColorPicker] é fechado." #: doc/classes/ColorPickerButton.xml:62 msgid "The background of the color preview rect on the button." @@ -15603,7 +15624,7 @@ msgstr "" #: doc/classes/ColorRect.xml:4 msgid "Colored rectangle." -msgstr "" +msgstr "Retângulo colorido." #: doc/classes/ColorRect.xml:7 msgid "" @@ -15922,7 +15943,7 @@ msgstr "" #: doc/classes/Container.xml:4 msgid "Base node for containers." -msgstr "" +msgstr "Nó base para os containers." #: doc/classes/Container.xml:7 msgid "" @@ -15945,7 +15966,7 @@ msgstr "" #: doc/classes/Container.xml:31 msgid "Emitted when sorting the children is needed." -msgstr "" +msgstr "Emitido quando se é necessário organizar os filhos." #: doc/classes/Container.xml:37 msgid "" @@ -16359,7 +16380,7 @@ msgstr "" #: doc/classes/Control.xml:353 msgid "Returns the rotation (in radians)." -msgstr "" +msgstr "Retorna a rotação (em radianos)." #: doc/classes/Control.xml:361 msgid "" @@ -16879,6 +16900,8 @@ msgid "" "The node's global position, relative to the world (usually to the top-left " "corner of the window)." msgstr "" +"A posição global do nó, em relação ao mundo (geralmente no canto superior " +"esquerdo da janela)." #: doc/classes/Control.xml:780 msgid "" @@ -16963,19 +16986,19 @@ msgstr "" #: doc/classes/Control.xml:815 msgid "Emitted when the node gains keyboard focus." -msgstr "" +msgstr "Emitido quando o nó ganha foco do teclado." #: doc/classes/Control.xml:820 msgid "Emitted when the node loses keyboard focus." -msgstr "" +msgstr "Emitido quando o nó perde foco do teclado." #: doc/classes/Control.xml:826 msgid "Emitted when the node receives an [InputEvent]." -msgstr "" +msgstr "Emitido quando o nó recebe um [InputEvent]." #: doc/classes/Control.xml:831 msgid "Emitted when the node's minimum size changes." -msgstr "" +msgstr "Emitido quando o tamanho mÃnimo do nó muda." #: doc/classes/Control.xml:836 msgid "Emitted when a modal [Control] is closed. See [method show_modal]." @@ -17002,7 +17025,7 @@ msgstr "" #: doc/classes/Control.xml:853 msgid "Emitted when the control changes size." -msgstr "" +msgstr "Emitido quando o controle muda de tamanho." #: doc/classes/Control.xml:858 msgid "" @@ -17032,11 +17055,11 @@ msgstr "" #: doc/classes/Control.xml:876 msgid "Sent when the mouse pointer enters the node." -msgstr "" +msgstr "Enviado quando o ponteiro do mouse entra no nó." #: doc/classes/Control.xml:879 msgid "Sent when the mouse pointer exits the node." -msgstr "" +msgstr "Enviado quando o ponteiro do mouse sai do nó." #: doc/classes/Control.xml:882 msgid "Sent when the node grabs focus." @@ -17284,19 +17307,19 @@ msgstr "" #: doc/classes/Control.xml:999 msgid "The control will be resized to its minimum size." -msgstr "" +msgstr "O controle será redimensionado ao seu tamanho mÃnimo." #: doc/classes/Control.xml:1002 msgid "The control's width will not change." -msgstr "" +msgstr "A largura do controle não irá mudar." #: doc/classes/Control.xml:1005 msgid "The control's height will not change." -msgstr "" +msgstr "A altura do controle não irá mudar." #: doc/classes/Control.xml:1008 msgid "The control's size will not change." -msgstr "" +msgstr "O tamanho do controle não irá mudar." #: doc/classes/Control.xml:1011 msgid "" @@ -17482,7 +17505,7 @@ msgstr "" #: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53 msgid "Restarts the particle emitter." -msgstr "" +msgstr "Reinicia o emissor de partÃculas." #: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61 msgid "Sets the base value of the parameter specified by [enum Parameter]." @@ -17556,7 +17579,7 @@ msgstr "" #: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122 #: doc/classes/ParticlesMaterial.xml:106 msgid "Particle animation speed." -msgstr "" +msgstr "Velocidade da animação das partÃculas." #: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125 msgid "Each particle's animation speed will vary along this [Curve]." @@ -17967,15 +17990,17 @@ msgstr "" #: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326 msgid "Use with [method set_particle_flag] to set [member flag_align_y]." -msgstr "" +msgstr "Use com [method set_particle_flag] para definir [member flag_align_y]." #: doc/classes/CPUParticles.xml:349 msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]." msgstr "" +"Use com [method set_particle_flag] para definir [member flag_rotate_y]." #: doc/classes/CPUParticles.xml:352 msgid "Use with [method set_particle_flag] to set [member flag_disable_z]." msgstr "" +"Use com [method set_particle_flag] para definir [member flag_disable_z]." #: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335 #: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307 @@ -18022,7 +18047,7 @@ msgstr "" #: doc/classes/CPUParticles2D.xml:4 msgid "CPU-based 2D particle emitter." -msgstr "" +msgstr "Emissor de partÃculas 2D baseado em CPU." #: doc/classes/CPUParticles2D.xml:7 msgid "" @@ -18103,6 +18128,8 @@ msgstr "" #: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77 msgid "Particle texture. If [code]null[/code], particles will be squares." msgstr "" +"A textura das partÃculas. Se [code]null[/code], as partÃculas serão " +"quadrados." #: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332 msgid "Present for consistency with 3D particle nodes, not used in 2D." @@ -18116,7 +18143,7 @@ msgstr "" #: doc/classes/CPUParticles2D.xml:344 msgid "Particles will be emitted in the area of a rectangle." -msgstr "" +msgstr "As partÃculas serão emitidas na área do retângulo." #: doc/classes/Crypto.xml:4 msgid "Access to advanced cryptographic functionalities." @@ -18348,7 +18375,7 @@ msgstr "" #: modules/csg/doc_classes/CSGCylinder.xml:18 msgid "The height of the cylinder." -msgstr "" +msgstr "A altura do cilindro." #: modules/csg/doc_classes/CSGCylinder.xml:21 msgid "The material used to render the cylinder." @@ -18776,7 +18803,7 @@ msgstr "" #: doc/classes/CubeMap.xml:15 msgid "Returns the [CubeMap]'s height." -msgstr "" +msgstr "Retorna a altura do [CubeMap]." #: doc/classes/CubeMap.xml:22 msgid "" @@ -18990,7 +19017,7 @@ msgstr "" #: doc/classes/Curve.xml:4 msgid "A mathematic curve." -msgstr "" +msgstr "Uma curva matemática." #: doc/classes/Curve.xml:7 msgid "" @@ -19021,7 +19048,7 @@ msgstr "" #: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27 #: doc/classes/Curve3D.xml:27 msgid "Removes all points from the curve." -msgstr "" +msgstr "Remove todos os pontos da curva." #: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61 #: doc/classes/Curve3D.xml:74 @@ -19418,7 +19445,7 @@ msgstr "" #: doc/classes/CurveTexture.xml:4 msgid "A texture that shows a curve." -msgstr "" +msgstr "Uma textura que exibe uma curva." #: doc/classes/CurveTexture.xml:7 msgid "" @@ -19432,7 +19459,7 @@ msgstr "" #: doc/classes/CurveTexture.xml:18 msgid "The width of the texture." -msgstr "" +msgstr "A largura de uma textura." #: doc/classes/CylinderMesh.xml:4 msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -19484,7 +19511,7 @@ msgstr "" #: doc/classes/CylinderShape.xml:18 msgid "The cylinder's height." -msgstr "" +msgstr "A altura do cilindro." #: doc/classes/CylinderShape.xml:21 msgid "The cylinder's radius." @@ -20219,7 +20246,7 @@ msgstr "" #: doc/classes/DynamicFont.xml:105 msgid "The font size in pixels." -msgstr "" +msgstr "O tamanho da fonte em pixels." #: doc/classes/DynamicFont.xml:108 msgid "" @@ -20602,15 +20629,15 @@ msgstr "" #: doc/classes/EditorFileDialog.xml:72 msgid "Emitted when a directory is selected." -msgstr "" +msgstr "Emitido quando um diretório é selecionado." #: doc/classes/EditorFileDialog.xml:78 msgid "Emitted when a file is selected." -msgstr "" +msgstr "Emitido quando um arquivo é selecionado." #: doc/classes/EditorFileDialog.xml:84 msgid "Emitted when multiple files are selected." -msgstr "" +msgstr "Emitido quando múltiplos arquivos são selecionados." #: doc/classes/EditorFileDialog.xml:90 msgid "" @@ -21010,7 +21037,7 @@ msgstr "" #: doc/classes/EditorInspector.xml:34 msgid "Emitted when a property is edited in the inspector." -msgstr "" +msgstr "Emitido quando uma propriedade é editada no inspetor." #: doc/classes/EditorInspector.xml:40 msgid "" @@ -21021,7 +21048,7 @@ msgstr "" #: doc/classes/EditorInspector.xml:46 msgid "Emitted when a property is selected in the inspector." -msgstr "" +msgstr "Emitido quando uma propriedade é selecionada no inspetor." #: doc/classes/EditorInspector.xml:53 msgid "" @@ -21033,7 +21060,7 @@ msgstr "" #: doc/classes/EditorInspector.xml:61 msgid "Emitted when a resource is selected in the inspector." -msgstr "" +msgstr "Emitido quando um recurso é selecionado no inspetor." #: doc/classes/EditorInspector.xml:66 msgid "" @@ -21254,7 +21281,7 @@ msgstr "" #: doc/classes/EditorInterface.xml:164 msgid "Plays the currently active scene." -msgstr "" +msgstr "Reproduz a cena atualmente ativa." #: doc/classes/EditorInterface.xml:171 msgid "Plays the scene specified by its filepath." @@ -21262,7 +21289,7 @@ msgstr "" #: doc/classes/EditorInterface.xml:177 msgid "Plays the main scene." -msgstr "" +msgstr "Reproduz a cena principal." #: doc/classes/EditorInterface.xml:184 msgid "Reloads the scene at the given path." @@ -21276,7 +21303,7 @@ msgstr "" #: doc/classes/EditorInterface.xml:198 msgid "Saves the scene as a file at [code]path[/code]." -msgstr "" +msgstr "Salva a cena como um arquivo em [code]path[/code]." #: doc/classes/EditorInterface.xml:205 msgid "" @@ -21801,6 +21828,8 @@ msgid "" "Emitted when user closes a scene. The argument is file path to a closed " "scene." msgstr "" +"Emitido quando o usuário fecha uma cena. O argumento é um caminho de arquivo " +"para uma cena fechada." #: doc/classes/EditorPlugin.xml:553 msgid "Represents the size of the [enum DockSlot] enum." @@ -21907,7 +21936,7 @@ msgstr "" #: doc/classes/EditorProperty.xml:107 msgid "Emitted when a property was checked. Used internally." -msgstr "" +msgstr "Emitido quando uma propriedade é checada. Usado internamente." #: doc/classes/EditorProperty.xml:113 msgid "" @@ -21926,7 +21955,7 @@ msgstr "" #: doc/classes/EditorProperty.xml:134 msgid "Emitted when selected. Used internally." -msgstr "" +msgstr "Emitido quando selecionado. Usado internamente." #: doc/classes/EditorResourcePicker.xml:4 msgid "Godot editor's control for selecting [Resource] type properties." @@ -22291,7 +22320,7 @@ msgstr "" #: doc/classes/EditorSelection.xml:24 msgid "Clear the selection." -msgstr "" +msgstr "Limpa a seleção." #: doc/classes/EditorSelection.xml:30 msgid "Gets the list of selected nodes." @@ -22310,7 +22339,7 @@ msgstr "" #: doc/classes/EditorSelection.xml:50 msgid "Emitted when the selection changes." -msgstr "" +msgstr "Emitido quando a seleção muda." #: doc/classes/EditorSettings.xml:4 msgid "Object that holds the project-independent editor settings." @@ -22426,7 +22455,7 @@ msgstr "" #: doc/classes/EditorSettings.xml:121 msgid "Sets the list of favorite files and directories for this project." -msgstr "" +msgstr "Define a lista de arquivos e diretórios favoritos para este projeto." #: doc/classes/EditorSettings.xml:130 msgid "" @@ -22941,7 +22970,7 @@ msgstr "" #: doc/classes/Engine.xml:70 msgid "Returns Godot license text." -msgstr "" +msgstr "Retorna o texto da licença do Godot." #: doc/classes/Engine.xml:76 msgid "Returns the main loop object (see [MainLoop] and [SceneTree])." @@ -23189,7 +23218,7 @@ msgstr "" #: doc/classes/Environment.xml:55 msgid "The ambient light's [Color]." -msgstr "" +msgstr "A [Color] da luz do ambiente." #: doc/classes/Environment.xml:58 msgid "" @@ -23842,7 +23871,7 @@ msgstr "Retorna a tangente do parâmetro." #: doc/classes/ExternalTexture.xml:23 msgid "External texture size." -msgstr "" +msgstr "Tamanho da textura externa." #: doc/classes/File.xml:4 msgid "Type to handle file reading and writing operations." @@ -23996,7 +24025,7 @@ msgstr "" #: doc/classes/File.xml:138 msgid "Returns the size of the file in bytes." -msgstr "" +msgstr "Retorna o tamanho do arquivo em bytes." #: doc/classes/File.xml:144 msgid "" @@ -24364,7 +24393,7 @@ msgstr "" #: doc/classes/FileDialog.xml:85 msgid "Emitted when the user selects a directory." -msgstr "" +msgstr "Emitido quando o usuário seleciona um diretório." #: doc/classes/FileDialog.xml:91 msgid "" @@ -24374,7 +24403,7 @@ msgstr "" #: doc/classes/FileDialog.xml:97 msgid "Emitted when the user selects multiple files." -msgstr "" +msgstr "Emitido quando o usuário seleciona múltiplos arquivos." #: doc/classes/FileDialog.xml:103 msgid "The dialog allows selecting one, and only one file." @@ -24416,7 +24445,7 @@ msgstr "" #: doc/classes/FileDialog.xml:129 msgid "Custom icon for files." -msgstr "" +msgstr "Ãcone personalizado para arquivos." #: doc/classes/FileDialog.xml:132 msgid "The color modulation applied to the file icon." @@ -24430,7 +24459,7 @@ msgstr "" #: doc/classes/FileDialog.xml:138 msgid "Custom icon for folders." -msgstr "" +msgstr "Ãcone personalizado para diretórios." #: doc/classes/FileDialog.xml:141 msgid "The color modulation applied to the folder icon." @@ -25752,21 +25781,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25775,14 +25815,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25792,36 +25836,36 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." @@ -25829,46 +25873,46 @@ msgstr "" "Se [code]true[/code], os nós filhos são organizados, do contrário, a " "organização é desabilitada." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -26702,7 +26746,7 @@ msgstr "" #: modules/gridmap/doc_classes/GridMap.xml:4 msgid "Node for 3D tile-based maps." -msgstr "" +msgstr "Nó para mapas 3D baseados em mosaicos." #: modules/gridmap/doc_classes/GridMap.xml:7 msgid "" @@ -27201,7 +27245,7 @@ msgstr "" #: doc/classes/HSeparator.xml:4 msgid "Horizontal separator." -msgstr "" +msgstr "Separador horizontal." #: doc/classes/HSeparator.xml:7 msgid "" @@ -28390,11 +28434,11 @@ msgstr "" #: doc/classes/Image.xml:152 msgid "Flips the image horizontally." -msgstr "" +msgstr "Inverte a imagem horizontalmente." #: doc/classes/Image.xml:158 msgid "Flips the image vertically." -msgstr "" +msgstr "Inverte a imagem verticalmente." #: doc/classes/Image.xml:165 msgid "" @@ -28416,11 +28460,11 @@ msgstr "Retorna o cosseno do parâmetro." #: doc/classes/Image.xml:178 msgid "Returns the image's format. See [enum Format] constants." -msgstr "" +msgstr "Retorna o formato da imagem. Veja os constantes [enum Format]." #: doc/classes/Image.xml:184 msgid "Returns the image's height." -msgstr "" +msgstr "Retorna a altura da imagem." #: doc/classes/Image.xml:191 msgid "" @@ -28462,7 +28506,7 @@ msgstr "" #: doc/classes/Image.xml:231 msgid "Returns the image's width." -msgstr "" +msgstr "Retorna a largura da imagem." #: doc/classes/Image.xml:237 msgid "Returns [code]true[/code] if the image has generated mipmaps." @@ -28947,7 +28991,7 @@ msgstr "" #: doc/classes/Image.xml:574 msgid "Image does not have alpha." -msgstr "" +msgstr "A imagem não contém alfa." #: doc/classes/Image.xml:577 msgid "Image stores alpha in a single bit." @@ -28955,27 +28999,27 @@ msgstr "" #: doc/classes/Image.xml:580 msgid "Image uses alpha." -msgstr "" +msgstr "A Imagem usa alpha." #: doc/classes/Image.xml:583 msgid "Use S3TC compression." -msgstr "" +msgstr "Use a compressão S3TC." #: doc/classes/Image.xml:586 msgid "Use PVRTC2 compression." -msgstr "" +msgstr "Use a compressão PVRTC2." #: doc/classes/Image.xml:589 msgid "Use PVRTC4 compression." -msgstr "" +msgstr "Use a compressão PVRTC4." #: doc/classes/Image.xml:592 msgid "Use ETC compression." -msgstr "" +msgstr "Use a compressão ETC." #: doc/classes/Image.xml:595 msgid "Use ETC2 compression." -msgstr "" +msgstr "Use a compressão ETC2." #: doc/classes/Image.xml:598 msgid "" @@ -28995,7 +29039,7 @@ msgstr "" #: doc/classes/ImageTexture.xml:4 msgid "A [Texture] based on an [Image]." -msgstr "" +msgstr "Uma [Texture] baseada em uma [Image]." #: doc/classes/ImageTexture.xml:7 msgid "" @@ -30111,7 +30155,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30556,7 +30602,7 @@ msgstr "" #: doc/classes/ItemList.xml:35 msgid "Removes all items from the list." -msgstr "" +msgstr "Remove todos os itens da lista." #: doc/classes/ItemList.xml:41 msgid "" @@ -30860,7 +30906,7 @@ msgstr "" #: doc/classes/ItemList.xml:398 msgid "Icon is drawn above the text." -msgstr "" +msgstr "O Ãcone é desenhado por cima do texto." #: doc/classes/ItemList.xml:401 msgid "Icon is drawn to the left of the text." @@ -30868,7 +30914,7 @@ msgstr "" #: doc/classes/ItemList.xml:404 msgid "Only allow selecting a single item." -msgstr "" +msgstr "Permite que somente um item seja selecionado." #: doc/classes/ItemList.xml:407 msgid "Allows selecting multiple items by holding Ctrl or Shift." @@ -30895,11 +30941,11 @@ msgstr "" #: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407 msgid "[Font] of the item's text." -msgstr "" +msgstr "[Font] do texto do item." #: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410 msgid "Default text [Color] of the item." -msgstr "" +msgstr "[Color] padrão do texto do item." #: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413 msgid "Text [Color] used when the item is selected." @@ -30913,15 +30959,15 @@ msgstr "" #: doc/classes/ItemList.xml:436 msgid "The horizontal spacing between items." -msgstr "" +msgstr "O espaço horizontal entre os itens." #: doc/classes/ItemList.xml:439 msgid "The spacing between item's icon and text." -msgstr "" +msgstr "O espaço entre o Ãcone e o texto do item." #: doc/classes/ItemList.xml:442 msgid "The vertical spacing between each line of text." -msgstr "" +msgstr "O espaço vertical entre cada linha de texto." #: doc/classes/ItemList.xml:445 msgid "" @@ -30936,7 +30982,7 @@ msgstr "" #: doc/classes/ItemList.xml:451 msgid "The vertical spacing between items." -msgstr "" +msgstr "O espaço vertical entre os itens." #: doc/classes/JavaScript.xml:4 msgid "" @@ -31430,7 +31476,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31495,22 +31542,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31525,7 +31574,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31533,19 +31582,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31616,7 +31665,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31674,7 +31724,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -31814,7 +31866,7 @@ msgstr "" #: doc/classes/Label.xml:24 msgid "Returns the font size in pixels." -msgstr "" +msgstr "Retorna o tamanho da fonte em pixels." #: doc/classes/Label.xml:30 msgid "" @@ -31920,7 +31972,7 @@ msgstr "" #: doc/classes/Label.xml:105 msgid "Default text [Color] of the [Label]." -msgstr "" +msgstr "[Color] padrão do texto do [Label]." #: doc/classes/Label.xml:108 msgid "[Color] of the text's shadow effect." @@ -32399,7 +32451,7 @@ msgstr "" #: doc/classes/Line2D.xml:4 msgid "A 2D line." -msgstr "" +msgstr "Uma linha 2D." #: doc/classes/Line2D.xml:7 msgid "" @@ -32425,11 +32477,11 @@ msgstr "" #: doc/classes/Line2D.xml:27 msgid "Removes all points from the line." -msgstr "" +msgstr "Remove todos os pontos da linha." #: doc/classes/Line2D.xml:33 msgid "Returns the Line2D's amount of points." -msgstr "" +msgstr "Retorna a quantidade de pontos de uma Line2D." #: doc/classes/Line2D.xml:40 msgid "Returns point [code]i[/code]'s position." @@ -32509,7 +32561,7 @@ msgstr "" #: doc/classes/Line2D.xml:95 msgid "The line's width." -msgstr "" +msgstr "A largura da linha." #: doc/classes/Line2D.xml:98 msgid "" @@ -32783,7 +32835,7 @@ msgstr "" #: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506 msgid "Emitted when the text changes." -msgstr "" +msgstr "Emitido quando o texto muda." #: doc/classes/LineEdit.xml:191 msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]." @@ -32811,7 +32863,7 @@ msgstr "" #: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530 msgid "Copies the selected text." -msgstr "" +msgstr "Copia o texto selecionado." #: doc/classes/LineEdit.xml:215 msgid "" @@ -32867,7 +32919,7 @@ msgstr "" #: doc/classes/LineEdit.xml:254 msgid "Default font color." -msgstr "" +msgstr "Cor padrão da fonte." #: doc/classes/LineEdit.xml:257 msgid "Font color for selected text (inside the selection rectangle)." @@ -33104,7 +33156,7 @@ msgstr "" #: doc/classes/MainLoop.xml:57 msgid "Called before the program exits." -msgstr "" +msgstr "Chamada antes do programa fechar." #: doc/classes/MainLoop.xml:65 msgid "" @@ -33466,7 +33518,7 @@ msgstr "" #: doc/classes/MenuButton.xml:58 msgid "Default text [Color] of the [MenuButton]." -msgstr "" +msgstr "[Color] padrão do texto do [MenuButton]." #: doc/classes/MenuButton.xml:61 msgid "Text [Color] used when the [MenuButton] is disabled." @@ -34097,7 +34149,7 @@ msgstr "" #: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29 msgid "Emitted when the [member texture] is changed." -msgstr "" +msgstr "Emitido quando a [member texture] muda." #: doc/classes/MeshLibrary.xml:4 msgid "Library of meshes." @@ -34170,7 +34222,7 @@ msgstr "" #: doc/classes/MeshLibrary.xml:101 msgid "Removes the item." -msgstr "" +msgstr "Remove o item." #: doc/classes/MeshLibrary.xml:109 msgid "Sets the item's mesh." @@ -35236,7 +35288,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -35625,11 +35677,11 @@ msgstr "" #: doc/classes/NetworkedMultiplayerPeer.xml:59 msgid "Emitted when a connection attempt fails." -msgstr "" +msgstr "Emitido quando uma tentativa de conexão falha." #: doc/classes/NetworkedMultiplayerPeer.xml:64 msgid "Emitted when a connection attempt succeeds." -msgstr "" +msgstr "Emitido quando uma tentativa de conexão tem sucesso." #: doc/classes/NetworkedMultiplayerPeer.xml:70 msgid "Emitted by the server when a client connects." @@ -35776,7 +35828,7 @@ msgstr "" #: doc/classes/NinePatchRect.xml:61 msgid "Emitted when the node's texture changes." -msgstr "" +msgstr "Emitido quando a textura de um nó muda." #: doc/classes/NinePatchRect.xml:67 msgid "" @@ -36700,15 +36752,15 @@ msgstr "" #: doc/classes/Node.xml:713 msgid "Emitted when the node is ready." -msgstr "" +msgstr "Emitido quando o nó está preparado." #: doc/classes/Node.xml:718 msgid "Emitted when the node is renamed." -msgstr "" +msgstr "Emitido quando o nó é renomeado." #: doc/classes/Node.xml:723 msgid "Emitted when the node enters the tree." -msgstr "" +msgstr "Emitido quando o nó entra na árvore." #: doc/classes/Node.xml:728 msgid "Emitted after the node exits the tree and is no longer active." @@ -37653,7 +37705,7 @@ msgstr "" #: doc/classes/Object.xml:418 msgid "Emitted whenever the object's script is changed." -msgstr "" +msgstr "Emitido cada vez que o script do objeto muda." #: doc/classes/Object.xml:424 msgid "Called right when the object is initialized. Not available in script." @@ -38552,7 +38604,7 @@ msgstr "Retorna o número de nós nesta [SceneTree]." #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38582,14 +38634,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38599,7 +38651,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40489,7 +40541,7 @@ msgstr "" #: doc/classes/Path.xml:22 msgid "Emitted when the [member curve] changes." -msgstr "" +msgstr "Emitido quando a [member curve] muda." #: doc/classes/Path2D.xml:4 msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow." @@ -41117,17 +41169,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -41145,11 +41223,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -41344,7 +41422,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -42147,6 +42227,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -42164,7 +42262,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -42278,7 +42376,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43564,7 +43664,7 @@ msgstr "" #: doc/classes/Popup.xml:70 msgid "Emitted when a popup is hidden." -msgstr "" +msgstr "Emitido quando um popup é ocultado." #: doc/classes/Popup.xml:76 msgid "Notification sent right after the popup is shown." @@ -44320,7 +44420,7 @@ msgstr "" #: doc/classes/ProceduralSky.xml:46 msgid "The sun's color." -msgstr "" +msgstr "A cor do sol." #: doc/classes/ProceduralSky.xml:49 msgid "" @@ -44399,11 +44499,11 @@ msgstr "" #: doc/classes/ProgressBar.xml:33 msgid "The color of the text." -msgstr "" +msgstr "A cor do texto." #: doc/classes/ProgressBar.xml:36 msgid "The color of the text's shadow." -msgstr "" +msgstr "A cor da sombra do texto." #: doc/classes/ProjectSettings.xml:4 msgid "Contains global variables accessible from everywhere." @@ -44827,24 +44927,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44854,7 +44960,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44864,27 +44970,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44892,81 +44998,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44974,109 +45080,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -45087,91 +45193,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -45180,13 +45286,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -45196,7 +45302,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -45204,19 +45310,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -45230,45 +45336,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -45277,7 +45383,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -45288,7 +45394,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -45304,14 +45410,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -45319,49 +45425,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -45370,7 +45476,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45378,7 +45484,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45386,7 +45492,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45396,7 +45502,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -45405,7 +45511,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -45414,7 +45520,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45424,7 +45530,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45432,7 +45538,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -45442,7 +45548,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -45452,7 +45558,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45460,7 +45566,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -45469,7 +45575,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45477,7 +45583,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -45489,477 +45595,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." -msgstr "" +msgstr "Nome opcional para a camada 1 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." -msgstr "" +msgstr "Nome opcional para a camada 10 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." -msgstr "" +msgstr "Nome opcional para a camada 11 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." -msgstr "" +msgstr "Nome opcional para a camada 12 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." -msgstr "" +msgstr "Nome opcional para a camada 13 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." -msgstr "" +msgstr "Nome opcional para a camada 14 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." -msgstr "" +msgstr "Nome opcional para a camada 15 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." -msgstr "" +msgstr "Nome opcional para a camada 16 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." -msgstr "" +msgstr "Nome opcional para a camada 17 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." -msgstr "" +msgstr "Nome opcional para a camada 18 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." -msgstr "" +msgstr "Nome opcional para a camada 19 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." -msgstr "" +msgstr "Nome opcional para a camada 2 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." -msgstr "" +msgstr "Nome opcional para a camada 20 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." -msgstr "" +msgstr "Nome opcional para a camada 21 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." -msgstr "" +msgstr "Nome opcional para a camada 22 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." -msgstr "" +msgstr "Nome opcional para a camada 23 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." -msgstr "" +msgstr "Nome opcional para a camada 24 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." -msgstr "" +msgstr "Nome opcional para a camada 25 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." -msgstr "" +msgstr "Nome opcional para a camada 26 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." -msgstr "" +msgstr "Nome opcional para a camada 27 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." -msgstr "" +msgstr "Nome opcional para a camada 28 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." -msgstr "" +msgstr "Nome opcional para a camada 29 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." -msgstr "" +msgstr "Nome opcional para a camada 3 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." -msgstr "" +msgstr "Nome opcional para a camada 30 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." -msgstr "" +msgstr "Nome opcional para a camada 31 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." -msgstr "" +msgstr "Nome opcional para a camada 32 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." -msgstr "" +msgstr "Nome opcional para a camada 4 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." -msgstr "" +msgstr "Nome opcional para a camada 5 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." -msgstr "" +msgstr "Nome opcional para a camada 6 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." -msgstr "" +msgstr "Nome opcional para a camada 7 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." -msgstr "" +msgstr "Nome opcional para a camada 8 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." -msgstr "" +msgstr "Nome opcional para a camada 9 da fÃsica 2D." -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." -msgstr "" +msgstr "Nome opcional para a camada 1 da renderização 2D." -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." -msgstr "" +msgstr "Nome opcional para a camada 10 da renderização 2D." -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." -msgstr "" +msgstr "Nome opcional para a camada 11 da renderização 2D." -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." -msgstr "" +msgstr "Nome opcional para a camada 12 da renderização 2D." -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." -msgstr "" +msgstr "Nome opcional para a camada 13 da renderização 2D." -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." -msgstr "" +msgstr "Nome opcional para a camada 14 da renderização 2D." -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." -msgstr "" +msgstr "Nome opcional para a camada 15 da renderização 2D." -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." -msgstr "" +msgstr "Nome opcional para a camada 16 da renderização 2D." -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." -msgstr "" +msgstr "Nome opcional para a camada 17 da renderização 2D." -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." -msgstr "" +msgstr "Nome opcional para a camada 18 da renderização 2D." -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." -msgstr "" +msgstr "Nome opcional para a camada 19 da renderização 2D." -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." -msgstr "" +msgstr "Nome opcional para a camada 2 da renderização 2D." -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." -msgstr "" +msgstr "Nome opcional para a camada 20 da renderização 2D." -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." -msgstr "" +msgstr "Nome opcional para a camada 3 da renderização 2D." -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." -msgstr "" +msgstr "Nome opcional para a camada 4 da renderização 2D." -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." -msgstr "" +msgstr "Nome opcional para a camada 5 da renderização 2D." -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." -msgstr "" +msgstr "Nome opcional para a camada 6 da renderização 2D." -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." -msgstr "" +msgstr "Nome opcional para a camada 7 da renderização 2D." -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." -msgstr "" +msgstr "Nome opcional para a camada 8 da renderização 2D." -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." -msgstr "" +msgstr "Nome opcional para a camada 9 da renderização 2D." -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." -msgstr "" +msgstr "Nome opcional para a camada 1 da renderização 3D." -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." -msgstr "" +msgstr "Nome opcional para a camada 10 da renderização 3D." -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." -msgstr "" +msgstr "Nome opcional para a camada 11 da renderização 3D." -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." -msgstr "" +msgstr "Nome opcional para a camada 12 da renderização 3D." -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." -msgstr "" +msgstr "Nome opcional para a camada 13 da renderização 3D." -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" -msgstr "" +msgstr "Nome opcional para a camada 14 da renderização 3D" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." -msgstr "" +msgstr "Nome opcional para a camada 15 da renderização 3D." -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." -msgstr "" +msgstr "Nome opcional para a camada 16 da renderização 3D." -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." -msgstr "" +msgstr "Nome opcional para a camada 17 da renderização 3D." -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." -msgstr "" +msgstr "Nome opcional para a camada 18 da renderização 3D." -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." -msgstr "" +msgstr "Nome opcional para a camada 19 da renderização 3D." -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." -msgstr "" +msgstr "Nome opcional para a camada 2 da renderização 3D." -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." -msgstr "" +msgstr "Nome opcional para a camada 20 da renderização 3D." -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." -msgstr "" +msgstr "Nome opcional para a camada 3 da renderização 3D." -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." -msgstr "" +msgstr "Nome opcional para a camada 4 da renderização 3D." -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." -msgstr "" +msgstr "Nome opcional para a camada 5 da renderização 3D." -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." -msgstr "" +msgstr "Nome opcional para a camada 6 da renderização 3D." -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." -msgstr "" +msgstr "Nome opcional para a camada 7 da renderização 3D." -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." -msgstr "" +msgstr "Nome opcional para a camada 8 da renderização 3D." -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." -msgstr "" +msgstr "Nome opcional para a camada 9 da renderização 3D." -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45967,92 +46073,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -46062,33 +46168,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46101,7 +46207,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46113,7 +46219,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46125,7 +46231,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46138,7 +46244,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -46146,28 +46252,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -46177,25 +46283,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46208,7 +46314,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46220,7 +46326,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46232,7 +46338,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46245,13 +46351,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -46259,11 +46365,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -46277,7 +46383,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -46286,7 +46392,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -46302,7 +46408,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -46312,7 +46418,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46322,7 +46428,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -46333,7 +46439,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46343,7 +46449,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -46351,7 +46457,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -46362,7 +46468,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -46377,7 +46483,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -46386,13 +46492,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -46401,7 +46507,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -46411,7 +46517,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -46423,7 +46529,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -46433,24 +46539,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -46459,7 +46565,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -46467,7 +46573,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -46476,7 +46582,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -46486,7 +46592,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -46494,31 +46600,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46526,7 +46632,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46536,21 +46642,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46558,31 +46664,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46590,7 +46696,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46600,7 +46706,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46609,7 +46715,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46618,20 +46724,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46640,7 +46746,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46648,7 +46754,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46657,7 +46763,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46667,20 +46773,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46689,13 +46795,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46705,46 +46811,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46754,7 +46860,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46766,7 +46872,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46774,7 +46880,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46782,7 +46888,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46791,7 +46897,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46805,7 +46911,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46815,7 +46921,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46824,7 +46930,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46834,54 +46940,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46892,61 +46998,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46957,7 +47063,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46966,26 +47072,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46996,20 +47102,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -47021,52 +47127,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -47074,7 +47180,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -47087,7 +47193,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -47099,7 +47205,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -47111,7 +47217,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -47123,7 +47229,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -47135,7 +47241,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47532,7 +47638,7 @@ msgstr "" #: doc/classes/Range.xml:67 msgid "Emitted when [member value] changes." -msgstr "" +msgstr "Emitido quando [member value] muda." #: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4 msgid "Query the closest object intersecting a ray." @@ -47805,40 +47911,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47846,14 +47966,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49224,7 +49344,7 @@ msgstr "" #: doc/classes/RichTextLabel.xml:377 msgid "The default text color." -msgstr "" +msgstr "A cor padrão do texto." #: doc/classes/RichTextLabel.xml:380 msgid "The background The background used when the [RichTextLabel] is focused." @@ -49238,7 +49358,7 @@ msgstr "" #: doc/classes/RichTextLabel.xml:386 msgid "The color of the font's shadow." -msgstr "" +msgstr "A cor da sombra da fonte." #: doc/classes/RichTextLabel.xml:389 msgid "The font used for italics text." @@ -49246,7 +49366,7 @@ msgstr "" #: doc/classes/RichTextLabel.xml:392 msgid "The vertical space between lines." -msgstr "" +msgstr "O espaço vertical entre linhas." #: doc/classes/RichTextLabel.xml:395 msgid "The font used for monospace text." @@ -49258,7 +49378,7 @@ msgstr "" #: doc/classes/RichTextLabel.xml:401 msgid "The default text font." -msgstr "" +msgstr "A fonte padrão do texto." #: doc/classes/RichTextLabel.xml:404 msgid "The color of the selection box." @@ -50185,6 +50305,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -50202,7 +50338,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -50210,11 +50346,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -50224,19 +50360,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -50675,7 +50811,7 @@ msgstr "" #: doc/classes/SceneTree.xml:231 msgid "The current scene." -msgstr "" +msgstr "A cena atual." #: doc/classes/SceneTree.xml:234 msgid "" @@ -50799,14 +50935,16 @@ msgid "" "Emitted when a node's configuration changed. Only emitted in [code]tool[/" "code] mode." msgstr "" +"Emitido quando a configuração de um nó muda. Só é emitido no modo " +"[code]tool[/code]." #: doc/classes/SceneTree.xml:324 msgid "Emitted whenever a node is removed from the [SceneTree]." -msgstr "" +msgstr "Emitido cada vez que um nó é removido da [SceneTree]." #: doc/classes/SceneTree.xml:330 msgid "Emitted whenever a node is renamed." -msgstr "" +msgstr "Emitido cada vez que um nó é renomeado." #: doc/classes/SceneTree.xml:335 msgid "" @@ -50912,11 +51050,11 @@ msgstr "" #: doc/classes/SceneTreeTimer.xml:22 msgid "The time remaining." -msgstr "" +msgstr "O tempo restante." #: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61 msgid "Emitted when the timer reaches 0." -msgstr "" +msgstr "Emitido quando o cronômetro chega ao 0." #: doc/classes/Script.xml:4 msgid "A class stored as a resource." @@ -50950,7 +51088,7 @@ msgstr "Retorna o script herdado diretamente por este script." #: doc/classes/Script.xml:29 msgid "Returns the script's base type." -msgstr "" +msgstr "Retorna o tipo base de um script." #: doc/classes/Script.xml:36 msgid "Returns the default value of the specified property." @@ -51379,11 +51517,12 @@ msgstr "" #: doc/classes/Shape2D.xml:4 msgid "Base class for all 2D shapes." -msgstr "" +msgstr "Classe base para todas as formas 2D." #: doc/classes/Shape2D.xml:7 msgid "Base class for all 2D shapes. All 2D shape types inherit from this." msgstr "" +"Classe base para todos os formatos 2D. Todos os formatos 2D herdam disto." #: doc/classes/Shape2D.xml:19 msgid "" @@ -51500,7 +51639,7 @@ msgstr "" #: doc/classes/Skeleton.xml:34 msgid "Clear all the bones in this skeleton." -msgstr "" +msgstr "Limpa todos os ossos neste esqueleto." #: doc/classes/Skeleton.xml:46 msgid "Returns the bone index that matches [code]name[/code] as its name." @@ -51570,7 +51709,7 @@ msgstr "" #: doc/classes/Skeleton2D.xml:4 msgid "Skeleton for 2D characters and animated objects." -msgstr "" +msgstr "Esqueleto para personagens 2D e objetos animados." #: doc/classes/Skeleton2D.xml:7 msgid "" @@ -51956,7 +52095,7 @@ msgstr "" #: doc/classes/SoftBody.xml:121 msgid "The SoftBody's mass." -msgstr "" +msgstr "A massa do SoftBody." #: doc/classes/Spatial.xml:4 msgid "Most basic 3D game object, parent of all 3D-related nodes." @@ -52241,7 +52380,7 @@ msgstr "" #: doc/classes/Spatial.xml:284 msgid "Emitted when node visibility changes." -msgstr "" +msgstr "Emitido quando a visibilidade de um nó muda." #: doc/classes/Spatial.xml:290 msgid "" @@ -52283,7 +52422,7 @@ msgstr "" #: doc/classes/SpatialMaterial.xml:4 msgid "Default 3D rendering material." -msgstr "" +msgstr "Material de renderização 3D padrão." #: doc/classes/SpatialMaterial.xml:7 msgid "" @@ -52339,7 +52478,7 @@ msgstr "" #: doc/classes/SpatialMaterial.xml:61 msgid "The material's base color." -msgstr "" +msgstr "A cor base do material." #: doc/classes/SpatialMaterial.xml:64 msgid "" @@ -53704,7 +53843,7 @@ msgstr "" #: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21 msgid "The number of columns in the sprite sheet." -msgstr "" +msgstr "O número de colunas em uma folha de sprites." #: doc/classes/Sprite.xml:54 msgid "" @@ -53741,15 +53880,15 @@ msgstr "" #: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39 msgid "Emitted when the [member frame] changes." -msgstr "" +msgstr "Emitido quando o [member frame] muda." #: doc/classes/Sprite.xml:84 msgid "Emitted when the [member texture] changes." -msgstr "" +msgstr "Emitido quando a [member texture] muda." #: doc/classes/Sprite3D.xml:4 msgid "2D sprite node in a 3D world." -msgstr "" +msgstr "Nó de sprite 2D em um mundo 3D." #: doc/classes/Sprite3D.xml:7 msgid "" @@ -53912,7 +54051,7 @@ msgstr "" #: doc/classes/SpriteFrames.xml:104 msgid "Changes the animation's name to [code]newname[/code]." -msgstr "" +msgstr "Muda o nome da animação para [code]newname[/code]." #: doc/classes/SpriteFrames.xml:112 msgid "If [code]true[/code], the animation will loop." @@ -55280,7 +55419,7 @@ msgstr "" #: doc/classes/StyleBoxFlat.xml:135 msgid "Sets the color of the border." -msgstr "" +msgstr "Define a cor da borda." #: doc/classes/StyleBoxFlat.xml:138 msgid "Border width for the bottom border." @@ -55379,7 +55518,7 @@ msgstr "" #: doc/classes/StyleBoxFlat.xml:188 msgid "The shadow size in pixels." -msgstr "" +msgstr "O tamanho da sombra em pixels." #: doc/classes/StyleBoxLine.xml:4 msgid "[StyleBox] that displays a single line." @@ -55393,7 +55532,7 @@ msgstr "" #: doc/classes/StyleBoxLine.xml:15 msgid "The line's color." -msgstr "" +msgstr "A cor da linha." #: doc/classes/StyleBoxLine.xml:18 msgid "" @@ -55680,20 +55819,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55704,28 +55848,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55737,19 +55881,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -55905,11 +56049,11 @@ msgstr "" #: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178 msgid "Emitted when switching to another tab." -msgstr "" +msgstr "Emitido quando mudando para outra aba." #: doc/classes/TabContainer.xml:168 msgid "Emitted when a tab is selected, even if it is the current tab." -msgstr "" +msgstr "Emitido quando uma aba é selecionada, mesmo se for a aba atual." #: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202 msgid "Align the tabs to the left." @@ -56013,7 +56157,7 @@ msgstr "" #: doc/classes/Tabs.xml:17 msgid "Adds a new tab." -msgstr "" +msgstr "Adiciona uma nova aba." #: doc/classes/Tabs.xml:24 msgid "Moves the scroll view to make the tab visible." @@ -56110,7 +56254,7 @@ msgstr "" #: doc/classes/Tabs.xml:190 msgid "Emitted when a tab is closed." -msgstr "" +msgstr "Emitido quando uma taba é fechada." #: doc/classes/Tabs.xml:196 msgid "Emitted when a tab is hovered by the mouse." @@ -56162,7 +56306,7 @@ msgstr "" #: doc/classes/TCP_Server.xml:4 msgid "A TCP server." -msgstr "" +msgstr "Um servidor TCP." #: doc/classes/TCP_Server.xml:7 msgid "" @@ -56302,7 +56446,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]." #: doc/classes/TextEdit.xml:137 msgid "Returns the text of a specific line." -msgstr "" +msgstr "Retorna o texto de uma linha especÃfica." #: doc/classes/TextEdit.xml:143 msgid "Returns the amount of total lines in the text." @@ -56629,7 +56773,7 @@ msgstr "" #: doc/classes/TextEdit.xml:483 msgid "Emitted when the cursor changes." -msgstr "" +msgstr "Emitido quando o cursor muda." #: doc/classes/TextEdit.xml:490 msgid "Emitted when the info icon is clicked." @@ -56693,11 +56837,11 @@ msgstr "" #: doc/classes/TextEdit.xml:599 msgid "Sets the default [Font]." -msgstr "" +msgstr "Define a [Font] padrão." #: doc/classes/TextEdit.xml:602 msgid "Sets the font [Color]." -msgstr "" +msgstr "Define a [Color] da fonte." #: doc/classes/TextEdit.xml:607 msgid "" @@ -56744,7 +56888,7 @@ msgstr "" #: doc/classes/Texture.xml:4 msgid "Texture for 2D and 3D." -msgstr "" +msgstr "Textura para 2D e 3D." #: doc/classes/Texture.xml:7 msgid "" @@ -56785,15 +56929,15 @@ msgstr "" #: doc/classes/Texture.xml:60 msgid "Returns the texture height." -msgstr "" +msgstr "Retorna a altura da textura." #: doc/classes/Texture.xml:66 msgid "Returns the texture size." -msgstr "" +msgstr "Retorna o tamanho da textura." #: doc/classes/Texture.xml:72 msgid "Returns the texture width." -msgstr "" +msgstr "Retorna a largura da textura." #: doc/classes/Texture.xml:78 #, fuzzy @@ -57007,7 +57151,7 @@ msgstr "" #: doc/classes/TextureLayered.xml:4 msgid "Base class for 3D texture types." -msgstr "" +msgstr "Classe base para tipos de textura 3D." #: doc/classes/TextureLayered.xml:7 msgid "" @@ -57068,7 +57212,7 @@ msgstr "Retorna o RID da tela usada por essa camada." #: doc/classes/TextureLayered.xml:68 msgid "Specifies which [enum Flags] apply to this texture." -msgstr "" +msgstr "Especifica quais [enum Flags] se aplicam à esta textura." #: doc/classes/TextureLayered.xml:73 msgid "" @@ -57260,7 +57404,7 @@ msgstr "" #: doc/classes/TextureRect.xml:4 msgid "Control for drawing textures." -msgstr "" +msgstr "Controle para desenhar texturas." #: doc/classes/TextureRect.xml:7 msgid "" @@ -57285,7 +57429,7 @@ msgstr "" #: doc/classes/TextureRect.xml:30 msgid "The node's [Texture] resource." -msgstr "" +msgstr "O recurso [Texture] de um nó." #: doc/classes/TextureRect.xml:35 msgid "" @@ -57323,7 +57467,7 @@ msgstr "" #: doc/classes/Theme.xml:17 msgid "Clears all values on the theme." -msgstr "" +msgstr "Limpa todos os valores no tema." #: doc/classes/Theme.xml:25 msgid "" @@ -57344,10 +57488,10 @@ msgid "" msgstr "" #: doc/classes/Theme.xml:49 -#, fuzzy msgid "" "Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]." -msgstr "Retorna o nome do nó em [code]idx[/code]." +msgstr "" +"Limpa o Ãcone em [code]name[/code] se o tema tiver [code]node_type[/code]." #: doc/classes/Theme.xml:57 msgid "" @@ -58633,7 +58777,7 @@ msgstr "" #: doc/classes/TouchScreenButton.xml:39 msgid "The button's shape." -msgstr "" +msgstr "O formato do botão." #: doc/classes/TouchScreenButton.xml:42 msgid "" @@ -58652,15 +58796,15 @@ msgstr "" #: doc/classes/TouchScreenButton.xml:54 msgid "Emitted when the button is pressed (down)." -msgstr "" +msgstr "Emitido quando o botão é pressionado (baixo)." #: doc/classes/TouchScreenButton.xml:59 msgid "Emitted when the button is released (up)." -msgstr "" +msgstr "Emitido quando o botão é solto (cima)." #: doc/classes/TouchScreenButton.xml:65 msgid "Always visible." -msgstr "" +msgstr "Sempre visÃvel." #: doc/classes/TouchScreenButton.xml:68 msgid "Visible on touch screens only." @@ -58860,7 +59004,7 @@ msgstr "" #: doc/classes/Transform2D.xml:78 msgid "Returns the scale." -msgstr "" +msgstr "Retorna a escala." #: doc/classes/Transform2D.xml:86 msgid "" @@ -58959,7 +59103,7 @@ msgstr "" #: doc/classes/Translation.xml:33 msgid "Erases a message." -msgstr "" +msgstr "Apaga uma mensagem." #: doc/classes/Translation.xml:40 msgid "Returns a message's translation." @@ -59217,7 +59361,7 @@ msgstr "" #: doc/classes/Tree.xml:200 msgid "Sets the title of a column." -msgstr "" +msgstr "Define o tÃtulo de uma coluna." #: doc/classes/Tree.xml:207 msgid "If [code]true[/code], column titles are visible." @@ -59310,19 +59454,19 @@ msgstr "" #: doc/classes/Tree.xml:298 msgid "Emitted when an item is edited." -msgstr "" +msgstr "Emitido quando um item é editado." #: doc/classes/Tree.xml:303 msgid "Emitted when an item is edited using the right mouse button." -msgstr "" +msgstr "Emitido quando um item é editado com botão direito do mouse." #: doc/classes/Tree.xml:309 msgid "Emitted when an item is selected with the right mouse button." -msgstr "" +msgstr "Emitido quando um item é selecionado com o botão direito do mouse." #: doc/classes/Tree.xml:314 msgid "Emitted when an item is selected." -msgstr "" +msgstr "Emitido quando um item é selecionado." #: doc/classes/Tree.xml:322 msgid "" @@ -59333,6 +59477,8 @@ msgstr "" #: doc/classes/Tree.xml:327 msgid "Emitted when a left mouse button click does not select any item." msgstr "" +"Emitido quando um clique com o botão esquerdo do mouse não seleciona nenhum " +"item." #: doc/classes/Tree.xml:333 msgid "" @@ -60089,7 +60235,7 @@ msgstr "" #: doc/classes/Tween.xml:200 msgid "Stops animating all tweens." -msgstr "" +msgstr "Para de animar todos os tweens." #: doc/classes/Tween.xml:215 msgid "" @@ -60141,11 +60287,11 @@ msgstr "" #: doc/classes/Tween.xml:263 msgid "Emitted when a tween ends." -msgstr "" +msgstr "Emitido quando um tween termina." #: doc/classes/Tween.xml:270 msgid "Emitted when a tween starts." -msgstr "" +msgstr "Emitido quando um tween começa." #: doc/classes/Tween.xml:279 msgid "Emitted at each step of the animation." @@ -60667,7 +60813,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNP.xml:170 msgid "The action failed." -msgstr "" +msgstr "A ação falhou." #: modules/upnp/doc_classes/UPNP.xml:173 msgid "" @@ -60731,15 +60877,15 @@ msgstr "" #: modules/upnp/doc_classes/UPNP.xml:212 msgid "Invalid duration." -msgstr "" +msgstr "Duração inválida." #: modules/upnp/doc_classes/UPNP.xml:215 msgid "Invalid arguments." -msgstr "" +msgstr "Argumentos inválidos." #: modules/upnp/doc_classes/UPNP.xml:218 msgid "Invalid response." -msgstr "" +msgstr "Resposta inválida." #: modules/upnp/doc_classes/UPNP.xml:221 msgid "Invalid parameter." @@ -60748,7 +60894,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNP.xml:224 #: modules/upnp/doc_classes/UPNPDevice.xml:69 msgid "HTTP error." -msgstr "" +msgstr "Erro HTTP." #: modules/upnp/doc_classes/UPNP.xml:227 msgid "Socket error." @@ -60836,11 +60982,11 @@ msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:61 msgid "Service type." -msgstr "" +msgstr "Tipo de serviço." #: modules/upnp/doc_classes/UPNPDevice.xml:66 msgid "OK." -msgstr "" +msgstr "OK." #: modules/upnp/doc_classes/UPNPDevice.xml:72 msgid "Empty HTTP response." @@ -60856,7 +61002,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:81 msgid "Disconnected." -msgstr "" +msgstr "Desconectado." #: modules/upnp/doc_classes/UPNPDevice.xml:84 msgid "Unknown device." @@ -60864,7 +61010,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:87 msgid "Invalid control." -msgstr "" +msgstr "Controle inválido." #: modules/upnp/doc_classes/UPNPDevice.xml:90 msgid "Memory allocation error." @@ -60979,7 +61125,7 @@ msgstr "" #: doc/classes/Vector2.xml:4 msgid "Vector used for 2D math." -msgstr "" +msgstr "Vetor utilizado para matemática 2D." #: doc/classes/Vector2.xml:7 msgid "" @@ -61268,7 +61414,7 @@ msgstr "" #: doc/classes/Vector3.xml:4 msgid "Vector used for 3D math." -msgstr "" +msgstr "Vetor utilizado para matemática 3D." #: doc/classes/Vector3.xml:7 msgid "" @@ -61747,15 +61893,15 @@ msgstr "" #: doc/classes/VideoPlayer.xml:75 msgid "Audio volume as a linear value." -msgstr "" +msgstr "Volume do áudio como um valor linear." #: doc/classes/VideoPlayer.xml:78 msgid "Audio volume in dB." -msgstr "" +msgstr "Volume do áudio em dB." #: doc/classes/VideoPlayer.xml:84 msgid "Emitted when playback is finished." -msgstr "" +msgstr "Emitido quando a reprodução termina." #: doc/classes/VideoStream.xml:4 msgid "Base resource for video streams." @@ -61896,11 +62042,11 @@ msgstr "" #: doc/classes/Viewport.xml:34 msgid "Returns the 2D world of the viewport." -msgstr "" +msgstr "Retorna o mundo 2D do viewport." #: doc/classes/Viewport.xml:40 msgid "Returns the active 3D camera." -msgstr "" +msgstr "Retorna a câmera 3D ativa." #: doc/classes/Viewport.xml:46 msgid "Returns the total transform of the viewport." @@ -62309,7 +62455,7 @@ msgstr "" #: doc/classes/Viewport.xml:371 msgid "Objects are displayed normally." -msgstr "" +msgstr "Objetos são exibidos normalmente." #: doc/classes/Viewport.xml:374 msgid "Objects are displayed without light information." @@ -62588,7 +62734,7 @@ msgstr "" #: doc/classes/VisibilityNotifier.xml:42 msgid "Emitted when the VisibilityNotifier enters the screen." -msgstr "" +msgstr "Emitido quando o VisibilityNotifier entra na tela." #: doc/classes/VisibilityNotifier.xml:47 #, fuzzy @@ -62623,11 +62769,11 @@ msgstr "" #: doc/classes/VisibilityNotifier2D.xml:31 msgid "Emitted when the VisibilityNotifier2D enters the screen." -msgstr "" +msgstr "Emitido quando o VisibilityNotifier2D entra na tela." #: doc/classes/VisibilityNotifier2D.xml:36 msgid "Emitted when the VisibilityNotifier2D exits the screen." -msgstr "" +msgstr "Emitido quando o VisibilityNotifier2D sai da tela." #: doc/classes/VisibilityNotifier2D.xml:42 msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view." @@ -62803,7 +62949,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScript.xml:165 msgid "Returns a node's position in pixels." -msgstr "" +msgstr "Retorna a posição de um nó em pixels." #: modules/visual_script/doc_classes/VisualScript.xml:172 msgid "Returns the default (initial) value of a variable." @@ -62853,7 +62999,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScript.xml:258 msgid "Remove a specific node." -msgstr "" +msgstr "Remove um nó especÃfico." #: modules/visual_script/doc_classes/VisualScript.xml:265 msgid "Remove a variable with the given name." @@ -62861,15 +63007,15 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScript.xml:273 msgid "Change the name of a custom signal." -msgstr "" +msgstr "Muda o nome de um sinal customizado." #: modules/visual_script/doc_classes/VisualScript.xml:281 msgid "Change the name of a function." -msgstr "" +msgstr "Muda o nome de uma função." #: modules/visual_script/doc_classes/VisualScript.xml:289 msgid "Change the name of a variable." -msgstr "" +msgstr "Muda o nome de uma variável." #: modules/visual_script/doc_classes/VisualScript.xml:299 msgid "" @@ -62895,7 +63041,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScript.xml:334 msgid "Position a node on the screen." -msgstr "" +msgstr "Posiciona um nó na tela." #: modules/visual_script/doc_classes/VisualScript.xml:342 msgid "Change the default (initial) value of a variable." @@ -63327,11 +63473,11 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptConstant.xml:19 msgid "The constant's type." -msgstr "" +msgstr "O tipo do constante." #: modules/visual_script/doc_classes/VisualScriptConstant.xml:22 msgid "The constant's value." -msgstr "" +msgstr "O valor do constante." #: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4 msgid "A Visual Script node which calls a base type constructor." @@ -63353,11 +63499,11 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15 msgid "Return the node's title." -msgstr "" +msgstr "Retorna o tÃtulo do nó." #: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21 msgid "Return the node's category." -msgstr "" +msgstr "Retorna a categoria do nó." #: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27 msgid "Return the count of input value ports." @@ -63748,7 +63894,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15 msgid "Name of the action." -msgstr "" +msgstr "Nome da ação." #: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18 msgid "State of the action to check. See [enum Mode] for options." @@ -63836,7 +63982,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4 msgid "Gets a local variable's value." -msgstr "" +msgstr "Obtém o valor de uma variável local." #: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7 msgid "" @@ -63851,16 +63997,16 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19 #: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21 msgid "The local variable's type." -msgstr "" +msgstr "O tipo da variável local." #: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22 #: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24 msgid "The local variable's name." -msgstr "" +msgstr "O nome da variável local." #: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4 msgid "Changes a local variable's value." -msgstr "" +msgstr "Muda o valor de uma variável local." #: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7 msgid "" @@ -64003,7 +64149,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptPreload.xml:19 msgid "The [Resource] to load." -msgstr "" +msgstr "O [Resource] para carregar." #: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4 msgid "A Visual Script node returning a value of a property from an [Object]." @@ -64218,7 +64364,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4 msgid "Node reference." -msgstr "" +msgstr "Referência de nó." #: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7 msgid "" @@ -64303,7 +64449,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16 msgid "Called by this node." -msgstr "" +msgstr "Chamado por este nó." #: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4 msgid "Branches program flow based on a given input's value." @@ -64347,7 +64493,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4 msgid "Gets a variable's value." -msgstr "" +msgstr "Obtém o valor de uma variável." #: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7 msgid "" @@ -64362,11 +64508,11 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19 #: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20 msgid "The variable's name." -msgstr "" +msgstr "Muda o nome de uma variável." #: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4 msgid "Changes a variable's value." -msgstr "" +msgstr "Muda o valor de uma variável." #: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7 msgid "" @@ -65395,7 +65541,7 @@ msgstr "" #: doc/classes/VisualServer.xml:1415 msgid "Function not implemented in Godot 3.x." -msgstr "" +msgstr "Função não implementada no Godot 3.x." #: doc/classes/VisualServer.xml:1423 msgid "" @@ -66259,7 +66405,7 @@ msgstr "" #: doc/classes/VisualServer.xml:2569 msgid "Returns the parameters of a shader." -msgstr "" +msgstr "Retorna os parâmetros de uma shader." #: doc/classes/VisualServer.xml:2577 msgid "Sets a shader's code." @@ -66395,7 +66541,7 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]." #: doc/classes/VisualServer.xml:2779 msgid "Returns the texture's width." -msgstr "" +msgstr "Retorna a largura da textura." #: doc/classes/VisualServer.xml:2788 msgid "" @@ -66432,7 +66578,7 @@ msgstr "" #: doc/classes/VisualServer.xml:2852 msgid "Sets a viewport's camera." -msgstr "" +msgstr "Define a câmera de um viewport." #: doc/classes/VisualServer.xml:2860 msgid "Sets a viewport's canvas." @@ -66908,7 +67054,7 @@ msgstr "" #: doc/classes/VisualServer.xml:3378 msgid "The light's energy." -msgstr "" +msgstr "A energia da luz." #: doc/classes/VisualServer.xml:3381 msgid "Secondary multiplier used with indirect light (light bounces)." @@ -67024,7 +67170,7 @@ msgstr "" #: doc/classes/VisualServer.xml:3462 msgid "Do not update the viewport." -msgstr "" +msgstr "Não atualize o viewport." #: doc/classes/VisualServer.xml:3465 msgid "Update the viewport once then set to disabled." @@ -67922,7 +68068,7 @@ msgstr "" #: doc/classes/VisualShaderNodeCompare.xml:32 msgid "A boolean type." -msgstr "" +msgstr "Um tipo boleano." #: doc/classes/VisualShaderNodeCompare.xml:35 msgid "A transform ([code]mat4[/code]) type." @@ -69089,15 +69235,15 @@ msgstr "" #: doc/classes/VisualShaderNodeVectorOp.xml:20 msgid "Adds two vectors." -msgstr "" +msgstr "Soma dois vetores." #: doc/classes/VisualShaderNodeVectorOp.xml:23 msgid "Subtracts a vector from a vector." -msgstr "" +msgstr "Subtrai um vetor de outro vetor." #: doc/classes/VisualShaderNodeVectorOp.xml:26 msgid "Multiplies two vectors." -msgstr "" +msgstr "Multiplica dois vetores." #: doc/classes/VisualShaderNodeVectorOp.xml:29 msgid "Divides vector by vector." @@ -69407,7 +69553,7 @@ msgstr "" #: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108 msgid "The channel was closed, or connection failed." -msgstr "" +msgstr "O canal foi fechado, ou a conexão falhou." #: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4 msgid "" @@ -69764,7 +69910,7 @@ msgstr "" #: modules/websocket/doc_classes/WebSocketClient.xml:70 msgid "Emitted when the connection to the server fails." -msgstr "" +msgstr "Emitido quando uma conexão ao servidor falha." #: modules/websocket/doc_classes/WebSocketClient.xml:76 msgid "" @@ -70343,7 +70489,7 @@ msgstr "" #: modules/webxr/doc_classes/WebXRInterface.xml:238 msgid "Emitted when [member visibility_state] has changed." -msgstr "" +msgstr "Emitido quando [member visibility_state] muda." #: doc/classes/WindowDialog.xml:4 msgid "Base class for window dialogs." @@ -70402,7 +70548,7 @@ msgstr "" #: doc/classes/WindowDialog.xml:50 msgid "The color of the title text." -msgstr "" +msgstr "A cor do texto de tÃtulo." #: doc/classes/WindowDialog.xml:53 msgid "The font used to draw the title." @@ -70543,7 +70689,7 @@ msgstr "" #: doc/classes/XMLParser.xml:15 msgid "Gets the amount of attributes in the current element." -msgstr "" +msgstr "Obtém a quantidade de atributos no elemento atual." #: doc/classes/XMLParser.xml:22 msgid "" @@ -70609,7 +70755,7 @@ msgstr "" #: doc/classes/XMLParser.xml:93 msgid "Opens an XML file for parsing. This returns an error code." -msgstr "" +msgstr "Abre um arquivo XML para análise. Isto devolve um código de erro." #: doc/classes/XMLParser.xml:100 msgid "Opens an XML raw buffer for parsing. This returns an error code." @@ -70617,7 +70763,7 @@ msgstr "" #: doc/classes/XMLParser.xml:106 msgid "Reads the next node of the file. This returns an error code." -msgstr "" +msgstr "Lê o próximo nó do arquivo. Isto retorna um código de erro." #: doc/classes/XMLParser.xml:113 msgid "" @@ -70641,27 +70787,27 @@ msgstr "" #: doc/classes/XMLParser.xml:131 msgid "End of element." -msgstr "" +msgstr "Fim do elemento." #: doc/classes/XMLParser.xml:134 msgid "Text node." -msgstr "" +msgstr "Nó de texto." #: doc/classes/XMLParser.xml:137 msgid "Comment node." -msgstr "" +msgstr "Nó de comentário." #: doc/classes/XMLParser.xml:140 msgid "CDATA content." -msgstr "" +msgstr "Conteúdo CDATA." #: doc/classes/XMLParser.xml:143 msgid "Unknown node." -msgstr "" +msgstr "Nó desconhecido." #: doc/classes/YSort.xml:4 msgid "Sort all child nodes based on their Y positions." -msgstr "" +msgstr "Ordena todos os nós filhos baseado em suas posições Y." #: doc/classes/YSort.xml:7 msgid "" diff --git a/doc/translations/ro.po b/doc/translations/ro.po index 94a0476abb..cdcfbf3f29 100644 --- a/doc/translations/ro.po +++ b/doc/translations/ro.po @@ -6,12 +6,13 @@ # EVOKZH <avip.ady@gmail.com>, 2020. # f0roots <f0rootss@gmail.com>, 2020. # Pierre Stempin <pierre.stempin@gmail.com>, 2020. +# FlooferLand <yunaflarf@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2020-10-12 09:28+0000\n" -"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n" +"PO-Revision-Date: 2021-11-07 09:45+0000\n" +"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ro/>\n" "Language: ro\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -64,7 +65,7 @@ msgstr "Descrierile Metodei" #: modules/gdscript/doc_classes/@GDScript.xml:4 msgid "Built-in GDScript functions." -msgstr "" +msgstr "FuncÈ›iile incorporate GDScript." #: modules/gdscript/doc_classes/@GDScript.xml:7 msgid "" @@ -105,6 +106,11 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" +"ÃŽntoarce valoarea absolută parametrului [code]s[/code] (adică valoarea " +"pozitivă).\n" +"[codeblock]\n" +"a = abs(-1) # a este 1\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 msgid "" @@ -196,6 +202,8 @@ msgid "" "axis) to the polar coordinate system (a distance from the origin and an " "angle)." msgstr "" +"Schimbă un punct 2D din sistemul de coordonate cartezian (axa X si Z) la " +"sistemul de coordonate polar (o distanță de la origine È™i un unghi)." #: modules/gdscript/doc_classes/@GDScript.xml:135 msgid "" @@ -1308,7 +1316,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:19 msgid "The [AudioServer] singleton." -msgstr "" +msgstr "Singletonul [AudioServer]." #: doc/classes/@GlobalScope.xml:22 msgid "The [CameraServer] singleton." @@ -1421,19 +1429,19 @@ msgstr "" #: doc/classes/@GlobalScope.xml:104 msgid "Top-left corner." -msgstr "" +msgstr "ColÈ›ul din stânga sus." #: doc/classes/@GlobalScope.xml:107 msgid "Top-right corner." -msgstr "" +msgstr "ColÈ›ul din dreapta sus." #: doc/classes/@GlobalScope.xml:110 msgid "Bottom-right corner." -msgstr "" +msgstr "ColÈ›ul din dreapta jos." #: doc/classes/@GlobalScope.xml:113 msgid "Bottom-left corner." -msgstr "" +msgstr "ColÈ›ul din stânga jos." #: doc/classes/@GlobalScope.xml:116 msgid "" @@ -1477,11 +1485,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:143 msgid "Escape key." -msgstr "" +msgstr "Tasta de ieÈ™ire." #: doc/classes/@GlobalScope.xml:146 msgid "Tab key." -msgstr "" +msgstr "Tasta tab." #: doc/classes/@GlobalScope.xml:149 msgid "Shift+Tab key." @@ -1489,7 +1497,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:152 msgid "Backspace key." -msgstr "" +msgstr "Tasta backspace." #: doc/classes/@GlobalScope.xml:155 msgid "Return key (on the main keyboard)." @@ -1509,7 +1517,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:167 msgid "Pause key." -msgstr "" +msgstr "Tasta de pauza." #: doc/classes/@GlobalScope.xml:170 msgid "Print Screen key." @@ -1585,67 +1593,67 @@ msgstr "" #: doc/classes/@GlobalScope.xml:224 msgid "F1 key." -msgstr "" +msgstr "Tasta F1." #: doc/classes/@GlobalScope.xml:227 msgid "F2 key." -msgstr "" +msgstr "Tasta F2." #: doc/classes/@GlobalScope.xml:230 msgid "F3 key." -msgstr "" +msgstr "Tasta F3." #: doc/classes/@GlobalScope.xml:233 msgid "F4 key." -msgstr "" +msgstr "Tasta F4." #: doc/classes/@GlobalScope.xml:236 msgid "F5 key." -msgstr "" +msgstr "Tasta F5." #: doc/classes/@GlobalScope.xml:239 msgid "F6 key." -msgstr "" +msgstr "Tasta F6." #: doc/classes/@GlobalScope.xml:242 msgid "F7 key." -msgstr "" +msgstr "Tasta F7." #: doc/classes/@GlobalScope.xml:245 msgid "F8 key." -msgstr "" +msgstr "Tasta F8." #: doc/classes/@GlobalScope.xml:248 msgid "F9 key." -msgstr "" +msgstr "Tasta F9." #: doc/classes/@GlobalScope.xml:251 msgid "F10 key." -msgstr "" +msgstr "Tasta F10." #: doc/classes/@GlobalScope.xml:254 msgid "F11 key." -msgstr "" +msgstr "Tasta F11." #: doc/classes/@GlobalScope.xml:257 msgid "F12 key." -msgstr "" +msgstr "Tasta F12." #: doc/classes/@GlobalScope.xml:260 msgid "F13 key." -msgstr "" +msgstr "Tasta F13." #: doc/classes/@GlobalScope.xml:263 msgid "F14 key." -msgstr "" +msgstr "Tasta F14." #: doc/classes/@GlobalScope.xml:266 msgid "F15 key." -msgstr "" +msgstr "Tasta F15." #: doc/classes/@GlobalScope.xml:269 msgid "F16 key." -msgstr "" +msgstr "Tasta F16." #: doc/classes/@GlobalScope.xml:272 msgid "Multiply (*) key on the numeric keypad." @@ -1906,107 +1914,107 @@ msgstr "" #: doc/classes/@GlobalScope.xml:467 msgid "! key." -msgstr "" +msgstr "Tasta ! ." #: doc/classes/@GlobalScope.xml:470 msgid "\" key." -msgstr "" +msgstr "Tasta \"." #: doc/classes/@GlobalScope.xml:473 msgid "# key." -msgstr "" +msgstr "Tasta #." #: doc/classes/@GlobalScope.xml:476 msgid "$ key." -msgstr "" +msgstr "Tasta $." #: doc/classes/@GlobalScope.xml:479 msgid "% key." -msgstr "" +msgstr "Tasta %." #: doc/classes/@GlobalScope.xml:482 msgid "& key." -msgstr "" +msgstr "Tasta &." #: doc/classes/@GlobalScope.xml:485 msgid "' key." -msgstr "" +msgstr "Tasta '" #: doc/classes/@GlobalScope.xml:488 msgid "( key." -msgstr "" +msgstr "Tasta (." #: doc/classes/@GlobalScope.xml:491 msgid ") key." -msgstr "" +msgstr "Tasta )" #: doc/classes/@GlobalScope.xml:494 msgid "* key." -msgstr "" +msgstr "Tasta *" #: doc/classes/@GlobalScope.xml:497 msgid "+ key." -msgstr "" +msgstr "Tasta +" #: doc/classes/@GlobalScope.xml:500 msgid ", key." -msgstr "" +msgstr "Tasta ," #: doc/classes/@GlobalScope.xml:503 msgid "- key." -msgstr "" +msgstr "Tasta -" #: doc/classes/@GlobalScope.xml:506 msgid ". key." -msgstr "" +msgstr "Tasta ." #: doc/classes/@GlobalScope.xml:509 msgid "/ key." -msgstr "" +msgstr "Tasta /" #: doc/classes/@GlobalScope.xml:512 msgid "Number 0." -msgstr "" +msgstr "Numărul 0." #: doc/classes/@GlobalScope.xml:515 msgid "Number 1." -msgstr "" +msgstr "Numărul 1." #: doc/classes/@GlobalScope.xml:518 msgid "Number 2." -msgstr "" +msgstr "Numărul 2." #: doc/classes/@GlobalScope.xml:521 msgid "Number 3." -msgstr "" +msgstr "Numărul 3." #: doc/classes/@GlobalScope.xml:524 msgid "Number 4." -msgstr "" +msgstr "Numărul 4." #: doc/classes/@GlobalScope.xml:527 msgid "Number 5." -msgstr "" +msgstr "Numărul 5." #: doc/classes/@GlobalScope.xml:530 msgid "Number 6." -msgstr "" +msgstr "Numărul 6." #: doc/classes/@GlobalScope.xml:533 msgid "Number 7." -msgstr "" +msgstr "Numărul 7." #: doc/classes/@GlobalScope.xml:536 msgid "Number 8." -msgstr "" +msgstr "Numărul 8." #: doc/classes/@GlobalScope.xml:539 msgid "Number 9." -msgstr "" +msgstr "Numărul 9." #: doc/classes/@GlobalScope.xml:542 msgid ": key." -msgstr "" +msgstr "Tasta :" #: doc/classes/@GlobalScope.xml:545 msgid "; key." @@ -2034,147 +2042,147 @@ msgstr "" #: doc/classes/@GlobalScope.xml:563 msgid "A key." -msgstr "" +msgstr "Tasta A." #: doc/classes/@GlobalScope.xml:566 msgid "B key." -msgstr "" +msgstr "Tasta B." #: doc/classes/@GlobalScope.xml:569 msgid "C key." -msgstr "" +msgstr "Tasta C." #: doc/classes/@GlobalScope.xml:572 msgid "D key." -msgstr "" +msgstr "Tasta D." #: doc/classes/@GlobalScope.xml:575 msgid "E key." -msgstr "" +msgstr "Tasta E." #: doc/classes/@GlobalScope.xml:578 msgid "F key." -msgstr "" +msgstr "Tasta F." #: doc/classes/@GlobalScope.xml:581 msgid "G key." -msgstr "" +msgstr "Tasta G." #: doc/classes/@GlobalScope.xml:584 msgid "H key." -msgstr "" +msgstr "Tasta H." #: doc/classes/@GlobalScope.xml:587 msgid "I key." -msgstr "" +msgstr "Tasta I." #: doc/classes/@GlobalScope.xml:590 msgid "J key." -msgstr "" +msgstr "Tasta J." #: doc/classes/@GlobalScope.xml:593 msgid "K key." -msgstr "" +msgstr "Tasta K." #: doc/classes/@GlobalScope.xml:596 msgid "L key." -msgstr "" +msgstr "Tasta L." #: doc/classes/@GlobalScope.xml:599 msgid "M key." -msgstr "" +msgstr "Tasta M." #: doc/classes/@GlobalScope.xml:602 msgid "N key." -msgstr "" +msgstr "Tasta N." #: doc/classes/@GlobalScope.xml:605 msgid "O key." -msgstr "" +msgstr "Tasta O." #: doc/classes/@GlobalScope.xml:608 msgid "P key." -msgstr "" +msgstr "Tasta P." #: doc/classes/@GlobalScope.xml:611 msgid "Q key." -msgstr "" +msgstr "Tasta Q." #: doc/classes/@GlobalScope.xml:614 msgid "R key." -msgstr "" +msgstr "Tasta R." #: doc/classes/@GlobalScope.xml:617 msgid "S key." -msgstr "" +msgstr "Tasta S." #: doc/classes/@GlobalScope.xml:620 msgid "T key." -msgstr "" +msgstr "Tasta T." #: doc/classes/@GlobalScope.xml:623 msgid "U key." -msgstr "" +msgstr "Tasta U." #: doc/classes/@GlobalScope.xml:626 msgid "V key." -msgstr "" +msgstr "Tasta V." #: doc/classes/@GlobalScope.xml:629 msgid "W key." -msgstr "" +msgstr "Tasta W." #: doc/classes/@GlobalScope.xml:632 msgid "X key." -msgstr "" +msgstr "Tasta X." #: doc/classes/@GlobalScope.xml:635 msgid "Y key." -msgstr "" +msgstr "Tasta Y." #: doc/classes/@GlobalScope.xml:638 msgid "Z key." -msgstr "" +msgstr "Tasta Z." #: doc/classes/@GlobalScope.xml:641 msgid "[ key." -msgstr "" +msgstr "Tasta [" #: doc/classes/@GlobalScope.xml:644 msgid "\\ key." -msgstr "" +msgstr "Tasta \\" #: doc/classes/@GlobalScope.xml:647 msgid "] key." -msgstr "" +msgstr "Tasta ]" #: doc/classes/@GlobalScope.xml:650 msgid "^ key." -msgstr "" +msgstr "Tasta ^" #: doc/classes/@GlobalScope.xml:653 msgid "_ key." -msgstr "" +msgstr "Tasta _" #: doc/classes/@GlobalScope.xml:656 msgid "` key." -msgstr "" +msgstr "Tasta `" #: doc/classes/@GlobalScope.xml:659 msgid "{ key." -msgstr "" +msgstr "Tasta {" #: doc/classes/@GlobalScope.xml:662 msgid "| key." -msgstr "" +msgstr "Tasta |" #: doc/classes/@GlobalScope.xml:665 msgid "} key." -msgstr "" +msgstr "Tasta }" #: doc/classes/@GlobalScope.xml:668 msgid "~ key." -msgstr "" +msgstr "Tasta ~" #: doc/classes/@GlobalScope.xml:671 msgid "Non-breakable space key." @@ -3592,112 +3600,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4775,7 +4792,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10174,17 +10191,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10193,24 +10214,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10224,62 +10245,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10287,35 +10308,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10323,13 +10344,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10341,77 +10362,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10867,8 +10888,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24880,21 +24904,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24903,14 +24938,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24920,80 +24959,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29209,7 +29248,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30521,7 +30562,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30586,22 +30628,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30616,7 +30660,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30624,19 +30668,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30707,7 +30751,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30765,7 +30810,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34308,7 +34355,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37621,7 +37668,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37651,14 +37698,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37668,7 +37715,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -38321,79 +38368,79 @@ msgstr "" #: doc/classes/OS.xml:1012 msgid "Sunday." -msgstr "" +msgstr "Duminică." #: doc/classes/OS.xml:1015 msgid "Monday." -msgstr "" +msgstr "Luni." #: doc/classes/OS.xml:1018 msgid "Tuesday." -msgstr "" +msgstr "MarÈ›i." #: doc/classes/OS.xml:1021 msgid "Wednesday." -msgstr "" +msgstr "Miercuri." #: doc/classes/OS.xml:1024 msgid "Thursday." -msgstr "" +msgstr "Joi." #: doc/classes/OS.xml:1027 msgid "Friday." -msgstr "" +msgstr "Vineri." #: doc/classes/OS.xml:1030 msgid "Saturday." -msgstr "" +msgstr "Sâmbătă." #: doc/classes/OS.xml:1033 msgid "January." -msgstr "" +msgstr "Ianuarie." #: doc/classes/OS.xml:1036 msgid "February." -msgstr "" +msgstr "Februarie." #: doc/classes/OS.xml:1039 msgid "March." -msgstr "" +msgstr "Martie." #: doc/classes/OS.xml:1042 msgid "April." -msgstr "" +msgstr "Aprilie." #: doc/classes/OS.xml:1045 msgid "May." -msgstr "" +msgstr "Mai." #: doc/classes/OS.xml:1048 msgid "June." -msgstr "" +msgstr "Iunie." #: doc/classes/OS.xml:1051 msgid "July." -msgstr "" +msgstr "Iulie." #: doc/classes/OS.xml:1054 msgid "August." -msgstr "" +msgstr "August." #: doc/classes/OS.xml:1057 msgid "September." -msgstr "" +msgstr "Septembrie." #: doc/classes/OS.xml:1060 msgid "October." -msgstr "" +msgstr "Octombrie." #: doc/classes/OS.xml:1063 msgid "November." -msgstr "" +msgstr "Noiembrie." #: doc/classes/OS.xml:1066 msgid "December." -msgstr "" +msgstr "Decembrie." #: doc/classes/OS.xml:1069 msgid "" @@ -40153,17 +40200,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40181,11 +40254,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40380,7 +40453,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41182,6 +41257,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41199,7 +41292,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41313,7 +41406,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43854,24 +43949,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43881,7 +43982,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43891,27 +43992,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43919,81 +44020,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44001,109 +44102,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44114,91 +44215,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44207,13 +44308,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44223,7 +44324,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44231,19 +44332,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44257,45 +44358,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44304,7 +44405,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44315,7 +44416,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44331,14 +44432,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44346,49 +44447,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44397,7 +44498,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44405,7 +44506,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44413,7 +44514,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44423,7 +44524,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44432,7 +44533,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44441,7 +44542,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44451,7 +44552,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44459,7 +44560,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44469,7 +44570,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44479,7 +44580,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44487,7 +44588,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44496,7 +44597,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44504,7 +44605,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44516,477 +44617,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44994,92 +45095,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45089,33 +45190,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45128,7 +45229,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45140,7 +45241,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45152,7 +45253,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45165,7 +45266,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45173,28 +45274,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45204,25 +45305,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45235,7 +45336,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45247,7 +45348,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45259,7 +45360,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45272,13 +45373,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45286,11 +45387,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45304,7 +45405,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45313,7 +45414,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45329,7 +45430,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45339,7 +45440,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45349,7 +45450,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45360,7 +45461,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45370,7 +45471,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45378,7 +45479,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45389,7 +45490,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45404,7 +45505,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45413,13 +45514,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45428,7 +45529,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45438,7 +45539,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45450,7 +45551,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45460,24 +45561,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45486,7 +45587,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45494,7 +45595,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45503,7 +45604,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45513,7 +45614,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45521,31 +45622,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45553,7 +45654,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45563,21 +45664,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45585,31 +45686,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45617,7 +45718,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45627,7 +45728,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45636,7 +45737,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45645,20 +45746,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45667,7 +45768,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45675,7 +45776,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45684,7 +45785,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45694,20 +45795,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45716,13 +45817,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45732,46 +45833,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45781,7 +45882,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45793,7 +45894,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45801,7 +45902,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45809,7 +45910,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45818,7 +45919,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45832,7 +45933,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45842,7 +45943,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45851,7 +45952,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45861,54 +45962,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45919,61 +46020,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45984,7 +46085,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45993,26 +46094,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46023,20 +46124,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46048,52 +46149,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46101,7 +46202,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46114,7 +46215,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46126,7 +46227,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46138,7 +46239,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46150,7 +46251,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46162,7 +46263,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46200,7 +46301,7 @@ msgstr "" #: doc/classes/Quat.xml:4 msgid "Quaternion." -msgstr "" +msgstr "Cuaternion." #: doc/classes/Quat.xml:7 msgid "" @@ -46826,40 +46927,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46867,14 +46982,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49209,6 +49324,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49226,7 +49357,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49234,11 +49365,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49248,19 +49379,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54675,20 +54806,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54699,28 +54835,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54732,19 +54868,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -59812,7 +59948,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:66 msgid "OK." -msgstr "" +msgstr "OK." #: modules/upnp/doc_classes/UPNPDevice.xml:72 msgid "Empty HTTP response." @@ -59828,7 +59964,7 @@ msgstr "" #: modules/upnp/doc_classes/UPNPDevice.xml:81 msgid "Disconnected." -msgstr "" +msgstr "Deconectat." #: modules/upnp/doc_classes/UPNPDevice.xml:84 msgid "Unknown device." diff --git a/doc/translations/ru.po b/doc/translations/ru.po index 4dd2aa3653..39386f2f63 100644 --- a/doc/translations/ru.po +++ b/doc/translations/ru.po @@ -27,12 +27,13 @@ # Alexander Sinitsyn <almoig747@gmail.com>, 2021. # Ð¢Ð¾Ð»Ñ Ð‘Ð¾Ð³Ð¾Ð¼Ð¾Ð»Ð¾Ð² <tolya.bogomolov2004@gmail.com>, 2021. # Rustam Alieskerov <rustam.aleskerov7@gmail.com>, 2021. +# Vladimir Svity <development.openworld@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-10-31 13:40+0000\n" -"Last-Translator: Rustam Alieskerov <rustam.aleskerov7@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: Сергей Волков <zerosar4@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ru/>\n" "Language: ru\n" @@ -41,7 +42,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -182,10 +183,10 @@ msgid "" "s = asin(0.5)\n" "[/codeblock]" msgstr "" -"Возвращает аркÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ " -"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, ÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. ЧиÑло [code]s[/code] " -"должно быть в промежутке между [code]-1.0[/code] и [code]1.0[/code] " -"(включительно), иначе [method asin] вернет [constant NAN].\n" +"Возвращает арккоÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ " +"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, коÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. ЧиÑло [code]s[/code] " +"должно быть между [code]-1.0[/code] и [code]1.0[/code] (включительно), в " +"противном Ñлучае [method asin] вернет [constant NAN].\n" "[codeblock]\n" "# s равно 0.523599, или 30 градуÑов, еÑли конвертировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ " "rad2deg(s)\n" @@ -4608,22 +4609,31 @@ msgstr "" "Возвращает [code]true[/code] еÑли Ñтот [AABB] полноÑтью закрывает другой." #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "Возвращает раÑширенный [AABB], включающий данную точку." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "Возвращает объем [AABB]." -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "Возвращает позицию 8-ми точек [AABB] в проÑтранÑтве." -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "Возвращает Ñамую длинную нормализованную оÑÑŒ [AABB]." -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." @@ -4631,15 +4641,15 @@ msgstr "" "Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой длинной оÑи [AABB] (в ÑоответÑтвии Ñ ÐºÐ¾Ð½Ñтантой " "[Vector3] [code]AXIS_*[/code])." -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "Возвращает ÑкалÑрную длину Ñамой длинной оÑи [AABB]." -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "Возвращает нормализованную наикратчайшую оÑÑŒ [AABB]." -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." @@ -4647,11 +4657,11 @@ msgstr "" "Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой короткой оÑи [AABB] (в ÑоответÑтвии Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñлением " "[Vector3]::AXIS*)." -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "Возвращает ÑкалÑрную длину наикратчайшей оÑи [AABB]." -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." @@ -4659,7 +4669,7 @@ msgstr "" "Возвращает точку опоры в заданном направлении. Ðто полезно Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð² " "Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñтолкновений." -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." @@ -4667,19 +4677,19 @@ msgstr "" "Возвращает копию [AABB], выращенную на заданное количеÑтво единиц в Ñторону " "вÑех Ñторон." -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "Возвращает [code]true[/code], еÑли [AABB] плоÑкий или пуÑтой." -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "Возвращает [code]true[/code], еÑли [AABB] пуÑÑ‚." -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "Возвращает [code]true[/code], еÑли [AABB] Ñодержит точку." -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." @@ -4687,17 +4697,17 @@ msgstr "" "Возвращает переÑечение двух [AABB]. ПуÑтой AABB (размером 0,0,0) " "возвращаетÑÑ Ð¿Ñ€Ð¸ ошибке." -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "Возвращает [code]true[/code], еÑли [AABB] переÑекаетÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼." -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" "Возвращает [code]true[/code], еÑли [AABB] находитÑÑ Ð¿Ð¾ обе Ñтороны от " "плоÑкоÑти." -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4705,7 +4715,7 @@ msgstr "" "Возвращает [code]true[/code], еÑли [AABB] переÑекает отрезок прÑмой между " "[code]from[/code] и [code]to[/code]." -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4715,14 +4725,14 @@ msgstr "" "приблизительно равны, Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ [method @GDScript.is_equal_approx] Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ " "компонента." -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" "Возвращает больший [AABB], Ñодержащий как Ñтот [AABB], так и [code]with[/" "code]." -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." @@ -4730,11 +4740,11 @@ msgstr "" "Конечный угол. РаÑÑчитываетÑÑ ÐºÐ°Ðº [code]position + size[/code]. УÑтановка " "Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ размер." -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "Ðачальный угол. Обычно имеет Ð¼ÐµÐ½ÑŒÑˆÐ¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ, чем у [member end]." -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 #, fuzzy msgid "" "Size from [member position] to [member end]. Typically, all components are " @@ -6024,7 +6034,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -11632,17 +11642,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -11651,24 +11665,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -11682,62 +11696,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -11745,35 +11759,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -11781,13 +11795,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -11799,78 +11813,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Возвращает Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -12334,8 +12348,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -26495,21 +26512,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -26518,14 +26546,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -26535,36 +26567,36 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." @@ -26572,46 +26604,46 @@ msgstr "" "ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный " "момент." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -30842,7 +30874,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -32180,7 +32214,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -32245,22 +32280,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -32275,7 +32312,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -32283,19 +32320,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -32366,7 +32403,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -32424,7 +32462,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -35991,7 +36031,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -39318,7 +39358,7 @@ msgstr "Возвращает чиÑло Ñлементов в маÑÑиве." #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -39348,14 +39388,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -39365,7 +39405,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -41885,17 +41925,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -41913,11 +41979,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -42112,7 +42178,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -42915,6 +42983,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -42932,7 +43018,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -43046,7 +43132,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -45620,24 +45708,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -45647,7 +45741,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -45657,27 +45751,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -45685,81 +45779,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -45767,80 +45861,80 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована." -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." @@ -45848,32 +45942,32 @@ msgstr "" "ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный " "момент." -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -45884,91 +45978,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -45977,13 +46071,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -45993,7 +46087,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -46001,19 +46095,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -46027,45 +46121,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -46074,7 +46168,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -46085,7 +46179,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -46101,14 +46195,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -46116,49 +46210,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -46167,7 +46261,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46175,7 +46269,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46183,7 +46277,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -46193,7 +46287,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -46202,7 +46296,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -46211,7 +46305,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -46221,7 +46315,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46229,7 +46323,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -46239,7 +46333,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -46249,7 +46343,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46257,7 +46351,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -46266,7 +46360,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -46274,7 +46368,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -46286,477 +46380,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -46764,92 +46858,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -46859,33 +46953,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46898,7 +46992,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46910,7 +47004,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46922,7 +47016,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46935,7 +47029,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -46943,28 +47037,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -46974,25 +47068,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47005,7 +47099,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47017,7 +47111,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -47029,7 +47123,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -47042,13 +47136,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -47056,11 +47150,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -47074,7 +47168,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -47083,7 +47177,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -47099,7 +47193,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -47109,7 +47203,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47119,7 +47213,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -47130,7 +47224,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -47140,7 +47234,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -47148,7 +47242,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -47159,7 +47253,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -47174,7 +47268,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -47183,13 +47277,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -47198,7 +47292,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -47208,7 +47302,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -47220,7 +47314,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -47230,24 +47324,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -47256,7 +47350,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -47264,7 +47358,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -47273,7 +47367,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -47283,7 +47377,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -47291,31 +47385,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -47323,7 +47417,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -47333,21 +47427,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -47355,31 +47449,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -47387,7 +47481,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -47397,7 +47491,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -47406,7 +47500,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -47415,20 +47509,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -47437,7 +47531,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -47445,7 +47539,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -47454,7 +47548,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -47464,20 +47558,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -47486,13 +47580,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -47502,46 +47596,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -47551,7 +47645,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -47563,7 +47657,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -47571,7 +47665,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -47579,7 +47673,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -47588,7 +47682,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -47602,7 +47696,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -47612,7 +47706,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -47621,7 +47715,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -47631,54 +47725,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -47689,61 +47783,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -47754,7 +47848,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -47763,26 +47857,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -47793,20 +47887,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -47818,52 +47912,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -47871,7 +47965,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -47884,7 +47978,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -47896,7 +47990,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -47908,7 +48002,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -47920,7 +48014,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -47932,7 +48026,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -48648,40 +48742,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -48689,14 +48797,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -51035,6 +51143,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -51052,7 +51176,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -51060,11 +51184,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -51074,19 +51198,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -56533,20 +56657,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -56557,28 +56686,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -56590,19 +56719,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -71713,6 +71842,11 @@ msgstr "" msgid "" "If [code]true[/code], child nodes are sorted, otherwise sorting is disabled." msgstr "" +"ЕÑли [code]true[/code], дочерние узлы будут отÑортированы, иначе Ñортировка " +"будет отключена." + +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "Возвращает раÑширенный [AABB], включающий данную точку." #~ msgid "Returns the label used for built-in text." #~ msgstr "Возвращает метку (Label), иÑпользуемую Ð´Ð»Ñ Ð²Ñтроенного текÑта." diff --git a/doc/translations/sk.po b/doc/translations/sk.po index a456ae45ff..13df41f55c 100644 --- a/doc/translations/sk.po +++ b/doc/translations/sk.po @@ -6,12 +6,13 @@ # Richard Urban <redasuio1@gmail.com>, 2020. # Pierre Stempin <pierre.stempin@gmail.com>, 2020. # Mario-projects-dev <m.vitek.mv@gmail.com>, 2021. +# vrecusko <vrecusko20@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-04-11 22:03+0000\n" -"Last-Translator: Mario-projects-dev <m.vitek.mv@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: vrecusko <vrecusko20@gmail.com>\n" "Language-Team: Slovak <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/sk/>\n" "Language: sk\n" @@ -19,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -51,7 +52,7 @@ msgstr "" #: doc/tools/make_rst.py msgid "Constants" -msgstr "" +msgstr "KonÅ¡tanty" #: doc/tools/make_rst.py msgid "Property Descriptions" @@ -3591,112 +3592,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4774,7 +4784,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10173,17 +10183,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10192,24 +10206,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10223,62 +10237,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10286,35 +10300,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10322,13 +10336,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10340,77 +10354,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10866,8 +10880,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24879,21 +24896,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24902,14 +24930,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24919,80 +24951,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29208,7 +29240,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30520,7 +30554,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30585,22 +30620,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30615,7 +30652,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30623,19 +30660,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30706,7 +30743,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30764,7 +30802,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34307,7 +34347,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37620,7 +37660,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37650,14 +37690,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37667,7 +37707,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40152,17 +40192,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40180,11 +40246,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40379,7 +40445,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41181,6 +41249,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41198,7 +41284,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41312,7 +41398,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43853,24 +43941,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43880,7 +43974,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43890,27 +43984,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43918,81 +44012,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44000,109 +44094,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44113,91 +44207,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44206,13 +44300,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44222,7 +44316,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44230,19 +44324,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44256,45 +44350,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44303,7 +44397,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44314,7 +44408,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44330,14 +44424,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44345,49 +44439,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44396,7 +44490,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44404,7 +44498,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44412,7 +44506,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44422,7 +44516,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44431,7 +44525,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44440,7 +44534,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44450,7 +44544,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44458,7 +44552,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44468,7 +44562,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44478,7 +44572,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44486,7 +44580,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44495,7 +44589,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44503,7 +44597,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44515,477 +44609,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44993,92 +45087,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45088,33 +45182,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45127,7 +45221,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45139,7 +45233,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45151,7 +45245,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45164,7 +45258,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45172,28 +45266,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45203,25 +45297,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45234,7 +45328,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45246,7 +45340,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45258,7 +45352,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45271,13 +45365,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45285,11 +45379,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45303,7 +45397,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45312,7 +45406,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45328,7 +45422,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45338,7 +45432,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45348,7 +45442,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45359,7 +45453,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45369,7 +45463,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45377,7 +45471,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45388,7 +45482,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45403,7 +45497,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45412,13 +45506,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45427,7 +45521,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45437,7 +45531,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45449,7 +45543,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45459,24 +45553,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45485,7 +45579,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45493,7 +45587,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45502,7 +45596,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45512,7 +45606,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45520,31 +45614,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45552,7 +45646,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45562,21 +45656,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45584,31 +45678,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45616,7 +45710,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45626,7 +45720,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45635,7 +45729,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45644,20 +45738,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45666,7 +45760,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45674,7 +45768,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45683,7 +45777,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45693,20 +45787,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45715,13 +45809,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45731,46 +45825,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45780,7 +45874,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45792,7 +45886,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45800,7 +45894,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45808,7 +45902,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45817,7 +45911,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45831,7 +45925,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45841,7 +45935,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45850,7 +45944,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45860,54 +45954,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45918,61 +46012,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45983,7 +46077,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45992,26 +46086,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46022,20 +46116,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46047,52 +46141,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46100,7 +46194,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46113,7 +46207,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46125,7 +46219,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46137,7 +46231,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46149,7 +46243,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46161,7 +46255,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46825,40 +46919,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46866,14 +46974,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49208,6 +49316,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49225,7 +49349,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49233,11 +49357,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49247,19 +49371,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54674,20 +54798,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54698,28 +54827,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54731,19 +54860,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po index 0bb22e02e9..19ba5471c9 100644 --- a/doc/translations/sr_Cyrl.po +++ b/doc/translations/sr_Cyrl.po @@ -5,12 +5,13 @@ # # Младен Габић <cupakabra@protonmail.com>, 2020. # Pierre Stempin <pierre.stempin@gmail.com>, 2020. +# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2020-10-12 09:28+0000\n" -"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n" +"PO-Revision-Date: 2021-11-07 22:24+0000\n" +"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n" "Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-" "engine/godot-class-reference/sr_Cyrl/>\n" "Language: sr_Cyrl\n" @@ -19,27 +20,24 @@ 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.3-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: doc/tools/make_rst.py -#, fuzzy msgid "Description" msgstr "ОпиÑ" #: doc/tools/make_rst.py #, fuzzy msgid "Tutorials" -msgstr "Туториали" +msgstr "Подучавања" #: doc/tools/make_rst.py -#, fuzzy msgid "Properties" msgstr "ОÑобине" #: doc/tools/make_rst.py -#, fuzzy msgid "Methods" -msgstr "Методе" +msgstr "ПоÑтупци" #: doc/tools/make_rst.py #, fuzzy @@ -47,9 +45,8 @@ msgid "Theme Properties" msgstr "ОÑобине Теме" #: doc/tools/make_rst.py -#, fuzzy msgid "Signals" -msgstr "Сигнали" +msgstr "Знаци" #: doc/tools/make_rst.py #, fuzzy @@ -57,9 +54,8 @@ msgid "Enumerations" msgstr "ПопиÑивање" #: doc/tools/make_rst.py -#, fuzzy msgid "Constants" -msgstr "КонÑтанте" +msgstr "Ðепроменљиве" #: doc/tools/make_rst.py #, fuzzy @@ -74,14 +70,18 @@ msgstr "ОпиÑи Метода" #: modules/gdscript/doc_classes/@GDScript.xml:4 #, fuzzy msgid "Built-in GDScript functions." -msgstr "Уграђене ГДСкрипта функције." +msgstr "Уграђена ГДСкрипта извршења." #: modules/gdscript/doc_classes/@GDScript.xml:7 +#, fuzzy msgid "" "List of core built-in GDScript functions. Math functions and other " "utilities. Everything else is provided by objects. (Keywords: builtin, built " "in, global functions.)" msgstr "" +"СпиÑак Ñржних уграђених ГДСкрипта извршења. Математичка извршења и оÑтале " +"уÑлуге. Све оÑтало је обезбеђено предметима. (Кључне речи: уграђено, " +"уграђено, Ñвеобухватна извршења.)" #: modules/gdscript/doc_classes/@GDScript.xml:19 msgid "" @@ -3602,112 +3602,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4785,7 +4794,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10184,17 +10193,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10203,24 +10216,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10234,62 +10247,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10297,35 +10310,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10333,13 +10346,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10351,77 +10364,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10877,8 +10890,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24890,21 +24906,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24913,14 +24940,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24930,80 +24961,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29219,7 +29250,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30531,7 +30564,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30596,22 +30630,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30626,7 +30662,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30634,19 +30670,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30717,7 +30753,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30775,7 +30812,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34318,7 +34357,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37631,7 +37670,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37661,14 +37700,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37678,7 +37717,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40163,17 +40202,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40191,11 +40256,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40390,7 +40455,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41192,6 +41259,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41209,7 +41294,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41323,7 +41408,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43864,24 +43951,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43891,7 +43984,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43901,27 +43994,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43929,81 +44022,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44011,109 +44104,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44124,91 +44217,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44217,13 +44310,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44233,7 +44326,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44241,19 +44334,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44267,45 +44360,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44314,7 +44407,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44325,7 +44418,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44341,14 +44434,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44356,49 +44449,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44407,7 +44500,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44415,7 +44508,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44423,7 +44516,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44433,7 +44526,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44442,7 +44535,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44451,7 +44544,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44461,7 +44554,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44469,7 +44562,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44479,7 +44572,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44489,7 +44582,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44497,7 +44590,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44506,7 +44599,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44514,7 +44607,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44526,477 +44619,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45004,92 +45097,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45099,33 +45192,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45138,7 +45231,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45150,7 +45243,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45162,7 +45255,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45175,7 +45268,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45183,28 +45276,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45214,25 +45307,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45245,7 +45338,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45257,7 +45350,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45269,7 +45362,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45282,13 +45375,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45296,11 +45389,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45314,7 +45407,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45323,7 +45416,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45339,7 +45432,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45349,7 +45442,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45359,7 +45452,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45370,7 +45463,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45380,7 +45473,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45388,7 +45481,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45399,7 +45492,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45414,7 +45507,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45423,13 +45516,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45438,7 +45531,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45448,7 +45541,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45460,7 +45553,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45470,24 +45563,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45496,7 +45589,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45504,7 +45597,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45513,7 +45606,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45523,7 +45616,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45531,31 +45624,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45563,7 +45656,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45573,21 +45666,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45595,31 +45688,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45627,7 +45720,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45637,7 +45730,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45646,7 +45739,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45655,20 +45748,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45677,7 +45770,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45685,7 +45778,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45694,7 +45787,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45704,20 +45797,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45726,13 +45819,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45742,46 +45835,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45791,7 +45884,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45803,7 +45896,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45811,7 +45904,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45819,7 +45912,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45828,7 +45921,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45842,7 +45935,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45852,7 +45945,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45861,7 +45954,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45871,54 +45964,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45929,61 +46022,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45994,7 +46087,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46003,26 +46096,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46033,20 +46126,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46058,52 +46151,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46111,7 +46204,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46124,7 +46217,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46136,7 +46229,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46148,7 +46241,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46160,7 +46253,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46172,7 +46265,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46836,40 +46929,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46877,14 +46984,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49219,6 +49326,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49236,7 +49359,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49244,11 +49367,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49258,19 +49381,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54685,20 +54808,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54709,28 +54837,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54742,19 +54870,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/sv.po b/doc/translations/sv.po index 1f920b3172..d201e0a1f4 100644 --- a/doc/translations/sv.po +++ b/doc/translations/sv.po @@ -3587,112 +3587,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4764,7 +4773,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10141,15 +10150,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10158,24 +10171,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10189,62 +10202,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10252,35 +10265,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10288,13 +10301,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10306,77 +10319,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10824,8 +10837,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24770,20 +24786,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24792,14 +24819,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24809,80 +24840,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29075,7 +29106,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30374,7 +30407,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30439,22 +30473,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30469,7 +30505,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30477,19 +30513,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30557,7 +30593,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30615,7 +30652,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34140,7 +34179,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37435,7 +37474,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37465,14 +37504,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37482,7 +37521,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39960,17 +39999,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39988,11 +40053,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40187,7 +40252,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40989,6 +41056,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41006,7 +41091,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41120,7 +41205,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43660,24 +43747,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43687,7 +43780,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43697,27 +43790,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43725,81 +43818,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43807,109 +43900,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43920,91 +44013,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44013,13 +44106,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44029,7 +44122,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44037,19 +44130,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44063,45 +44156,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44110,7 +44203,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44121,7 +44214,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44137,14 +44230,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44152,49 +44245,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44203,7 +44296,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44211,7 +44304,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44219,7 +44312,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44229,7 +44322,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44238,7 +44331,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44247,7 +44340,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44257,7 +44350,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44265,7 +44358,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44275,7 +44368,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44285,7 +44378,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44293,7 +44386,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44302,7 +44395,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44310,7 +44403,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44322,477 +44415,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44800,92 +44893,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44895,33 +44988,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44934,7 +45027,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44946,7 +45039,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44958,7 +45051,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44971,7 +45064,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44979,28 +45072,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45010,25 +45103,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45041,7 +45134,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45053,7 +45146,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45065,7 +45158,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45078,13 +45171,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45092,11 +45185,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45110,7 +45203,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45119,7 +45212,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45135,7 +45228,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45145,7 +45238,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45155,7 +45248,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45166,7 +45259,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45176,7 +45269,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45184,7 +45277,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45195,7 +45288,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45210,7 +45303,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45219,13 +45312,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45234,7 +45327,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45244,7 +45337,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45256,7 +45349,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45266,24 +45359,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45292,7 +45385,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45300,7 +45393,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45309,7 +45402,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45319,7 +45412,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45327,31 +45420,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45359,7 +45452,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45369,21 +45462,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45391,31 +45484,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45423,7 +45516,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45433,7 +45526,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45442,7 +45535,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45451,20 +45544,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45473,7 +45566,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45481,7 +45574,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45490,7 +45583,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45500,20 +45593,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45522,13 +45615,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45538,46 +45631,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45587,7 +45680,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45599,7 +45692,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45607,7 +45700,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45615,7 +45708,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45624,7 +45717,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45638,7 +45731,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45648,7 +45741,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45657,7 +45750,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45667,54 +45760,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45725,61 +45818,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45790,7 +45883,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45799,26 +45892,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45829,20 +45922,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45854,52 +45947,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45907,7 +46000,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45920,7 +46013,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45932,7 +46025,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45944,7 +46037,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45956,7 +46049,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45968,7 +46061,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46627,40 +46720,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46668,14 +46775,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49002,6 +49109,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49019,7 +49142,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49027,11 +49150,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49041,19 +49164,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54438,20 +54561,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54462,28 +54590,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54495,19 +54623,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/th.po b/doc/translations/th.po index 9d6197823a..028fd593bb 100644 --- a/doc/translations/th.po +++ b/doc/translations/th.po @@ -3690,112 +3690,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4873,7 +4882,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10274,17 +10283,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10293,24 +10306,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10324,62 +10337,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10387,35 +10400,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10423,13 +10436,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10441,77 +10454,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10967,8 +10980,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24982,21 +24998,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25005,14 +25032,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25022,80 +25053,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29321,7 +29352,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30634,7 +30667,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30703,22 +30737,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30733,7 +30769,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30741,19 +30777,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30821,10 +30857,12 @@ msgid "" msgstr "" #: doc/classes/KinematicBody2D.xml:87 +#, fuzzy msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30886,7 +30924,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34430,7 +34470,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37774,7 +37814,7 @@ msgstr "คืนค่าชื่à¸à¸‚à¸à¸‡à¸à¸¸à¸›à¸à¸£à¸“์เสีย #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37804,14 +37844,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37821,7 +37861,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40310,17 +40350,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40338,11 +40404,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40537,7 +40603,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41340,6 +41408,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41357,7 +41443,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41471,7 +41557,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44013,24 +44101,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44040,7 +44134,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44050,27 +44144,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44078,81 +44172,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44160,109 +44254,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44273,91 +44367,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44366,13 +44460,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44382,7 +44476,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44390,19 +44484,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44416,45 +44510,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44463,7 +44557,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44474,7 +44568,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44490,14 +44584,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44505,49 +44599,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44556,7 +44650,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44564,7 +44658,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 #, fuzzy msgid "" "Default [InputEventAction] to move down in the UI.\n" @@ -44577,7 +44671,7 @@ msgstr "" "ได้เนื่à¸à¸‡à¸ˆà¸²à¸à¸ˆà¸³à¹€à¸›à¹‡à¸™à¸ªà¸³à¸«à¸£à¸±à¸š logic ในà¸à¸²à¸£ [Control] ต่างๆ à¸à¸¢à¹ˆà¸²à¸‡à¹„รà¸à¹‡à¸•าม event " "ที่à¸à¸³à¸«à¸™à¸”ให้à¸à¸±à¸šà¸à¸²à¸£ action สามารถà¹à¸à¹‰à¹„ขได้" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44587,7 +44681,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44596,7 +44690,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44605,7 +44699,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44615,7 +44709,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44623,7 +44717,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44633,7 +44727,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44643,7 +44737,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44651,7 +44745,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44660,7 +44754,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44668,7 +44762,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44680,477 +44774,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45158,92 +45252,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45253,33 +45347,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45292,7 +45386,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45304,7 +45398,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45316,7 +45410,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45329,7 +45423,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45337,28 +45431,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45368,25 +45462,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45399,7 +45493,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45411,7 +45505,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45423,7 +45517,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45436,13 +45530,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45450,11 +45544,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45468,7 +45562,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45477,7 +45571,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45493,7 +45587,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45503,7 +45597,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45513,7 +45607,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45524,7 +45618,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45534,7 +45628,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45542,7 +45636,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45553,7 +45647,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45568,7 +45662,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45577,13 +45671,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45592,7 +45686,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45602,7 +45696,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45614,7 +45708,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45624,24 +45718,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45650,7 +45744,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45658,7 +45752,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45667,7 +45761,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45677,7 +45771,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45685,31 +45779,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45717,7 +45811,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45727,21 +45821,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45749,31 +45843,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45781,7 +45875,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45791,7 +45885,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45800,7 +45894,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45809,20 +45903,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45831,7 +45925,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45839,7 +45933,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45848,7 +45942,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45858,20 +45952,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45880,13 +45974,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45896,46 +45990,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45945,7 +46039,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45957,7 +46051,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45965,7 +46059,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45973,7 +46067,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45982,7 +46076,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45996,7 +46090,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46006,7 +46100,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46015,7 +46109,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46025,54 +46119,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46083,61 +46177,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46148,7 +46242,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46157,26 +46251,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46187,20 +46281,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46212,52 +46306,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46265,7 +46359,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46278,7 +46372,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46290,7 +46384,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46302,7 +46396,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46314,7 +46408,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46326,7 +46420,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46990,40 +47084,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47031,14 +47139,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49373,6 +49481,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49390,7 +49514,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49398,11 +49522,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49412,19 +49536,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54840,20 +54964,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54864,28 +54993,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54897,19 +55026,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/et.po b/doc/translations/tl.po index b4bd240ceb..f72fe4d604 100644 --- a/doc/translations/et.po +++ b/doc/translations/tl.po @@ -1,61 +1,68 @@ -# LANGUAGE translation of the Godot Engine class reference. +# Tagalog translation of the Godot Engine class reference. # Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # -# karl kivi <karl97kivi@gmail.com>, 2021. +# Napstaguy04 <brokenscreen3@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"Language: et\n" +"PO-Revision-Date: 2021-11-15 21:14+0000\n" +"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n" +"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/" +"godot-class-reference/tl/>\n" +"Language: tl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " +"|| n % 10 == 6 || n % 10 == 9);\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" -msgstr "" +msgstr "Paglalarawan" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "" +msgstr "Mga Tutorial" #: doc/tools/make_rst.py msgid "Properties" -msgstr "" +msgstr "Mga Katangian" #: doc/tools/make_rst.py msgid "Methods" -msgstr "" +msgstr "Mga Method" #: doc/tools/make_rst.py msgid "Theme Properties" -msgstr "" +msgstr "Mga Katangian ng Theme" #: doc/tools/make_rst.py msgid "Signals" -msgstr "" +msgstr "Mga Hudyat" #: doc/tools/make_rst.py msgid "Enumerations" -msgstr "" +msgstr "Mga Enumerasyon" #: doc/tools/make_rst.py msgid "Constants" -msgstr "" +msgstr "Mga Konstant" #: doc/tools/make_rst.py msgid "Property Descriptions" -msgstr "" +msgstr "Mga Paglalarawan ng Katangian" #: doc/tools/make_rst.py msgid "Method Descriptions" -msgstr "" +msgstr "Panglalarawan ng mga Method" #: modules/gdscript/doc_classes/@GDScript.xml:4 msgid "Built-in GDScript functions." -msgstr "" +msgstr "Mga built-in na function ng GDScript." #: modules/gdscript/doc_classes/@GDScript.xml:7 msgid "" @@ -63,6 +70,9 @@ msgid "" "utilities. Everything else is provided by objects. (Keywords: builtin, built " "in, global functions.)" msgstr "" +"Talaan ng mga built-in function ng GDScript. Mga function sa matematika at " +"iba pang mga utility. Lahat ng iba pa ay ibinibigay ng mga objects. (Mga " +"keyword: builtin, built in, global function.)" #: modules/gdscript/doc_classes/@GDScript.xml:19 msgid "" @@ -77,6 +87,16 @@ msgid "" "red = Color8(255, 0, 0)\n" "[/codeblock]" msgstr "" +"Ibinabalik ang kulay na ginawa mula sa pula, berde, asul, at alpha integer " +"na mga channel. Ang bawat channel ay dapat may 8 bits ng impormasyon mula 0 " +"hanggang 255.\n" +"[code]r8[/code] pulang channel\n" +"[code]g8[/code] lungtiang channel\n" +"[code]b8[/code] bughaw na channel\n" +"[code]a8[/code] alpha channel\n" +"[codeblock]\n" +"pula = Color8(255, 0, 0)\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:34 msgid "" @@ -87,6 +107,13 @@ msgid "" "[/codeblock]\n" "Supported color names are the same as the constants defined in [Color]." msgstr "" +"Ibinabalik ang kulay ayon sa karaniwang [code]name[/code] na may " +"[code]alpha[/code] mula 0 hanggang 1.\n" +"[codeblock]\n" +"pula = ColorN(\"red\",1)\n" +"[/codeblock]\n" +"Ang mga pangalan ng mga sinusuportahang kulay ay tumutugma sa mga constant " +"na tinukoy sa [Kulay]." #: modules/gdscript/doc_classes/@GDScript.xml:45 msgid "" @@ -96,6 +123,11 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" +"Ibinabalik ang absolute value ng [code]s[/code] parameter (hal: positive " +"value).\n" +"[codeblock]\n" +"a = abs(-1) # a ay 1\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 msgid "" @@ -108,6 +140,14 @@ msgid "" "c = acos(0.866025)\n" "[/codeblock]" msgstr "" +"Ibinabalik ang arc cosine ng [code]s[/code] sa radians. Gamitin ito para " +"makuha ang cosine angle [code]s[/code]. [code]s[/code] ay dapat nasa pagitan " +"ng [code]-1.0[/code] at [code]1.0[/code] (napapabilang o inclusive), o kung " +"hindi, [method acos] ay babalik ng [constant NAN].\n" +"[codeblock]\n" +"# ang c ay 0.523599 o 30 degrees kung iko-convert sa rad2deg(s)\n" +"c = acos(0.866025)\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:66 msgid "" @@ -255,11 +295,11 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml:211 msgid "Converts from decibels to linear energy (audio)." -msgstr "" +msgstr "Kino-convert ang mga decibel sa linear na enerhiya (audio)." #: modules/gdscript/doc_classes/@GDScript.xml:218 msgid "Deprecated alias for [method step_decimals]." -msgstr "" +msgstr "Hindi ginagamit na alias para sa [method step_decimals]." #: modules/gdscript/doc_classes/@GDScript.xml:227 msgid "" @@ -271,6 +311,13 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" +"[b]Puna:[/b] [code]dectime[/code] ay hindi na ginagamit at aalisin na sa " +"Godot 4.0, maaring gamitin nalang ang [method move_toward].\n" +"Ibinabalik ang resulta ng [code]value[/code] na ibinawas ng [code]step[/" +"code] ng [code]amount[/code].\n" +"[codeblock]\n" +"a = dectime(60, 10, 0.1)) #59.0 ang kakalabasan ng a\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:238 msgid "" @@ -279,12 +326,19 @@ msgid "" "r = deg2rad(180) # r is 3.141593\n" "[/codeblock]" msgstr "" +"Kino-convert ang anggulo (degrees) sa radians.\n" +"[codeblock]\n" +"r = deg2rad(180) # r = 3.141593\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 msgid "" "Converts a dictionary (previously created with [method inst2dict]) back to " "an instance. Useful for deserializing." msgstr "" +"Kino-convert ang isang [code]dictionary[/code] (dating nilikha gamit ng " +"[method inst2dict] ) pabalik sa isang instance. Kapaki-pakinabang para sa " +"deserialization." #: modules/gdscript/doc_classes/@GDScript.xml:256 msgid "" @@ -318,6 +372,15 @@ msgid "" "a = exp(2) # Approximately 7.39\n" "[/codeblock]" msgstr "" +"Ang natural na exponential function. Tinataas ang mathematical constant " +"[b]e[/b] sa power ng [code]s[/code] at binabalik ito.\n" +"[b]e[/b] ay may tinatayang value na 2.71828, at maaring kunin ito sa " +"[code]exp(1)[/code].\n" +"Para sa mga exponents para sa mga ibang bases, gamitin ang method sa baba " +"[method pow].\n" +"[codeblock]\n" +"a = exp(2) # Tinatayang 7.39\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:286 msgid "" @@ -333,6 +396,17 @@ msgid "" "[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] " "directly." msgstr "" +"Ri-naround ang [code]s[/code] pababa (patungo sa negatibong walang hanggan) " +"at ibinabalik ang pinakamalaking integer na hindi hihigit sa [code]s[/" +"code].\n" +"[codeblock]\n" +"a = floor(2.99) # katumbas ng 2.0\n" +"a = floor(-2.99) # katumbas ng 2.0\n" +"a = floor(-2.99) # katumbas ng -3.0\n" +"[/codeblock]\n" +"[b] Tandaan: [/b] Ang method na 'to ay nagbabalik ng float. Kung kailangan " +"mo ng integer at kung [code]s[/code] ay hindi negative, maaari mong " +"direktang gamitin ang [code]int(s)[/code]." #: modules/gdscript/doc_classes/@GDScript.xml:301 msgid "" @@ -343,6 +417,12 @@ msgid "" "[/codeblock]\n" "For the integer remainder operation, use the % operator." msgstr "" +"Ibinabalik ang the floating-point ng labi (remainder) ng [code]a/b[/code], " +"habang pinapanatili ang sign ng [code]a[/code].\n" +"[codeblock]\n" +"r = fmod(7, 5.5) # katumbas ng 1.5\n" +"[/codeblock]\n" +"Para sa operasyon sa integer remainder, gamitin ang operator %." #: modules/gdscript/doc_classes/@GDScript.xml:313 msgid "" @@ -2473,39 +2553,39 @@ msgstr "" #: doc/classes/@GlobalScope.xml:896 msgid "Left mouse button." -msgstr "" +msgstr "Kaliwang pindutan ng mouse." #: doc/classes/@GlobalScope.xml:899 msgid "Right mouse button." -msgstr "" +msgstr "Kanang pindutan ng mouse." #: doc/classes/@GlobalScope.xml:902 msgid "Middle mouse button." -msgstr "" +msgstr "Gitnang pindutan ng mouse." #: doc/classes/@GlobalScope.xml:905 msgid "Extra mouse button 1 (only present on some mice)." -msgstr "" +msgstr "ika-1 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)." #: doc/classes/@GlobalScope.xml:908 msgid "Extra mouse button 2 (only present on some mice)." -msgstr "" +msgstr "ika-2 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)." #: doc/classes/@GlobalScope.xml:911 msgid "Mouse wheel up." -msgstr "" +msgstr "Pagtaas ng mouse wheel." #: doc/classes/@GlobalScope.xml:914 msgid "Mouse wheel down." -msgstr "" +msgstr "Pagbaba ng mouse wheel." #: doc/classes/@GlobalScope.xml:917 msgid "Mouse wheel left button (only present on some mice)." -msgstr "" +msgstr "Kaliwang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)." #: doc/classes/@GlobalScope.xml:920 msgid "Mouse wheel right button (only present on some mice)." -msgstr "" +msgstr "Kanang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)." #: doc/classes/@GlobalScope.xml:923 msgid "Left mouse button mask." @@ -2533,47 +2613,47 @@ msgstr "" #: doc/classes/@GlobalScope.xml:941 msgid "Gamepad button 0." -msgstr "" +msgstr "Ika-0 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:944 msgid "Gamepad button 1." -msgstr "" +msgstr "Ika-1 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:947 msgid "Gamepad button 2." -msgstr "" +msgstr "Ika-2 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:950 msgid "Gamepad button 3." -msgstr "" +msgstr "Ika-3 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:953 msgid "Gamepad button 4." -msgstr "" +msgstr "Ika-4 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:956 msgid "Gamepad button 5." -msgstr "" +msgstr "Ika-5 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:959 msgid "Gamepad button 6." -msgstr "" +msgstr "Ika-6 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:962 msgid "Gamepad button 7." -msgstr "" +msgstr "Ika-7 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:965 msgid "Gamepad button 8." -msgstr "" +msgstr "Ika-8 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:968 msgid "Gamepad button 9." -msgstr "" +msgstr "Ika-9 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:971 msgid "Gamepad button 10." -msgstr "" +msgstr "Ika-10 pindutan ng gamepad." #: doc/classes/@GlobalScope.xml:974 msgid "Gamepad button 11." @@ -2625,15 +2705,15 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1010 msgid "Represents the maximum number of joystick buttons supported." -msgstr "" +msgstr "Kumakatawan sa pinakamaraming bilang ng joystick na sinusuportahan." #: doc/classes/@GlobalScope.xml:1013 msgid "DualShock circle button." -msgstr "" +msgstr "Pabilog na pindutang Dualshock." #: doc/classes/@GlobalScope.xml:1016 msgid "DualShock X button." -msgstr "" +msgstr "Pindutang X ng Dualshock." #: doc/classes/@GlobalScope.xml:1019 msgid "DualShock square button." @@ -2681,11 +2761,11 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1052 msgid "Push down on the touchpad or main joystick on a VR controller." -msgstr "" +msgstr "Pumindot sa touchpad o sa main joystick sa VR controller." #: doc/classes/@GlobalScope.xml:1055 msgid "Trigger on a VR controller." -msgstr "" +msgstr "Trigger sa VR Controller." #: doc/classes/@GlobalScope.xml:1058 msgid "" @@ -3050,7 +3130,7 @@ msgstr "" #: doc/classes/@GlobalScope.xml:1334 msgid "Linking failed error." -msgstr "" +msgstr "Nabigo ang pagkakawing." #: doc/classes/@GlobalScope.xml:1337 msgid "Script failed error." @@ -3580,112 +3660,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4757,7 +4846,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10134,15 +10223,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10151,24 +10244,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10182,62 +10275,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10245,35 +10338,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10281,13 +10374,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10299,77 +10392,77 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10817,8 +10910,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -24763,20 +24859,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -24785,14 +24892,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -24802,80 +24913,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29068,7 +29179,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30367,7 +30480,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30432,22 +30546,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30462,7 +30578,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30470,19 +30586,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30550,7 +30666,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30608,7 +30725,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34133,7 +34252,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37428,7 +37547,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37458,14 +37577,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37475,7 +37594,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -39953,17 +40072,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -39981,11 +40126,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40180,7 +40325,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -40982,6 +41129,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -40999,7 +41164,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41113,7 +41278,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -43653,24 +43820,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43680,7 +43853,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -43690,27 +43863,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -43718,81 +43891,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -43800,109 +43973,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -43913,91 +44086,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44006,13 +44179,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44022,7 +44195,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44030,19 +44203,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44056,45 +44229,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44103,7 +44276,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44114,7 +44287,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44130,14 +44303,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44145,49 +44318,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44196,7 +44369,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44204,7 +44377,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44212,7 +44385,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44222,7 +44395,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44231,7 +44404,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44240,7 +44413,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44250,7 +44423,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44258,7 +44431,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44268,7 +44441,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44278,7 +44451,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44286,7 +44459,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44295,7 +44468,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44303,7 +44476,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44315,477 +44488,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -44793,92 +44966,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -44888,33 +45061,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44927,7 +45100,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44939,7 +45112,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -44951,7 +45124,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -44964,7 +45137,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -44972,28 +45145,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45003,25 +45176,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45034,7 +45207,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45046,7 +45219,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45058,7 +45231,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45071,13 +45244,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45085,11 +45258,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45103,7 +45276,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45112,7 +45285,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45128,7 +45301,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45138,7 +45311,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45148,7 +45321,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45159,7 +45332,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45169,7 +45342,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45177,7 +45350,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45188,7 +45361,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45203,7 +45376,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45212,13 +45385,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45227,7 +45400,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45237,7 +45410,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45249,7 +45422,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45259,24 +45432,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45285,7 +45458,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45293,7 +45466,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45302,7 +45475,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45312,7 +45485,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45320,31 +45493,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45352,7 +45525,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45362,21 +45535,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45384,31 +45557,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45416,7 +45589,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45426,7 +45599,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45435,7 +45608,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45444,20 +45617,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45466,7 +45639,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45474,7 +45647,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45483,7 +45656,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45493,20 +45666,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45515,13 +45688,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45531,46 +45704,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45580,7 +45753,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45592,7 +45765,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45600,7 +45773,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45608,7 +45781,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45617,7 +45790,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45631,7 +45804,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -45641,7 +45814,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -45650,7 +45823,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -45660,54 +45833,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -45718,61 +45891,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -45783,7 +45956,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -45792,26 +45965,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -45822,20 +45995,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -45847,52 +46020,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -45900,7 +46073,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -45913,7 +46086,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -45925,7 +46098,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -45937,7 +46110,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -45949,7 +46122,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -45961,7 +46134,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46620,40 +46793,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -46661,14 +46848,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -48995,6 +49182,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49012,7 +49215,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49020,11 +49223,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49034,19 +49237,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54431,20 +54634,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54455,28 +54663,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54488,19 +54696,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" @@ -69327,3 +69535,5 @@ msgstr "" msgid "" "If [code]true[/code], child nodes are sorted, otherwise sorting is disabled." msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." diff --git a/doc/translations/tr.po b/doc/translations/tr.po index 4880d83be6..a7c62d6cf1 100644 --- a/doc/translations/tr.po +++ b/doc/translations/tr.po @@ -15,12 +15,14 @@ # Cem Eren Fukara <cefukara@hotmail.com>, 2021. # The Recon <reconmovyie@gmail.com>, 2021. # ali aydın <alimxaydin@gmail.com>, 2021. +# yigithan <yigithanermet38@gmail.com>, 2021. +# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-05-27 12:33+0000\n" -"Last-Translator: ali aydın <alimxaydin@gmail.com>\n" +"PO-Revision-Date: 2021-11-17 12:59+0000\n" +"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/tr/>\n" "Language: tr\n" @@ -28,7 +30,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.7-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -36,7 +38,7 @@ msgstr "Açıklama" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "Öğretici Örnekler" +msgstr "Öğreticiler" #: doc/tools/make_rst.py msgid "Properties" @@ -44,7 +46,7 @@ msgstr "Özellikler" #: doc/tools/make_rst.py msgid "Methods" -msgstr "Metotlar" +msgstr "Metodlar" #: doc/tools/make_rst.py msgid "Theme Properties" @@ -52,7 +54,7 @@ msgstr "Tema Özellikleri" #: doc/tools/make_rst.py msgid "Signals" -msgstr "Sinyaller" +msgstr "sinyaller" #: doc/tools/make_rst.py msgid "Enumerations" @@ -125,7 +127,6 @@ msgstr "" "Desteklenen renk adları,[Color]'de tanımlanan sabitlerle aynıdır." #: modules/gdscript/doc_classes/@GDScript.xml:45 -#, fuzzy msgid "" "Returns the absolute value of parameter [code]s[/code] (i.e. positive " "value).\n" @@ -135,12 +136,10 @@ msgid "" msgstr "" "[code]s[/code] parametresinin mutlak deÄŸerini (pozitif deÄŸerini) döndürür.\n" "[codeblock]\n" -"# a'nın döndüreceÄŸi deÄŸer 1'dir\n" -"a = abs(-1)\n" +"a = abs(-1) # a'nın döndüreceÄŸi deÄŸer 1'dir\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 -#, fuzzy msgid "" "Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of " "cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -152,14 +151,15 @@ msgid "" "[/codeblock]" msgstr "" "[code]s[/code] deÄŸerinin radyan türünde cosinüsünü döndürür. [code]s[/code] " -"cosinüs deÄŸerinin açısı elde etmek için kullanılır.\n" +"cosinüs deÄŸerinin açısı elde etmek için kullanılır. [code]s[/code] " +"[code]-1.0[/code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde " +"[method acos], [constant NAN] dödürür.\n" "[codeblock]\n" -"# c 0.523599 ya da rad2deg(s) ile dönüştürülürse 30 olur\n" +"# c rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n" "c = acos(0.866025)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:66 -#, fuzzy msgid "" "Returns the arc sine of [code]s[/code] in radians. Use to get the angle of " "sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -171,9 +171,11 @@ msgid "" "[/codeblock]" msgstr "" "[code]s[/code] deÄŸerinin radyan cinsinden arcsinüsünü döndürür. [code]s[/" -"code] deÄŸerinin açısını bulmak için kullanılır.\n" +"code] deÄŸerinin açısını bulmak için kullanılır. [code]s[/code] [code]-1.0[/" +"code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde [method " +"asin], [constant NAN] dödürür.\n" "[codeblock]\n" -"# s 0.523599 ya da rad2deg(s) ile dönüştürülürse dereceye 30\n" +"# s rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n" "s = asin(0.5)\n" "[/codeblock]" @@ -300,12 +302,13 @@ msgid "" "[/codeblock]\n" "See also [method floor], [method round], [method stepify], and [int]." msgstr "" -"[code]s[/code] deperini yukarı yuvarlar (pozitif sonsuzluÄŸa doÄŸru), [code]s[/" +"[code]s[/code] deÄŸerini yukarı yuvarlar (pozitif sonsuzluÄŸa doÄŸru), [code]s[/" "code] deÄŸerinden büyük olan en küçük tam sayıyı döndürür.\n" "[codeblock]\n" -"i = ceil(1.45) # i 2 olur\n" -"i = ceil(1.001) # i 2 olur\n" -"[/codeblock]" +"i = ceil(1.45) # i 2.0 olur\n" +"i = ceil(1.001) # i 2.0 olur\n" +"[/codeblock]\n" +"Ayrıca bakınız [method floor], [method round], [method stepify] ve [int]." #: modules/gdscript/doc_classes/@GDScript.xml:147 msgid "" @@ -328,7 +331,6 @@ msgstr "" "Bu [method ord]'un tersidir." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -339,15 +341,11 @@ msgid "" "[/codeblock]" msgstr "" "[code]deÄŸer[/code]'i bir aralığa sığdırır ve [code]min[/code]'den büyük ve " -"[code]maks[/code]'den küçük deÄŸer döndürür.\n" +"[code]maks[/code]'dan küçük bir deÄŸer döndürür.\n" "[codeblock]\n" -"speed = 1000\n" -"# a 20 olur\n" -"a = clamp(speed, 1, 20)\n" -"\n" -"speed = -10\n" -"# a 1 olur\n" -"a = clamp(speed, 1, 20)\n" +"a = clamp(1000, 1, 20) # a 20'dir\n" +"a = clamp(-10, 1, 20) # a 1'dir\n" +"a = clamp(15, 1, 20) # a 15'dir\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 @@ -375,7 +373,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -383,13 +380,13 @@ msgid "" "a = cos(PI) # a is -1.0\n" "[/codeblock]" msgstr "" -"Radyan cinsinden [code]s[/code] açısının sinüs deÄŸerini döndürür.\n" +"[code]s[/code] açısının radyan cinsinden kosinüs deÄŸerini döndürür.\n" "[codeblock]\n" -"sin(0.523599) # sonuç: 0.5\n" +"a = cos(TAU) # a 1.0'dır\n" +"a = cos(PI) # a -1.0'dır\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:201 -#, fuzzy msgid "" "Returns the hyperbolic cosine of [code]s[/code] in radians.\n" "[codeblock]\n" @@ -398,8 +395,7 @@ msgid "" msgstr "" "[code]s[/code] deÄŸerinin hiperbolik kosinüsünü radyan cinsinden döndürür.\n" "[codeblock]\n" -"# 1.543081 yazdırır\n" -"print(cosh(1))\n" +"print(cosh(1)) # 1.543081 yazdırır\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:211 @@ -2094,9 +2090,8 @@ msgid "The [Engine] singleton." msgstr "[Engine] tekil nesnesi." #: doc/classes/@GlobalScope.xml:31 -#, fuzzy msgid "The [Geometry] singleton." -msgstr "[Geometry2D] tekil nesnesi." +msgstr "[Geometry] tekil nesnesi." #: doc/classes/@GlobalScope.xml:34 msgid "The [IP] singleton." @@ -2159,7 +2154,7 @@ msgstr "[PhysicsServer2D] tekil nesnesi." #: doc/classes/@GlobalScope.xml:72 msgid "The [ProjectSettings] singleton." -msgstr "" +msgstr "[ProjectSettings] tekil nesnesi." #: doc/classes/@GlobalScope.xml:75 msgid "The [ResourceLoader] singleton." @@ -4372,112 +4367,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5556,7 +5560,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10956,17 +10960,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10975,24 +10983,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -11006,62 +11014,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -11069,35 +11077,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -11105,13 +11113,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -11123,78 +11131,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Verilen bir deÄŸerin ark-tanjantını döndürür." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11650,8 +11658,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25680,21 +25691,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25703,14 +25725,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25720,82 +25746,82 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 #, fuzzy msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" "EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -30016,7 +30042,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -31331,7 +31359,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31396,22 +31425,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -31426,7 +31457,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -31434,19 +31465,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31517,7 +31548,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31575,7 +31607,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -35131,7 +35165,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -38447,7 +38481,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -38477,14 +38511,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -38494,7 +38528,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -41003,17 +41037,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -41031,11 +41091,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -41230,7 +41290,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -42033,6 +42095,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -42050,7 +42130,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -42164,7 +42244,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44711,24 +44793,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44738,7 +44826,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44748,27 +44836,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44776,81 +44864,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44858,109 +44946,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44971,91 +45059,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -45064,13 +45152,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -45080,7 +45168,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -45088,19 +45176,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -45114,45 +45202,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -45161,7 +45249,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -45172,7 +45260,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -45188,14 +45276,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -45203,49 +45291,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -45254,7 +45342,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45262,7 +45350,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45270,7 +45358,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45280,7 +45368,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -45289,7 +45377,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -45298,7 +45386,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -45308,7 +45396,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45316,7 +45404,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -45326,7 +45414,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -45336,7 +45424,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45344,7 +45432,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -45353,7 +45441,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -45361,7 +45449,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -45373,477 +45461,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45851,92 +45939,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45946,33 +46034,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45985,7 +46073,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45997,7 +46085,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46009,7 +46097,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46022,7 +46110,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -46030,28 +46118,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -46061,25 +46149,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46092,7 +46180,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46104,7 +46192,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -46116,7 +46204,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -46129,13 +46217,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -46143,11 +46231,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -46161,7 +46249,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -46170,7 +46258,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -46186,7 +46274,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -46196,7 +46284,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46206,7 +46294,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -46217,7 +46305,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -46227,7 +46315,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -46235,7 +46323,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -46246,7 +46334,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -46261,7 +46349,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -46270,13 +46358,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -46285,7 +46373,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -46295,7 +46383,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -46307,7 +46395,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -46317,24 +46405,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -46343,7 +46431,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -46351,7 +46439,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -46360,7 +46448,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -46370,7 +46458,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -46378,31 +46466,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -46410,7 +46498,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -46420,21 +46508,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -46442,31 +46530,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -46474,7 +46562,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -46484,7 +46572,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -46493,7 +46581,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -46502,20 +46590,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -46524,7 +46612,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -46532,7 +46620,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46541,7 +46629,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46551,20 +46639,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46573,13 +46661,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46589,46 +46677,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46638,7 +46726,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46650,7 +46738,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46658,7 +46746,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46666,7 +46754,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46675,7 +46763,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46689,7 +46777,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46699,7 +46787,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46708,7 +46796,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46718,54 +46806,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46776,61 +46864,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46841,7 +46929,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46850,26 +46938,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46880,20 +46968,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46905,52 +46993,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46958,7 +47046,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46971,7 +47059,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46983,7 +47071,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46995,7 +47083,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -47007,7 +47095,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -47019,7 +47107,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47690,40 +47778,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47731,14 +47833,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -50073,6 +50175,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -50090,7 +50208,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -50098,11 +50216,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -50112,19 +50230,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -55543,20 +55661,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -55567,28 +55690,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55600,19 +55723,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/uk.po b/doc/translations/uk.po index e0e7c14b32..03ed5ff6ef 100644 --- a/doc/translations/uk.po +++ b/doc/translations/uk.po @@ -8,12 +8,13 @@ # Pierre Stempin <pierre.stempin@gmail.com>, 2020. # Wataru Onuki <bettawat@yahoo.co.jp>, 2020. # IllusiveMan196 <hamsterrv@gmail.com>, 2021. +# Valerii Bosiak <valerii540@protonmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-07-31 19:53+0000\n" -"Last-Translator: IllusiveMan196 <hamsterrv@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: Valerii Bosiak <valerii540@protonmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/uk/>\n" "Language: uk\n" @@ -22,7 +23,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -30,7 +31,7 @@ msgstr "ОпиÑ" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "Туторіали" +msgstr "Уроки" #: doc/tools/make_rst.py msgid "Properties" @@ -119,7 +120,6 @@ msgstr "" "Підтримувані імена кольорів збігаютьÑÑ Ð· конÑтантами, визначеними у [Color]." #: modules/gdscript/doc_classes/@GDScript.xml:45 -#, fuzzy msgid "" "Returns the absolute value of parameter [code]s[/code] (i.e. positive " "value).\n" @@ -130,8 +130,7 @@ msgstr "" "Повертає абÑолютне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ [code]s[/code] (тобто Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ· " "знака, працює Ð´Ð»Ñ Ñ†Ñ–Ð»Ð¸Ñ… чиÑел Ñ– чиÑел із рухомою крапкою).\n" "[codeblock]\n" -"# a дорівнює 1\n" -"a = abs(-1)\n" +"a = abs(-1) # a дорівнює 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 @@ -391,12 +390,18 @@ msgid "" "r = deg2rad(180) # r is 3.141593\n" "[/codeblock]" msgstr "" +"Перетворює кут виражений в градуÑах в радіани.\n" +"[codeblock]\n" +"r = deg2rad(180) # r це 3.141593\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 msgid "" "Converts a dictionary (previously created with [method inst2dict]) back to " "an instance. Useful for deserializing." msgstr "" +"Конвертує Ñловник (попередню Ñтворений з [method inst2dict]) зворотно в " +"екземплÑÑ€. КориÑно Ð´Ð»Ñ Ð´ÐµÑеріалізації." #: modules/gdscript/doc_classes/@GDScript.xml:256 msgid "" @@ -3710,112 +3715,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4894,7 +4908,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10300,17 +10314,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/uk/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10319,24 +10337,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10350,62 +10368,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10413,35 +10431,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10449,13 +10467,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10467,78 +10485,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Повертає Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10994,8 +11012,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25017,21 +25038,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/uk/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25040,14 +25072,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25057,80 +25093,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29355,7 +29391,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30668,7 +30706,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30733,22 +30772,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30763,7 +30804,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30771,19 +30812,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30854,7 +30895,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30912,7 +30954,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34467,7 +34511,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37783,7 +37827,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37813,14 +37857,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37830,7 +37874,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40333,17 +40377,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40361,11 +40431,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40560,7 +40630,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41363,6 +41435,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41380,7 +41470,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41494,7 +41584,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44039,24 +44131,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44066,7 +44164,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44076,27 +44174,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44104,81 +44202,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44186,109 +44284,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44299,91 +44397,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44392,13 +44490,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44408,7 +44506,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44416,19 +44514,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44442,45 +44540,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44489,7 +44587,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44500,7 +44598,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44516,14 +44614,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44531,49 +44629,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44582,7 +44680,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44590,7 +44688,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44598,7 +44696,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44608,7 +44706,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44617,7 +44715,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44626,7 +44724,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44636,7 +44734,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44644,7 +44742,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44654,7 +44752,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44664,7 +44762,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44672,7 +44770,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44681,7 +44779,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44689,7 +44787,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44701,477 +44799,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45179,92 +45277,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45274,33 +45372,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45313,7 +45411,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45325,7 +45423,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45337,7 +45435,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45350,7 +45448,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45358,28 +45456,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45389,25 +45487,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45420,7 +45518,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45432,7 +45530,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45444,7 +45542,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45457,13 +45555,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45471,11 +45569,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45489,7 +45587,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45498,7 +45596,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45514,7 +45612,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45524,7 +45622,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45534,7 +45632,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45545,7 +45643,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45555,7 +45653,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45563,7 +45661,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45574,7 +45672,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45589,7 +45687,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45598,13 +45696,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45613,7 +45711,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45623,7 +45721,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45635,7 +45733,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45645,24 +45743,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45671,7 +45769,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45679,7 +45777,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45688,7 +45786,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45698,7 +45796,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45706,31 +45804,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45738,7 +45836,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45748,21 +45846,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45770,31 +45868,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45802,7 +45900,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45812,7 +45910,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45821,7 +45919,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45830,20 +45928,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45852,7 +45950,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45860,7 +45958,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45869,7 +45967,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45879,20 +45977,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45901,13 +45999,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45917,46 +46015,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45966,7 +46064,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45978,7 +46076,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45986,7 +46084,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45994,7 +46092,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46003,7 +46101,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46017,7 +46115,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46027,7 +46125,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46036,7 +46134,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46046,54 +46144,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46104,61 +46202,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46169,7 +46267,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46178,26 +46276,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46208,20 +46306,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46233,52 +46331,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46286,7 +46384,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46299,7 +46397,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46311,7 +46409,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46323,7 +46421,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46335,7 +46433,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46347,7 +46445,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47011,40 +47109,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47052,14 +47164,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49394,6 +49506,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49411,7 +49539,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49419,11 +49547,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49433,19 +49561,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54862,20 +54990,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54886,28 +55019,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54919,19 +55052,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/vi.po b/doc/translations/vi.po index a8cde40b8e..ab89a8ef09 100644 --- a/doc/translations/vi.po +++ b/doc/translations/vi.po @@ -7,12 +7,13 @@ # IoeCmcomc <hopdaigia2004@gmail.com>, 2021. # Hung <hungthitkhia@gmail.com>, 2021. # Giacat Buile <hatconan20024@gmail.com>, 2021. +# Quinn Le <quinnsgn@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-09-14 16:36+0000\n" -"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n" +"PO-Revision-Date: 2021-11-12 13:49+0000\n" +"Last-Translator: Quinn Le <quinnsgn@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/vi/>\n" "Language: vi\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -131,7 +132,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:55 -#, fuzzy msgid "" "Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of " "cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -143,14 +143,13 @@ msgid "" "[/codeblock]" msgstr "" "Trả vá» côsin nghịch đảo cá»§a [code]s[/code] theo radian. Dùng để lấy góc cá»§a " -"cốin [code]s[/code].\n" +"côsin [code]s[/code].\n" "[codeblock]\n" "# c là 0.523599 hoặc 30 độ nếu chuyển sang bằng hà m rad2deg(s)\n" "c = acos(0.866025)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:66 -#, fuzzy msgid "" "Returns the arc sine of [code]s[/code] in radians. Use to get the angle of " "sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -162,14 +161,14 @@ msgid "" "[/codeblock]" msgstr "" "Trả vá» sin nghịch đảo [code]s[/code] theo radian. Dùng để lấy góc cá»§a sin " -"[code]s[/code].\n" +"[code]s[/code]. s phải từ -1.0 đến 1.0, nếu không thì hà m sẽ trả [constant " +"NAN].\n" "[codeblock]\n" "# s là 0.523599 hoặc 30 độ nếu chuyển sang bằng rad2deg(s)\n" "s = asin(0.5)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:78 -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -205,11 +204,11 @@ msgstr "" "được.\n" "[codeblock]\n" "# giả sá» ta muốn toc_do luôn ở giữa 0 và 20\n" -"toc_di = -10\n" -"assert(toc_do < 20) # Äúng, chương trfinh sẽ tiếp tục\n" +"toc_do = -10\n" +"assert(toc_do < 20) # Äúng, chương trình sẽ tiếp tục\n" "assert(toc_do >= 0) # Sai, chương trình sẽ dừng\n" -"assert(toc_do >= 0 && toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong 1 " -"lần\n" +"assert(toc_do >= 0 and toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong " +"1 lần\n" "assert(toc_do < 20, \"toc_do = %f, nhưng giá»›i hạn tốc độ là 20\" % toc_do) # " "Hiện tin nhắn vá»›i chi tiết cụ thể\n" "[/codeblock]" @@ -276,7 +275,6 @@ msgstr "" "thà nh hệ toạ độ cá»±c (khoảng cách từ gốc và góc giữa Ä‘iểm và gốc)." #: modules/gdscript/doc_classes/@GDScript.xml:135 -#, fuzzy msgid "" "Rounds [code]s[/code] upward (towards positive infinity), returning the " "smallest whole number that is not less than [code]s[/code].\n" @@ -286,12 +284,14 @@ msgid "" "[/codeblock]\n" "See also [method floor], [method round], [method stepify], and [int]." msgstr "" -"Là m tròn [code]s[/code] lên (tiến tá»›i dương vô cá»±c), trả vá» số nguyên không " -"nhá» hÆ¡n [code]s[/code].\n" +"Là m tròn [code]s[/code] lên (tiến tá»›i dương vô cá»±c), trả vá» số dược là m tròn " +"gần nhất nhưng không nhá» hÆ¡n [code]s[/code].\n" "[codeblock]\n" -"i = ceil(1.45) # i là 2\n" -"i = ceil(1.001) # i là 2\n" -"[/codeblock]" +"a = ceil(1.45) # a là 2.0\n" +"a = ceil(1.001) # a là 2.0\n" +"[/codeblock]\n" +"Ngoà i ra còn có thể xem [method floor], [method round], [method stepify] và " +"[int]." #: modules/gdscript/doc_classes/@GDScript.xml:147 msgid "" @@ -313,7 +313,6 @@ msgstr "" "Äây là ngược lại cá»§a hà m [method ord]." #: modules/gdscript/doc_classes/@GDScript.xml:162 -#, fuzzy msgid "" "Clamps [code]value[/code] and returns a value not less than [code]min[/code] " "and not more than [code]max[/code].\n" @@ -326,13 +325,9 @@ msgstr "" "Cố định [code]gia_tri[/code] và trả vá» giá trị không nhá» hÆ¡n [code]min[/" "code] và không lá»›n hÆ¡n [code]max[/code].\n" "[codeblock]\n" -"toc_do = 1000\n" -"# a là 20\n" -"a = clamp(toc_do, 1, 20)\n" -"\n" -"toc_do = -10\n" -"# a là 1\n" -"a = clamp(toc_do, 1, 20)\n" +"a = clamp(1000, 1, 20) #a bằng 20\n" +"a = clamp(-10, 1, 20) #a bằng 1\n" +"a = clamp(15, 1, 20) #a bằng 15\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:175 @@ -360,7 +355,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:190 -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -370,9 +364,8 @@ msgid "" msgstr "" "Trả vá» côsin cá»§a góc [code]s[/code] theo radian.\n" "[codeblock]\n" -"# Xuất 1 rồi -1\n" -"print(cos(PI * 2))\n" -"print(cos(PI))\n" +"a = cos(TAU) #a bằng 1.0\n" +"a = cos(PI) #a bằng -1.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:201 @@ -398,7 +391,6 @@ msgid "Deprecated alias for [method step_decimals]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml:227 -#, fuzzy msgid "" "[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in " "Godot 4.0, please use [method move_toward] instead.\n" @@ -408,15 +400,15 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" -"Trả vè kết quả hiệu cá»§a [code]gia_tri[/code] và [code]buoc[/code] * " +"Ghi chú: [code]dectime[/code] sẽ không được dùng nữa và bị bá» trong phiên " +"bản Godot 4.0, thay vì đó hãy dùng [method move_toward].\n" +"Trả vá» kết quả hiệu cá»§a [code]gia_tri[/code] và [code]buoc[/code] * " "[code]luong[/code].\n" "[codeblock]\n" -"# a = 59\n" -"a = dectime(60, 10, 0.1))\n" +"a = dectime(60, 10, 0.1)) #a bằng 59.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:238 -#, fuzzy msgid "" "Converts an angle expressed in degrees to radians.\n" "[codeblock]\n" @@ -425,8 +417,7 @@ msgid "" msgstr "" "Chuyển má»™t góc từ độ thà nh radian.\n" "[codeblock]\n" -"# r là 3.141593\n" -"r = deg2rad(180)\n" +"r = deg2rad(180) #r bằng 3.141593\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:248 @@ -458,6 +449,23 @@ msgid "" "See also [method smoothstep]. If you need to perform more advanced " "transitions, use [Tween] or [AnimationPlayer]." msgstr "" +"Trả vá» má»™t giá trị được là m dịu cá»§a [code]x[/code] theo má»™t hà m thay đổi giá " +"trị theo thá»i gian được xác định bằng [code]duong_cong[/code]. Hà m nà y dá»±a " +"trên má»™t số mÅ©. [code]duong_cong[/code] có thể là bất kỳ số tháºp phân, vá»›i " +"các giá trị xác định dẫn tá»›i má»™t hà nh vi cụ thể:\n" +"[codeblock]\n" +"- Nhá» hÆ¡n -1.0 (độc quyá»n): Ease in-out\n" +"- -1.0: Linear\n" +"- Từ -1.0 đến 0.0 (độc quyá»n): Ease out-in\n" +"- 0.0: Constant\n" +"- Từ 0.0 đến 1.0 (độc quyá»n): Ease in\n" +"- 1.0: Linear\n" +"- Lá»›n hÆ¡n 1.0 (độc quyá»n): Ease out\n" +"[/codeblock]\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/" +"ease_cheatsheet.png]ease() bảng giá trị các đưá»ng cong[/url]\n" +"Xem thêm [method smoothstep]. Nếu cần các cách chuyển nâng cao hÆ¡n thì dùng " +"[Tween] hoặc [AnimationPlayer]." #: modules/gdscript/doc_classes/@GDScript.xml:274 msgid "" @@ -480,7 +488,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml:286 -#, fuzzy msgid "" "Rounds [code]s[/code] downward (towards negative infinity), returning the " "largest whole number that is not more than [code]s[/code].\n" @@ -494,16 +501,16 @@ msgid "" "[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] " "directly." msgstr "" -"Là m tròn [code]s[/code] xuống (tiến tá»›i âm vô cá»±c), trả vá» số nguyên không " -"lá»›n hÆ¡n [code]s[/code].\n" +"Là m tròn [code]s[/code] xuống (tiến tá»›i âm vô cá»±c), trả vá» số nguyên gần " +"nhất nhưng không lá»›n hÆ¡n [code]s[/code].\n" "[codeblock]\n" -"# a là 2.0\n" -"a = floor(2.99)\n" -"# a là -3.0\n" -"a = floor(-2.99)\n" +"a = floor(2.45) #a bằng 2.0\n" +"a = floor(2.99) #a bằng 2.0\n" +"a = floor(-2.99) #a bằng -3.0\n" "[/codeblock]\n" -"[b]Lưu ý:[/b] Hà m nà y trả vá» số thá»±c. Nếu cần số nguyên, bạn có thể dùng hà m " -"[code]int(s)[/code] trá»±c tiếp." +"Xem thêm [method ceil], [method round], [method stepify] và [int].\n" +"[b]Lưu ý:[/b] Hà m nà y trả vá» số thá»±c. Nếu cần số nguyên và [code]s[/code] là " +"má»™t số không âm, bạn có thể dùng hà m [code]int(s)[/code] trá»±c tiếp." #: modules/gdscript/doc_classes/@GDScript.xml:301 #, fuzzy @@ -4012,112 +4019,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -5204,7 +5220,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10583,15 +10599,19 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10600,24 +10620,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10631,62 +10651,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10694,35 +10714,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10730,13 +10750,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10748,78 +10768,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "Trả vá» tan nghịch đảo cá»§a tham số." -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -11267,8 +11287,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25228,20 +25251,31 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25250,14 +25284,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25267,80 +25305,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29537,7 +29575,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30838,7 +30878,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30903,22 +30944,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30933,7 +30976,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30941,19 +30984,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -31021,7 +31064,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -31079,7 +31123,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34617,7 +34663,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37915,7 +37961,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37945,14 +37991,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37962,7 +38008,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40462,17 +40508,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40490,11 +40562,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40689,7 +40761,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41492,6 +41566,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41509,7 +41601,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41623,7 +41715,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44172,24 +44266,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44199,7 +44299,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44209,27 +44309,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44237,81 +44337,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44319,111 +44419,111 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 #, fuzzy msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44434,91 +44534,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44527,13 +44627,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44543,7 +44643,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44551,19 +44651,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44577,45 +44677,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44624,7 +44724,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44635,7 +44735,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44651,14 +44751,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44666,49 +44766,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44717,7 +44817,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44725,7 +44825,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44733,7 +44833,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44743,7 +44843,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44752,7 +44852,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44761,7 +44861,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44771,7 +44871,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44779,7 +44879,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44789,7 +44889,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44799,7 +44899,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44807,7 +44907,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44816,7 +44916,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44824,7 +44924,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44836,477 +44936,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45314,92 +45414,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45409,33 +45509,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45448,7 +45548,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45460,7 +45560,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45472,7 +45572,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45485,7 +45585,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45493,28 +45593,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45524,25 +45624,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45555,7 +45655,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45567,7 +45667,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45579,7 +45679,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45592,13 +45692,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45606,11 +45706,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45624,7 +45724,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45633,7 +45733,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45649,7 +45749,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45659,7 +45759,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45669,7 +45769,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45680,7 +45780,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45690,7 +45790,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45698,7 +45798,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45709,7 +45809,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45724,7 +45824,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45733,13 +45833,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45748,7 +45848,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45758,7 +45858,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45770,7 +45870,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45780,24 +45880,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45806,7 +45906,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45814,7 +45914,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45823,7 +45923,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45833,7 +45933,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45841,31 +45941,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45873,7 +45973,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45883,21 +45983,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45905,31 +46005,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45937,7 +46037,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45947,7 +46047,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45956,7 +46056,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45965,20 +46065,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45987,7 +46087,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45995,7 +46095,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -46004,7 +46104,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -46014,20 +46114,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -46036,13 +46136,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -46052,46 +46152,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -46101,7 +46201,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -46113,7 +46213,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -46121,7 +46221,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -46129,7 +46229,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -46138,7 +46238,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -46152,7 +46252,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46162,7 +46262,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46171,7 +46271,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46181,54 +46281,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46239,61 +46339,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46304,7 +46404,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46313,26 +46413,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46343,20 +46443,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46368,52 +46468,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46421,7 +46521,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46434,7 +46534,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46446,7 +46546,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46458,7 +46558,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46470,7 +46570,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46482,7 +46582,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -47146,40 +47246,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47187,14 +47301,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49521,6 +49635,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49538,7 +49668,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49546,11 +49676,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49560,19 +49690,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54962,20 +55092,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54986,28 +55121,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -55019,19 +55154,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po index 9d8db6ea96..8ecab23167 100644 --- a/doc/translations/zh_CN.po +++ b/doc/translations/zh_CN.po @@ -61,8 +61,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-11-03 13:15+0000\n" -"Last-Translator: suplife <2634557184@qq.com>\n" +"PO-Revision-Date: 2021-11-19 08:44+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" "Language: zh_CN\n" @@ -70,7 +70,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -348,7 +348,7 @@ msgid "" "[/codeblock]\n" "This is the inverse of [method ord]." msgstr "" -"返回一个作为å—符串的å—符,该å—符为给定Unicode代ç 点(与ASCIIç 兼容)。\n" +"返回一个作为å—符串的å—符,该å—符为给定Unicodeç¼–ç (与ASCIIç 兼容)。\n" "[codeblock]\n" "a = char(65) # a is \"A\"\n" "a = char(65 + 32) # a is \"a\"\n" @@ -366,7 +366,7 @@ msgid "" "a = clamp(15, 1, 20) # a is 15\n" "[/codeblock]" msgstr "" -"钳制 [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/" +"é™åˆ¶ [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/" "code]的值。\n" "[codeblock]\n" "a = clamp(1000, 1, 20) # a = 20\n" @@ -4072,7 +4072,7 @@ msgstr "将属性åºåˆ—化并ä¿å˜åˆ°åœºæ™¯æ–‡ä»¶ä¸ï¼ˆé»˜è®¤ï¼‰ã€‚" #: doc/classes/@GlobalScope.xml:1436 msgid "The property is shown in the editor inspector (default)." -msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„å±žæ€§æ£€æŸ¥å™¨é¢æ¿ä¸ï¼ˆé»˜è®¤ï¼‰ã€‚" +msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸ï¼ˆé»˜è®¤ï¼‰ã€‚" #: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442 msgid "Deprecated usage flag, unused." @@ -4080,7 +4080,7 @@ msgstr "åºŸå¼ƒä½¿ç”¨çš„æ ‡å¿—ï¼Œæœªä½¿ç”¨ã€‚" #: doc/classes/@GlobalScope.xml:1445 msgid "The property can be checked in the editor inspector." -msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的属性检查器ä¸è¢«å‹¾é€‰ã€‚" +msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的检查器ä¸è¢«å‹¾é€‰ã€‚" #: doc/classes/@GlobalScope.xml:1448 msgid "The property is checked in the editor inspector." @@ -4391,19 +4391,21 @@ msgstr "" #: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11 #: doc/classes/Vector3.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/index.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/math/index.html" #: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12 #: doc/classes/Vector3.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vector_math.html" #: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13 #: doc/classes/Vector3.xml:13 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vectors_advanced." +"html" #: doc/classes/AABB.xml:22 msgid "Constructs an [AABB] from a position and size." @@ -4421,86 +4423,95 @@ msgid "" msgstr "该 [AABB] 完全包å«å¦ä¸€ä¸ªæ—¶ï¼Œè¿”回 [code]true[/code]。" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." -msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。" +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "返回该 [AABB] 的体积。" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "获å–该 [AABB] çš„ 8 个端点的ä½ç½®ã€‚" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "返回该 [AABB] 归一化åŽçš„æœ€é•¿è½´ã€‚" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" "返回该 [AABB] æœ€é•¿è½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "返回该 [AABB] æœ€é•¿è½´çš„æ ‡é‡é•¿åº¦ã€‚" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "返回该 [AABB] 归一化åŽçš„æœ€çŸè½´ã€‚" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" "返回该 [AABB] 最çŸè½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "返回该 [AABB] 最çŸè½´çš„æ ‡é‡é•¿åº¦ã€‚" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "返回指定方å‘上的支æŒç‚¹ã€‚常用于碰撞检测算法。" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "返回该 [AABB] çš„å‰¯æœ¬ï¼Œæ²¿ç€æ‰€æœ‰é¢çš„æ–¹å‘éƒ½å¢žåŠ äº†æŒ‡å®šçš„å¤§å°ã€‚" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "该 [AABB] ä¸ºå¹³é¢æˆ–者为空时,返回 [code]true[/code]。" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "该 [AABB] 为空时,返回 [code]true[/code]。" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "该 [AABB] åŒ…å«æŒ‡å®šç‚¹æ—¶ï¼Œè¿”回 [code]true[/code]。" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "返回两个 [AABB] 的交å 区域。失败时返回空的 AABB(大å°ä¸º 0,0,0)。" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "该 [AABB] 与å¦ä¸€ä¸ªäº¤å 时,返回 [code]true[/code]。" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "该 [AABB] åŒæ—¶ä½äºŽæŒ‡å®šå¹³é¢çš„两边时,返回 [code]true[/code]。" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." @@ -4508,7 +4519,7 @@ msgstr "" "该 [AABB] 与 [code]from[/code] å’Œ [code]to[/code] 所构æˆçš„çº¿æ®µæœ‰äº¤å æ—¶ï¼Œè¿”回 " "[code]true[/code]。" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " @@ -4517,23 +4528,23 @@ msgstr "" "该 [AABB] 与 [code]aabb[/code] è¿‘ä¼¼ç›¸ç‰æ—¶ï¼Œè¿”回 [code]true[/code]。通过将å„个" "分é‡è°ƒç”¨ [method @GDScript.is_equal_approx] 确定。" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "è¿”å›žåŒæ—¶åŒ…å«è¯¥ [AABB] å’Œ [code]with[/code] 的更大的 [AABB]。" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" "终点角。通过 [code]position + size[/code] 计算而æ¥ã€‚设置该值会修改大å°ã€‚" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "起点角。通常比 [member end] å°ã€‚" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4658,7 +4669,7 @@ msgstr "接å—å¯¹è¯æ¡†æ—¶ï¼Œå³æŒ‰ä¸‹OK按钮时å‘出。" #: doc/classes/AcceptDialog.xml:82 msgid "Emitted when a custom button is pressed. See [method add_button]." -msgstr "按下自定义按钮时å‘出。 å‚阅[方法add_button]。" +msgstr "按下自定义按钮时å‘出。 å‚阅[method add_button]。" #: doc/classes/AESContext.xml:4 msgid "Interface to low level AES encryption features." @@ -4820,7 +4831,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_sprite_animation." +"html" #: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11 #: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24 @@ -5109,7 +5121,8 @@ msgstr "" #: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/index.html" #: doc/classes/Animation.xml:28 msgid "Adds a track to the Animation." @@ -5147,9 +5160,9 @@ msgid "" "End offset is the number of seconds cut off at the ending of the audio " "stream." msgstr "" -"返回由[code] key_idx [/code]æ ‡è¯†çš„é”®çš„ç»“æŸåç§»é‡ã€‚ [code] track_idx [/code]å¿…" -"须是音轨的索引。\n" -"结æŸå移是音频æµç»“æŸæ—¶æˆªæ–的秒数。" +"返回由 [code]key_idx[/code] æ ‡è¯†çš„é”®çš„ç»“æŸåç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»" +"是音频轨é“的索引。\n" +"结æŸåç§»æ˜¯éŸ³é¢‘æµæœ«å°¾æˆªæ–的秒数。" #: doc/classes/Animation.xml:71 msgid "" @@ -5158,17 +5171,17 @@ msgid "" "Start offset is the number of seconds cut off at the beginning of the audio " "stream." msgstr "" -"返回由[code] key_idx [/code]æ ‡è¯†çš„é”®çš„èµ·å§‹åç§»é‡ã€‚ [code] track_idx [/code]å¿…" -"须是音轨的索引。\n" -"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å§‹å¤„截æ–的秒数。" +"返回由 [code]key_idx[/code] æ ‡è¯†çš„é”®çš„èµ·å§‹åç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»" +"是音频轨é“的索引。\n" +"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å¤´æˆªæ–的秒数。" #: doc/classes/Animation.xml:80 msgid "" "Returns the audio stream of the key identified by [code]key_idx[/code]. The " "[code]track_idx[/code] must be the index of an Audio Track." msgstr "" -"返回由[code] key_idx [/code]æ ‡è¯†çš„é”®çš„éŸ³é¢‘æµã€‚ [code] track_idx [/code]必须是" -"音轨的索引。" +"返回由 [code]key_idx[/code] æ ‡è¯†çš„é”®çš„éŸ³é¢‘æµã€‚[code]track_idx[/code] 必须是音" +"频轨é“的索引。" #: doc/classes/Animation.xml:91 msgid "" @@ -5178,10 +5191,10 @@ msgid "" "[code]start_offset[/code] is the number of seconds cut off at the beginning " "of the audio stream, while [code]end_offset[/code] is at the ending." msgstr "" -"在给定的[code]æ—¶é—´[/code](以秒为å•ä½ï¼‰ä¸æ’入音轨音调。 [code] track_idx [/" -"code]必须是音轨的索引。\n" -"[code] stream [/code]æ˜¯è¦æ’放的[AudioStream]资æºã€‚ [code] start_offset [/" -"code]是在音频æµçš„开头截æ–的秒数,而[code] end_offset [/code]在结尾。" +"在 [code]time[/code] 秒处æ’入音频轨é“关键帧。[code] track_idx [/code] 必须是" +"音频轨é“的索引。\n" +"[code]stream[/code] æ˜¯è¦æ’放的 [AudioStream] 资æºã€‚[code]start_offset[/code] " +"是在音频æµçš„开头截æ–的秒数,而 [code]end_offset[/code] 则是在结尾的截æ–。" #: doc/classes/Animation.xml:101 msgid "" @@ -5189,8 +5202,8 @@ msgid "" "[code]offset[/code]. The [code]track_idx[/code] must be the index of an " "Audio Track." msgstr "" -"将由 [code]key_idx[/code] æ ‡è¯†çš„é”®çš„ç»“æŸå移设置为值 [code]offset[/code]. " -"[code]track_idx[/code] 必须是音轨的索引." +"将由 [code]key_idx[/code] æ ‡è¯†çš„å…³é”®å¸§çš„ç»“æŸå移设置为值 [code]offset[/" +"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。" #: doc/classes/Animation.xml:110 msgid "" @@ -5198,8 +5211,8 @@ msgid "" "[code]offset[/code]. The [code]track_idx[/code] must be the index of an " "Audio Track." msgstr "" -"将由 [code]key_idx[/code] 确定的键的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/code]. " -"[code]track_idx[/code] 必须是音频轨é“的索引." +"将由 [code]key_idx[/code] 确定的关键帧的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/" +"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。" #: doc/classes/Animation.xml:119 msgid "" @@ -5270,8 +5283,8 @@ msgid "" "[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a " "Bezier Track." msgstr "" -"将由 [code]key_idx[/code] 确定的键的输出柄设置为 [code]out_handle[/code] 。" -"[code]track_idx[/code] 必须是 Bezier轨é“的索引。" +"将由 [code]key_idx[/code] 确定的关键帧的输出柄设置为 [code]out_handle[/" +"code] ã€‚å‚æ•° [code]track_idx[/code] 必须是è´å¡žå°”曲线轨é“的索引。" #: doc/classes/Animation.xml:190 msgid "" @@ -5351,7 +5364,8 @@ msgstr "返回钥匙所在的时间。" msgid "" "Returns the transition curve (easing) for a specific key (see the built-in " "math function [method @GDScript.ease])." -msgstr "返回特定键的过渡曲线(缓动)(å‚阅内置数å¦å‡½æ•°[方法@GDScript.ease])。" +msgstr "" +"返回特定键的过渡曲线(缓动)(å‚阅内置数å¦å‡½æ•°[method @GDScript.ease])。" #: doc/classes/Animation.xml:303 msgid "Returns the value of a given key in a given track." @@ -5361,7 +5375,8 @@ msgstr "返回给定轨é“ä¸ç»™å®šé”®çš„值。" msgid "" "Gets the path of a track. For more information on the path format, see " "[method track_set_path]." -msgstr "获å–è½¨è¿¹çš„è·¯å¾„ã€‚æœ‰å…³è·¯å¾„æ ¼å¼çš„详细信æ¯ï¼Œè¯·å‚阅[方法 track_set_path]。" +msgstr "" +"获å–è½¨è¿¹çš„è·¯å¾„ã€‚æœ‰å…³è·¯å¾„æ ¼å¼çš„详细信æ¯ï¼Œè¯·å‚阅[method track_set_path]。" #: doc/classes/Animation.xml:317 msgid "Gets the type of a track." @@ -5432,7 +5447,8 @@ msgstr "设置现有键的时间。" msgid "" "Sets the transition curve (easing) for a specific key (see the built-in math " "function [method @GDScript.ease])." -msgstr "设置特定键的过渡曲线(缓动)(å‚阅内置数å¦å‡½æ•°[方法@GDScript.ease])。" +msgstr "" +"设置特定键的过渡曲线(缓动)(å‚阅内置数å¦å‡½æ•°[method @GDScript.ease])。" #: doc/classes/Animation.xml:438 msgid "Sets the value of an existing key." @@ -5548,7 +5564,7 @@ msgid "" "value of a [Color])." msgstr "" "Bezier轨迹用于使用自定义曲线对数值进行æ’值。它们也å¯ä»¥ç”¨æ¥å¯¹å‘é‡å’Œé¢œè‰²çš„å属" -"性进行动画处ç†ï¼ˆä¾‹å¦‚[颜色]çš„alpha值)。" +"性进行动画处ç†ï¼ˆä¾‹å¦‚[Color]çš„alpha值)。" #: doc/classes/Animation.xml:543 msgid "" @@ -5556,12 +5572,12 @@ msgid "" "[AudioStreamPlayer]. The stream can be trimmed and previewed in the " "animation." msgstr "" -"éŸ³è½¨æ˜¯ç”¨æ¥æ’放音频æµçš„任何一ç§ç±»åž‹çš„[AudioStreamPlayer]。该æµå¯ä»¥åœ¨åŠ¨ç”»ä¸è¿›è¡Œ" -"修剪和预览。" +"音频轨é“å¯ä»¥ç”¨æ¥é€šè¿‡ä»»æ„类型的 [AudioStreamPlayer] æ’æ”¾éŸ³é¢‘æµã€‚该æµå¯ä»¥åœ¨åŠ¨ç”»" +"ä¸è¿›è¡Œä¿®å‰ªå’Œé¢„览。" #: doc/classes/Animation.xml:546 msgid "Animation tracks play animations in other [AnimationPlayer] nodes." -msgstr "动画曲目在其他 [åŠ¨ç”»æ’æ”¾å™¨] èŠ‚ç‚¹ä¸æ’放动画。" +msgstr "动画曲目在其他 [AnimationPlayer] èŠ‚ç‚¹ä¸æ’放动画。" #: doc/classes/Animation.xml:549 msgid "No interpolation (nearest value)." @@ -5631,7 +5647,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/animation_tree." +"html" #: doc/classes/AnimationNode.xml:18 msgid "" @@ -5863,7 +5880,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -6482,7 +6499,7 @@ msgid "" "[/codeblock]" msgstr "" "è®¾ç½®æ¤æ¡ä»¶ï¼Œå¼€å¯è‡ªåЍå‰è¿›ã€‚æä¾›çš„åç§°å°†æˆä¸º[AnimationTree]ä¸Šçš„ä¸€ä¸ªå¸ƒå°”å‚æ•°ï¼Œå¯" -"ä»¥é€šè¿‡ä»£ç æŽ§åˆ¶ï¼Œå‚阅[url=https://docs.godotengine.org/en/3.4/tutorials/" +"ä»¥é€šè¿‡ä»£ç æŽ§åˆ¶ï¼Œå‚阅[url=https://docs.godotengine.org/zh_CN/stable/tutorials/" "animation/animation_tree.html#controlling-from-code][/url]。例如,如果" "[member AnimationTree.tree_root]是一个[AnimationNodeStateMachine],[member " "advance_condition]被设置为[code]\"idle\"[/code]。\n" @@ -6636,8 +6653,8 @@ msgid "" "a [Tween] node, but it requires doing everything by code.\n" "Updating the target properties of animations occurs at process time." msgstr "" -"åŠ¨ç”»æ’æ”¾å™¨ç”¨äºŽ[动画]资æºçš„é€šç”¨æ’æ”¾ã€‚它包å«ä¸€ä¸ªåŠ¨ç”»å—典(以å称为å‚考)和自定" -"义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚æ¤å¤–,动画å¯ä»¥åœ¨ä¸åŒçš„通é“䏿’放和混åˆã€‚\n" +"åŠ¨ç”»æ’æ”¾å™¨ç”¨äºŽ[Animation]资æºçš„é€šç”¨æ’æ”¾ã€‚它包å«ä¸€ä¸ªåŠ¨ç”»å—典(以å称为å‚考)和" +"自定义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚æ¤å¤–,动画å¯ä»¥åœ¨ä¸åŒçš„通é“䏿’放和混åˆã€‚\n" "AnimationPlayer]比[Tween]更适åˆç”¨äºŽäº‹å…ˆçŸ¥é“最终值的动画。例如,由于编辑器æä¾›" "的动画工具,用[AnimationPlayer]节点更容易完æˆå±å¹•的淡入淡出。这个特殊的例å也" "å¯ä»¥ç”¨[Tween]节点æ¥å®žçŽ°ï¼Œä½†è¿™éœ€è¦é€šè¿‡ä»£ç æ¥å®Œæˆä¸€åˆ‡ã€‚\n" @@ -6862,7 +6879,7 @@ msgstr "当剿’放的动画的ä½ç½®ï¼ˆä»¥ç§’为å•ä½ï¼‰ã€‚" #: doc/classes/AnimationPlayer.xml:200 msgid "The call mode to use for Call Method tracks." -msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚" +msgstr "æ–¹æ³•è°ƒç”¨è½¨é“æ‰€ä½¿ç”¨çš„调用模å¼ã€‚" #: doc/classes/AnimationPlayer.xml:203 msgid "" @@ -7522,7 +7539,6 @@ msgid "https://godotengine.org/asset-library/asset/127" msgstr "https://godotengine.org/asset-library/asset/127" #: doc/classes/Area.xml:17 -#, fuzzy msgid "" "Returns a list of intersecting [Area]s. The overlapping area's [member " "CollisionObject.collision_layer] must be part of this area's [member " @@ -7531,12 +7547,13 @@ msgid "" "list is modified once during the physics step, not immediately after objects " "are moved. Consider using signals instead." msgstr "" -"返回一个相交的[PhysicsBody]çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½çš„åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åœ¨åŒä¸€æ—¶é—´å¤„ç†" -"çš„ï¼‰ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘" -"ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" +"返回相交的[Area]的列表。é‡å 区域的[member CollisionObject.collision_layer]å¿…" +"须是这个区域[member CollisionObject.collision_mask]çš„ä¸€éƒ¨åˆ†ï¼Œè¿™æ ·æ‰èƒ½è¢«æ£€æµ‹" +"到。\n" +"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯" +"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" #: doc/classes/Area.xml:24 -#, fuzzy msgid "" "Returns a list of intersecting [PhysicsBody]s. The overlapping body's " "[member CollisionObject.collision_layer] must be part of this area's [member " @@ -7545,9 +7562,11 @@ msgid "" "list is modified once during the physics step, not immediately after objects " "are moved. Consider using signals instead." msgstr "" -"返回一个相交的[PhysicsBody]çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½çš„åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åœ¨åŒä¸€æ—¶é—´å¤„ç†" -"çš„ï¼‰ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘" -"ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" +"返回相交的[PhysicsBody]的列表。é‡å 物体的[member CollisionObject." +"collision_layer]必须是这个区域[member CollisionObject.collision_mask]的一部" +"åˆ†ï¼Œè¿™æ ·æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n" +"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯" +"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" #: doc/classes/Area.xml:32 msgid "" @@ -7835,7 +7854,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/using_area_2d." +"html" #: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12 #: doc/classes/RectangleShape2D.xml:10 @@ -7849,7 +7869,6 @@ msgid "https://godotengine.org/asset-library/asset/120" msgstr "https://godotengine.org/asset-library/asset/120" #: doc/classes/Area2D.xml:19 -#, fuzzy msgid "" "Returns a list of intersecting [Area2D]s. The overlapping area's [member " "CollisionObject2D.collision_layer] must be part of this area's [member " @@ -7858,11 +7877,13 @@ msgid "" "list is modified once during the physics step, not immediately after objects " "are moved. Consider using signals instead." msgstr "" -"返回相交的 [Area2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表ä¸ä¼šåœ¨" -"对象移动åŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚" +"返回相交的[Area2D]的列表。é‡å 区域的[member CollisionObject2D." +"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部" +"åˆ†ï¼Œè¿™æ ·æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n" +"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯" +"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" #: doc/classes/Area2D.xml:26 -#, fuzzy msgid "" "Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's " "[member CollisionObject2D.collision_layer] must be part of this area's " @@ -7871,8 +7892,11 @@ msgid "" "list is modified once during the physics step, not immediately after objects " "are moved. Consider using signals instead." msgstr "" -"返回相交的 [PhysicsBody2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表" -"ä¸ä¼šåœ¨å¯¹è±¡ç§»åЍåŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚" +"返回相交的[PhysicsBody2D]的列表。é‡å 物体的[member CollisionObject2D." +"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部" +"åˆ†ï¼Œè¿™æ ·æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n" +"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ¥éª¤ä¸åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯" +"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚" #: doc/classes/Area2D.xml:34 msgid "" @@ -8706,8 +8730,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/" "arraymesh.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/" -"arraymesh.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/content/" +"procedural_geometry/arraymesh.html" #: doc/classes/ArrayMesh.xml:36 msgid "" @@ -9072,7 +9096,7 @@ msgstr "" #: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13 #: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/vr/index.html" #: doc/classes/ARVRController.xml:4 msgid "A spatial node representing a spatially-tracked controller." @@ -9906,9 +9930,9 @@ msgid "" "[code]1.0[/code], then this equals the sum of Euclidean distances of all " "segments in the path." msgstr "" -"A*å³A 星是一ç§è®¡ç®—机算法,广泛用于寻路和图é历,通过一组给定的边或线段,在顶" -"点或点之间绘制çŸè·¯å¾„的过程。由于其性能和准确性,而被广泛使用。 Godot çš„ A* 实" -"现默认使用三维空间ä¸çš„点和欧å¼è·ç¦»ã€‚\n" +"A*(A 星)是一ç§è®¡ç®—机算法,广泛用于寻路和图é历,是通过一组给定的边(线" +"段),在顶点(点)之间绘制çŸè·¯å¾„的过程。A* å› å…¶æ€§èƒ½å’Œå‡†ç¡®æ€§è€Œè¢«å¹¿æ³›ä½¿ç”¨ã€‚" +"Godot çš„ A* 实现默认使用三维空间ä¸çš„点和欧å¼è·ç¦»ã€‚\n" "您需è¦ä½¿ç”¨ [method add_point] æ‰‹åŠ¨æ·»åŠ ç‚¹ï¼Œå¹¶ä½¿ç”¨ [method connect_points] 手动" "创建线段。然åŽï¼Œå¯ä»¥ä½¿ç”¨ [method are_points_connected] 函数测试两点之间是å¦å˜" "在路径,通过 [method get_id_path] 获å–包å«ç´¢å¼•的路径,或使用 [method " @@ -9933,8 +9957,8 @@ msgstr "" "的信æ¯ã€‚\n" "如果使用默认的 [method _estimate_cost] å’Œ [method _compute_cost] 方法,或者如" "æžœæä¾›çš„ [method _estimate_cost] æ–¹æ³•è¿”å›žæˆæœ¬çš„下é™ï¼Œåˆ™ A* è¿”å›žçš„è·¯å¾„å°†æ˜¯æˆæœ¬" -"最低的路径。这里,路径的代价ç‰äºŽè·¯å¾„䏿‰€æœ‰æ®µçš„[method_compute_cost]结果之和乘" -"以å„个段端点的[code]weight_scale[/code]æƒé‡ã€‚如果使用默认方法并且所有点的 " +"最低的路径。这里,路径的代价ç‰äºŽè·¯å¾„䏿‰€æœ‰æ®µçš„[method _compute_cost]结果之和" +"乘以å„个段端点的[code]weight_scale[/code]æƒé‡ã€‚如果使用默认方法并且所有点的 " "[code]weight_scale[/code] 设置为 [code]1.0[/code],则这ç‰äºŽè·¯å¾„䏿‰€æœ‰æ®µçš„æ¬§å¼" "è·ç¦»ä¹‹å’Œã€‚" @@ -10484,7 +10508,7 @@ msgid "" "(\"w\" and \"h\" in the editor) resizes the texture so it fits within the " "margin." msgstr "" -"区域周围的边è·ã€‚Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器ä¸çš„ \"w \"å’Œ \"h\")" +"区域周围的边è·ã€‚[Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器ä¸çš„ \"w \"å’Œ \"h\")" "调整纹ç†çš„大å°ï¼Œä½¿å…¶é€‚åˆäºŽè¾¹è·ã€‚" #: doc/classes/AtlasTexture.xml:27 @@ -10860,7 +10884,8 @@ msgstr "" #: doc/classes/AudioEffectHighShelfFilter.xml:9 #: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_buses.html" #: doc/classes/AudioEffectDistortion.xml:18 msgid "Distortion power. Value can range from 0 to 1." @@ -11344,7 +11369,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/audio/" "recording_with_microphone.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/audio/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/" "recording_with_microphone.html" #: doc/classes/AudioEffectRecord.xml:17 @@ -11755,7 +11780,8 @@ msgstr "" #: doc/classes/AudioStreamPlayer2D.xml:12 #: doc/classes/AudioStreamPlayer3D.xml:13 msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_streams.html" #: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12 #: doc/classes/AudioStreamGeneratorPlayback.xml:10 @@ -12479,11 +12505,16 @@ msgid "Prerendered indirect light map for a scene." msgstr "场景的预渲染间接光照贴图。" #: doc/classes/BakedLightmap.xml:7 +#, fuzzy msgid "" "Baked lightmaps are an alternative workflow for adding indirect (or baked) " "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" @@ -12493,12 +12524,12 @@ msgstr "" "[b]注æ„:[/b] 由于光照贴图的工作原ç†ï¼Œå¤§å¤šæ•°å±žæ€§åªæœ‰åœ¨å…‰ç…§è´´å›¾å†æ¬¡çƒ˜ç„™åŽæ‰ä¼š" "看到效果。" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/baked_lightmaps.html" -#: doc/classes/BakedLightmap.xml:19 -#, fuzzy +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -12506,29 +12537,30 @@ msgid "" "If no save path is provided it will try to match the path from the current " "[member light_data]." msgstr "" -"烘焙光照贴图,从给定的 [code]from_node[/code] æ ¹æ‰«æå¹¶å°†ç»“æžœ " -"[BakedLightmapData] ä¿å˜åœ¨ [code]data_save_path[/code] ä¸ã€‚如果没有æä¾›ä¿å˜è·¯" -"径,它将å°è¯•åŒ¹é…æ¥è‡ªå½“å‰ [member light_data] 的路径。" +"烘焙光照贴图,从给定的[code]from_node[/code]æ ¹èŠ‚ç‚¹æ‰«æï¼Œå¹¶å°†äº§ç”Ÿçš„" +"[BakedLightmapData]ä¿å˜åœ¨[code]data_save_path[/code]ä¸ã€‚如果没有æä¾›æ ¹èŠ‚ç‚¹ï¼Œ" +"æ¤èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹å°†ä½œä¸ºæ ¹èŠ‚ç‚¹ã€‚å¦‚æžœæ²¡æœ‰æä¾›ä¿å˜è·¯å¾„,将å°è¯•匹é…当å‰[member " +"light_data]的路径。" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" "å¯ç”¨åŽï¼Œå…‰ç…§è´´å›¾ä¼šå°†æ‰€æœ‰ç½‘æ ¼çš„çº¹ç†åˆå¹¶ä¸ºä¸€ä¸ªå¤§çš„分层纹ç†ã€‚ GLES2 䏿”¯æŒã€‚" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "æ¯ä¸ªå…‰ç…§è´´å›¾å±‚的最大尺寸,仅在å¯ç”¨ [member atlas_generate] 时使用。" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "在烘焙过程ä¸ä½¿ç”¨å…‰çº¿æŠ•å°„åç½®æ¥é¿å…浮点数精度问题。" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -12549,17 +12581,17 @@ msgstr "" "[b]注æ„:[/b] [member bounce_indirect_energy] 仅在[member bounces] 设置为大于" "或ç‰äºŽ[code]1[/code]的值时有效。" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "烘焙过程ä¸è€ƒè™‘的光线å射次数。å‚阅 [member bounce_indirect_energy]。" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "用于实时æ•获动æ€å¯¹è±¡ä¿¡æ¯çš„ç½‘æ ¼å¤§å°ã€‚" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " @@ -12568,16 +12600,16 @@ msgstr "" "å¯ç”¨åŽï¼Œå°†è®¡ç®—包å«åœºæ™¯ç…§æ˜Žä¿¡æ¯çš„八剿 ‘ã€‚ç„¶åŽæ¤å…«å‰æ ‘将用于照亮场景ä¸çš„动æ€å¯¹" "象。" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "å置值,用于å‡å°‘æ•èŽ·çš„å…«å‰æ ‘ä¸çš„å…‰ä¼ æ’é‡ã€‚" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "æ•获数æ®çš„烘焙质é‡ã€‚" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." @@ -12585,7 +12617,7 @@ msgstr "" "如果烘焙åŽçš„ç½‘æ ¼æ²¡æœ‰UV2的尺寸æç¤ºï¼Œè¿™ä¸ªå€¼å°†è¢«ç”¨æ¥ç²—略计算出åˆé€‚的光照贴图尺" "寸。" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." @@ -12593,7 +12625,7 @@ msgstr "" "[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] æ—¶" "的环境颜色。" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " @@ -12602,7 +12634,7 @@ msgstr "" "[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] 或 " "[constant ENVIRONMENT_MODE_CUSTOM_SKY] æ—¶çš„èƒ½é‡æ¯”例系数。" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." @@ -12610,11 +12642,11 @@ msgstr "" "当 [member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_SKY] æ—¶" "è¦ä½¿ç”¨çš„ [Sky] 资æºã€‚" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "烘焙自定义天空的旋转。" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -12624,11 +12656,11 @@ msgstr "" "所有光照贴图纹ç†å…ƒç´ 的最å°çŽ¯å¢ƒå…‰ã€‚è¿™ä¸è€ƒè™‘åœºæ™¯å‡ ä½•ä½“çš„ä»»ä½•é®æŒ¡ï¼Œå®ƒåªæ˜¯ç¡®ä¿æ‰€" "有光照贴图纹ç†å…ƒç´ ä¸Šçš„å…‰é‡æœ€å°ã€‚å¯ç”¨äºŽé˜´å½±é¢œè‰²çš„艺术控制。" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "决定烘焙时使用哪个环境。" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " @@ -12637,17 +12669,17 @@ msgstr "" "烘焙光照贴图的大å°ã€‚åªæœ‰è¯¥åŒºåŸŸå†…çš„ç½‘æ ¼æ‰ä¼šåŒ…å«åœ¨çƒ˜ç„™å…‰ç…§è´´å›¾ä¸ï¼Œä¹Ÿç”¨ä½œåЍæ€å…‰" "ç…§æ•获区域的边界。" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "已废弃,在以å‰çš„版本ä¸ï¼Œå®ƒå†³å®šäº†å…‰ç…§è´´å›¾çš„ä¿å˜ä½ç½®ã€‚" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "计算出的光照数æ®ã€‚" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " @@ -12656,7 +12688,7 @@ msgstr "" "å†³å®šåœ¨ä¸æ£ç¡®çš„å…‰ç…§çƒ˜çƒ¤ä¸æ¯ä¸€ä¸ªçº¹ç†å…ƒç´ çš„é‡‡æ ·é‡ã€‚å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸é…ç½®æ¯ä¸ªè´¨é‡" "çº§åˆ«çš„é‡‡æ ·é‡ã€‚" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -12666,14 +12698,14 @@ msgstr "" "在光照贴图纹ç†ä¸å˜å‚¨å…¨è‰²å€¼ã€‚ç¦ç”¨æ—¶ï¼Œå…‰ç…§è´´å›¾çº¹ç†å°†å˜å‚¨å•个亮度通é“。如果场景" "仅包å«ç™½å…‰æˆ–者您ä¸ä»‹æ„在间接照明ä¸ä¸¢å¤±é¢œè‰²ä¿¡æ¯ï¼Œåˆ™å¯ä»¥ç¦ç”¨ä»¥å‡å°‘ç£ç›˜ä½¿ç”¨é‡ã€‚" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" "å¯ç”¨åŽï¼Œå°†ä½¿ç”¨å…‰ç…§è´´å›¾é™å™ªå™¨æ¥å‡å°‘基于Monte Carlo的全局照明固有的噪声。" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -12692,27 +12724,27 @@ msgstr "" "端或 [member ProjectSettings.rendering/quality/depth/hdr] 为 [code]false,也" "会é™ä½Žå…‰ç…§è´´å›¾æ¡çº¹[/code]。" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "æœ€ä½Žçƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚计算速度最快。" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "é»˜è®¤çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "æ›´é«˜çš„çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥è®¡ç®—。" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "æœ€é«˜çš„çƒ˜çƒ¤è´¨é‡æ¨¡å¼ã€‚éœ€è¦æœ€é•¿çš„æ—¶é—´æ¥è®¡ç®—。" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "烘焙æˆåŠŸã€‚" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." @@ -12720,51 +12752,55 @@ msgstr "" "如果没有找到åˆé€‚çš„ä¿å˜è·¯å¾„,则返回。这å¯èƒ½å‘生在没有指定[member image_path]或" "者ä¿å˜ä½ç½®æ— 效的情况下。" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "当剿œªä½¿ç”¨." -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "当烘焙器ä¸èƒ½å°†æ¯ä¸ªç½‘æ ¼çš„çº¹ç†ä¿å˜åˆ°æ–‡ä»¶æ—¶è¿”回。" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "生æˆçš„光照贴图尺寸过大。" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "æœ‰äº›ç½‘æ ¼åŒ…å«[code][0,1][/code]范围以外的UV2值。" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "å¦‚æžœç”¨æˆ·å–æ¶ˆäº†çƒ˜çƒ¤ï¼Œåˆ™è¿”回。" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" +"如果ä¸èƒ½åˆ›å»ºå…‰ç…§è´´å›¾å™¨ï¼Œåˆ™è¿”回。除éžä½ 使用的是自定义的光照贴图器,å¦åˆ™è¯·å°†æ¤" +"报告为bug。" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" +"æ²¡æœ‰æ ¹èŠ‚ç‚¹å¯ä»¥å¼€å§‹çƒ˜ç„™ã€‚è¦ä¹ˆæä¾›[code]from_node[/code]傿•°ï¼Œè¦ä¹ˆå°†æ¤èŠ‚ç‚¹é™„åŠ " +"åˆ°ä¸€ä¸ªè¢«ç”¨ä½œæ ¹èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹ã€‚" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "烘焙过程ä¸ä¸ä½¿ç”¨ä»»ä½•环境。" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "烘焙环境会自动从当å‰åœºæ™¯ä¸èŽ·å–。" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "在烘焙过程ä¸ä½¿ç”¨è‡ªå®šä¹‰å¤©ç©ºä½œä¸ºçŽ¯å¢ƒã€‚" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "烘焙过程ä¸ä½¿ç”¨è‡ªå®šä¹‰çº¯è‰²ä½œä¸ºçŽ¯å¢ƒã€‚" @@ -13015,12 +13051,13 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/math/" +"matrices_and_transforms.html" #: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms.html" #: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11 #: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13 @@ -13291,9 +13328,12 @@ msgstr "返回设置为[code]true[/code]çš„ä½å›¾å…ƒç´ 的数é‡ã€‚" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." -msgstr "在ä½å›¾ä¸Šåº”ç”¨å½¢æ€æ‰©å±•ã€‚ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯æ‰©å±•é‡ï¼ŒRect2是è¦åº”用扩展的区域。" +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." +msgstr "" #: doc/classes/BitMap.xml:66 msgid "" @@ -13782,6 +13822,8 @@ msgid "" "text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"当[Button]获得焦点时使用的文本[Color]。åªå–代按钮的æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœå’Œ" +"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/Button.xml:80 msgid "Text [Color] used when the [Button] is being hovered." @@ -13817,7 +13859,7 @@ msgid "" "Only one allows being pressed.\n" "[member BaseButton.toggle_mode] should be [code]true[/code]." msgstr "" -"[按钮]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„åæŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n" +"[Button]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„åæŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n" "[member BaseButton.toggle_mode]应该是[code]true[/code]。" #: doc/classes/ButtonGroup.xml:16 @@ -14721,14 +14763,16 @@ msgstr "" #: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10 #: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_transforms.html" #: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18 #: doc/classes/Node2D.xml:10 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/custom_drawing_in_2d." +"html" #: doc/classes/CanvasItem.xml:23 msgid "" @@ -14926,8 +14970,8 @@ msgid "" "for performance reasons. Transforms are accumulated and then set. Use this " "if you need an up-to-date transform when doing physics operations." msgstr "" -"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼Œç‰©ç†å¦ä¸çš„å˜æ¢å˜åŒ–䏿˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯ç´¯ç§¯åŽå†è®¾ç½®" -"çš„ã€‚å¦‚æžœæ‚¨åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ¤åŠŸèƒ½ã€‚" +"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼Œç‰©ç†ä¸çš„å˜æ¢æ”¹å˜ä¸æ˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯åœ¨ç´¯ç§¯åŽå†è®¾" +"ç½®ã€‚å¦‚æžœä½ åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ¤åŠŸèƒ½ã€‚" #: doc/classes/CanvasItem.xml:269 msgid "Returns the [RID] of the [World2D] canvas where this item is in." @@ -14989,7 +15033,7 @@ msgid "" "Returns [code]true[/code] if the node is set as top-level. See [method " "set_as_toplevel]." msgstr "" -"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[方法set_as_toplevel]。" +"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[method set_as_toplevel]。" #: doc/classes/CanvasItem.xml:353 msgid "" @@ -15295,7 +15339,8 @@ msgstr "" #: doc/classes/CanvasLayer.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/canvas_layers.html" #: doc/classes/CanvasLayer.xml:18 msgid "Returns the RID of the canvas used by this layer." @@ -15437,8 +15482,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/" +"bbcode_in_richtextlabel.html" #: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17 msgid "" @@ -15504,7 +15549,7 @@ msgid "" msgstr "" "包å«åœ¨å¼€å¤´çš„BBCodeæ ‡è®°ä¸ä¼ é€’çš„å‚æ•°ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œå‚æ•°æ˜¯å—符串。如果它们的内容" "与[bool],[int]或[float]之类的类型匹é…,它们将被自动转æ¢ã€‚æ ¼å¼ä¸º[code] " -"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç 将转æ¢ä¸ºä¸é€æ˜Žçš„[颜色]。å—符串" +"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç 将转æ¢ä¸ºä¸é€æ˜Žçš„[Color]。å—符串" "傿•°å³ä½¿ä½¿ç”¨å¼•å·ä¹Ÿä¸èƒ½åŒ…å«ç©ºæ ¼ã€‚如果å˜åœ¨ï¼Œå¼•å·ä¹Ÿå°†å‡ºçŽ°åœ¨æœ€ç»ˆå—符串ä¸ã€‚\n" "例如,开头的BBCodeæ ‡ç¾[code] [example foo = hello bar = true baz = 42 color =" "#ffffff] [/code]å°†æ˜ å°„åˆ°ä»¥ä¸‹[Dictionary]:\n" @@ -15558,9 +15603,8 @@ msgid "The check icon to display when the [CheckBox] is checked." msgstr "选ä¸[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚" #: doc/classes/CheckBox.xml:28 -#, fuzzy msgid "The check icon to display when the [CheckBox] is checked and disabled." -msgstr "选ä¸å¹¶ç¦ç”¨[CheckButton]æ—¶æ˜¾ç¤ºçš„å›¾æ ‡ã€‚" +msgstr "当[CheckBox]被选ä¸å’Œç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„å‹¾é€‰å›¾æ ‡ã€‚" #: doc/classes/CheckBox.xml:31 msgid "" @@ -15590,6 +15634,8 @@ msgid "" "text color of the checkbox. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"[CheckBox] 文本获得焦点时的å—体颜色。åªå–代å¤é€‰æ¡†çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœå’Œ" +"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/CheckBox.xml:49 msgid "The [CheckBox] text's font color when it's hovered." @@ -15644,10 +15690,9 @@ msgid "The check icon to display when the [CheckBox] is unchecked." msgstr "未选ä¸[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚" #: doc/classes/CheckBox.xml:86 -#, fuzzy msgid "" "The check icon to display when the [CheckBox] is unchecked and disabled." -msgstr "未选ä¸å’Œç¦ç”¨[CheckButton]æ—¶æ˜¾ç¤ºçš„å›¾æ ‡ã€‚" +msgstr "当[CheckBox]未被选ä¸å¹¶è¢«ç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„å‹¾é€‰å›¾æ ‡ã€‚" #: doc/classes/CheckButton.xml:4 msgid "Checkable button. See also [CheckBox]." @@ -15702,6 +15747,8 @@ msgid "" "normal text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"[CheckButton] 文本获得焦点时的å—ä½“é¢œè‰²ã€‚ä»…æ›¿æ¢æŒ‰é’®çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœ" +"和按下状æ€ä¼˜å…ˆäºŽæ¤é¢œè‰²ã€‚" #: doc/classes/CheckButton.xml:43 msgid "The [CheckButton] text's font color when it's hovered." @@ -15869,10 +15916,10 @@ msgid "" "[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, " "usage)[/code]." msgstr "" -"返回[code]signal[/code][code]class[/code]或其父级的数æ®ã€‚返回值是带有以下键" -"çš„ [Dictionary]: [code]args[/code], [code]default_args[/code], [code]flags[/" -"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, " -"hint_string, name, type, usage)[/code]。" +"返回 [code]class[/code] 或其父级的[code]ä¿¡å·[/code]æ•°æ®ã€‚返回 [Dictionary] å¹¶" +"带有以下键: [code]args[/code], [code]default_args[/code], [code]flags[/" +"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, " +"hint_string, name, type, usage)[/code]。" #: doc/classes/ClassDB.xml:113 msgid "" @@ -15902,8 +15949,8 @@ msgid "" "Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/" "code] is [code]false[/code]) has a method called [code]method[/code] or not." msgstr "" -"返回[code] class [/code](如果[code] no_inheritance [/code]为[code] false [/" -"code],则返回其父级)是å¦å…·æœ‰ç§°ä¸º[code]method[/code]的方法。" +"返回 [code]class[/code] æ˜¯å¦æœ‰å为 [code]method[/code] 的方法。(如果[code] " +"no_inheritance [/code]为[code] false [/code],则返回其父级)。" #: doc/classes/ClassDB.xml:147 msgid "" @@ -16019,9 +16066,9 @@ msgid "" "information." msgstr "" "相机的碰撞é®ç½©ã€‚åªæœ‰åœ¨å¯¹è±¡æœ‰è‡³å°‘一个碰撞层和碰撞这招匹对时æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚详细" -"ä¿¡æ¯è¯·å‚阅文档[url=https://docs.godotengine.org/en/3.4/tutorials/physics/" -"physics_introduction.html#collision-layers-and-masks]Collision layers and " -"masks[/url]。" +"ä¿¡æ¯è¯·å‚阅文档[url=https://docs.godotengine.org/zh_CN/stable/tutorials/" +"physics/physics_introduction.html#collision-layers-and-masks]Collision " +"layers and masks[/url]。" #: doc/classes/ClippedCamera.xml:81 msgid "" @@ -16045,10 +16092,10 @@ msgid "" "owners are not nodes and do not appear in the editor, but are accessible " "through code using the [code]shape_owner_*[/code] methods." msgstr "" -"CollisionObject是物ç†å¦å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»ä½•æ•°é‡çš„碰撞形状 [Shape]s。æ¯" -"个形状必须分é…给一个形状所有者 [i]shape owner[/i]。CollisionObjectå¯ä»¥æœ‰ä»»æ„" -"æ•°é‡çš„å½¢çŠ¶æ‰€æœ‰è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸ä¼šå‡ºçŽ°åœ¨ç¼–è¾‘å™¨ä¸ï¼Œä½†æ˜¯å¯ä»¥é€šè¿‡ä»£ç " -"使用[code] shape_owner_* [/code]方法进行访问。" +"CollisionObject是物ç†å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»ä½•æ•°é‡çš„碰撞形状 [Shape]s。æ¯ä¸ª" +"形状必须分é…给一个形状所有者 [i]shape owner[/i]。CollisionObjectå¯ä»¥æœ‰ä»»æ„æ•°" +"é‡çš„å½¢çŠ¶æ‰€æœ‰è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸ä¼šå‡ºçŽ°åœ¨ç¼–è¾‘å™¨ä¸ï¼Œä½†æ˜¯å¯ä»¥é€šè¿‡ä»£ç 使" +"用[code] shape_owner_* [/code]方法进行访问。" #: doc/classes/CollisionObject.xml:20 msgid "" @@ -16188,8 +16235,8 @@ msgstr "" "个。å¦è§ [member collision_mask]。\n" "[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A扫æçš„任何层ä¸ï¼Œ" "则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://docs.godotengine.org/" -"en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-" -"masks] 碰撞层和掩ç [/url]。" +"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-" +"and-masks] 碰撞层和掩ç [/url]。" #: doc/classes/CollisionObject.xml:178 msgid "" @@ -16205,8 +16252,8 @@ msgstr "" "å¦è§ [member collision_layer]]。\n" "[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A扫æçš„任何层ä¸ï¼Œ" "则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://docs.godotengine.org/" -"en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-" -"masks] 碰撞层和掩ç [/url]。" +"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-" +"and-masks] 碰撞层和掩ç [/url]。" #: doc/classes/CollisionObject.xml:182 msgid "" @@ -16339,7 +16386,7 @@ msgstr "" "这个CollisionObject2D所在的物ç†å±‚。碰撞对象å¯ä»¥å˜åœ¨äºŽ32个ä¸åŒå±‚ä¸çš„一个或多" "个。也è§[member collision_mask]。\n" "[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A扫æçš„任何层ä¸ï¼Œ" -"则检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/en/latest/" +"则检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/latest/" "tutorials/physics/physics_introduction.html#collision-layers-and-masks] 碰撞" "层和掩ç [/url]。" @@ -16356,7 +16403,7 @@ msgstr "" "这个CollisionObject2D所扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ32个ä¸åŒå±‚ä¸çš„一个或多" "个。也è§[member collision_layer]。\n" "[b]注æ„:[/b] 如果对象A在对象B扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A扫æçš„任何层" -"ä¸ï¼Œå°±ä¼šæ£€æµ‹åˆ°æŽ¥è§¦ã€‚更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/en/" +"ä¸ï¼Œå°±ä¼šæ£€æµ‹åˆ°æŽ¥è§¦ã€‚更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/" "latest/tutorials/physics/physics_introduction.html#collision-layers-and-" "masks] 碰撞层和掩ç [/url]。" @@ -16526,8 +16573,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/" +"physics_introduction.html" #: doc/classes/CollisionShape.xml:19 msgid "" @@ -16806,7 +16853,7 @@ msgid "" "approximately equal, by running [method @GDScript.is_equal_approx] on each " "component." msgstr "" -"通过在æ¯ä¸ªç»„件上è¿è¡Œ[方法@GDScript.is_equal_approx],如果这个颜色和" +"通过在æ¯ä¸ªç»„件上è¿è¡Œ[method @GDScript.is_equal_approx],如果这个颜色和" "[code]color[/code]近似相ç‰ï¼Œè¿”回[code]true[/code]。" #: doc/classes/Color.xml:146 @@ -17816,6 +17863,8 @@ msgid "" "normal text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"当[ColorPickerButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚" +"ç¦ç”¨ã€æ‚¬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/ColorPickerButton.xml:83 msgid "Text [Color] used when the [ColorPickerButton] is being hovered." @@ -18361,7 +18410,7 @@ msgid "" "[method get_icon], [method get_stylebox], and the [code]add_*_override[/" "code] methods provided by this class." msgstr "" -"所有 UI 相关节点的基类。 [Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–" +"所有 UI 相关节点的基类。[Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–" "当å‰è§†çª—的锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚ 当节点ã€å…¶ä»»ä½•父节点或å±å¹•尺寸å‘生" "å˜åŒ–时,边è·ä¼šè‡ªåŠ¨æ›´æ–°ã€‚\n" "更多关于 Godot çš„ UI 系统ã€é”šç‚¹ã€è¾¹è·å’Œå®¹å™¨çš„ä¿¡æ¯ï¼Œè¯·å‚阅手册ä¸çš„相关教程。 " @@ -18381,22 +18430,22 @@ msgstr "" "它。\n" "[Theme] èµ„æºæ›´æ”¹æŽ§ä»¶çš„外观。 如果您更改 [Control] 节点上的 [Theme],则会影å“" "其所有å节点。 è¦è¦†ç›–æŸäº›ä¸»é¢˜çš„傿•°ï¼Œè¯·è°ƒç”¨ [code]add_*_override[/code] 方法" -"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨å±žæ€§æ£€æŸ¥å™¨è¦†ç›–主题。\n" -"[b]注æ„:[/b] 主题相关项 [i]䏿˜¯[/i] [Object] 对象属性。这æ„味ç€ä½ ä¸èƒ½ä½¿ç”¨ " -"[method Object.get] å’Œ [method Object.set] 访问它们的值。相å,请使用 " -"[method get_color]ã€[method get_constant]ã€[method get_font]ã€[method " -"get_icon]ã€[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/" -"code] 方法。" +"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨æ£€æŸ¥å™¨è¦†ç›–主题。\n" +"[b]注æ„:[/b] 主题项目[i]䏿˜¯[/i] [Object] 的属性。这æ„味ç€ä½ æ— æ³•ä½¿ç”¨ " +"[method Object.get] å’Œ [method Object.set] 访问它们的值。请æ¢ç”¨ [method " +"get_color]ã€[method get_constant]ã€[method get_font]ã€[method get_icon]ã€" +"[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/code] 方法。" #: doc/classes/Control.xml:17 msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/gui/index.html" #: doc/classes/Control.xml:19 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/control_node_gallery." +"html" #: doc/classes/Control.xml:20 msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui" @@ -18634,10 +18683,10 @@ msgid "" "$MyButton.add_stylebox_override(\"normal\", null)\n" "[/codeblock]" msgstr "" -"使用指定的 [code]name[/code] 为主题 [StyleBox] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜" -"项时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ 除覆盖。\n" -"å‚阅[method get_stylebox]。\n" -"[b]通过å¤åˆ¶æ¥ä¿®æ”¹StyleBoxä¸çš„属性的示例:[/b]\n" +"为主题 [StyleBox] 创建å为 [code]name[/code] çš„æœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹" +"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ 除覆盖。\n" +"å‚阅 [method get_stylebox]。\n" +"[b]通过å¤åˆ¶æ¥ä¿®æ”¹ StyleBox ä¸çš„属性的示例:[/b]\n" "[codeblock]\n" "# 下é¢çš„代ç 片段å‡è®¾å节点 MyButton 分é…了一个 StyleBoxFlat。\n" "# èµ„æºæ˜¯è·¨å®žä¾‹å…±äº«çš„,所以我们需è¦å¤åˆ¶å®ƒ\n" @@ -18646,7 +18695,7 @@ msgstr "" "new_stylebox_normal.border_width_top = 3\n" "new_stylebox_normal.border_color = Color(0, 1, 0.5)\n" "$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n" -"# åˆ é™¤æ ·å¼æ¡†è¦†ç›–。\n" +"# åˆ é™¤æ ·å¼ç›’覆盖。\n" "$MyButton.add_stylebox_override(\"normal\", null)\n" "[/codeblock]" @@ -18927,9 +18976,9 @@ msgid "" "[code]theme_type[/code].\n" "See [method get_color] for details." msgstr "" -"如果该 [Theme] 具有指定 [code]name[/code] å’Œ [code]theme_type[/code] çš„æ ·å¼æ¡†" -"é¡¹ç›®ï¼Œåˆ™ä»Žæ ‘ä¸ç¬¬ä¸€ä¸ªåŒ¹é…çš„ [Theme] 返回 [StyleBox]。\n" -"有关详细信æ¯ï¼Œè¯·å‚阅 [method get_color]。" +"è¿”å›žæ ‘ä¸é¦–ä¸ªç¬¦åˆæ¡ä»¶çš„ [Theme] çš„ [StyleBox],这个 [Theme] 具有å称为 " +"[code]name[/code] 并且主题类型为 [code]theme_type[/code] çš„æ ·å¼ç›’。\n" +"详情请å‚阅 [method get_color]。" #: doc/classes/Control.xml:368 msgid "" @@ -19715,8 +19764,8 @@ msgstr "" "缩放。\n" "[b]注æ„:[/b] 这个属性主è¦ç”¨äºŽåŠ¨ç”»ç”¨é€”ã€‚å½“æŽ§ä»¶è¢«ç¼©æ”¾æ—¶ï¼ŒæŽ§ä»¶å†…çš„æ–‡æœ¬å°†çœ‹èµ·æ¥" "是åƒç´ 化或模糊的。è¦åœ¨ä½ 的项目支æŒå¤šç§åˆ†è¾¨çŽ‡ï¼Œè¯·ä½¿ç”¨[url=https://docs." -"godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions.html]文档[/" -"url]ä¸æè¿°çš„åˆé€‚的视窗拉伸模å¼ï¼Œè€Œä¸æ˜¯å•独缩放控件。\n" +"godotengine.org/zh_CN/stable/tutorials/viewports/multiple_resolutions.html]æ–‡" +"æ¡£[/url]ä¸æè¿°çš„åˆé€‚的视窗拉伸模å¼ï¼Œè€Œä¸æ˜¯å•独缩放控件。\n" "[b]注æ„:[/b] 如果控件节点是[Container]节点的一个å节点,当场景实例化时,缩放" "将被é‡ç½®ä¸º[code]Vector2(1, 1)[/code]。è¦åœ¨å®žä¾‹åŒ–时设置控件的缩放,使用" "[code]yield(get_tree(), \"idle_frame\")[/code]ç‰å¾…一帧,然åŽè®¾ç½®å…¶[member " @@ -19826,20 +19875,20 @@ msgstr "" #: doc/classes/Control.xml:864 msgid "The node cannot grab focus. Use with [member focus_mode]." -msgstr "è¯¥èŠ‚ç‚¹æ— æ³•èŽ·å–焦点。与[member focus_mode]一起使用。" +msgstr "è¯¥èŠ‚ç‚¹æ— æ³•èŽ·å–焦点。在 [member focus_mode] ä¸ä½¿ç”¨ã€‚" #: doc/classes/Control.xml:867 msgid "" "The node can only grab focus on mouse clicks. Use with [member focus_mode]." -msgstr "该节点åªèƒ½æŠ“ä½é¼ æ ‡å•击的焦点。与[member focus_mode]一起使用。" +msgstr "该节点åªèƒ½é€šè¿‡é¼ æ ‡ç‚¹å‡»èŽ·å–焦点。在 [member focus_mode] ä¸ä½¿ç”¨ã€‚" #: doc/classes/Control.xml:870 msgid "" "The node can grab focus on mouse click or using the arrows and the Tab keys " "on the keyboard. Use with [member focus_mode]." msgstr "" -"该节点å¯ä»¥é›†ä¸ç²¾åŠ›äºŽé¼ æ ‡å•击或使用键盘上的ç®å¤´å’ŒTab键。与[member focus_mode]" -"一起使用。" +"该节点å¯ä»¥é€šè¿‡ä½¿ç”¨é¼ æ ‡ç‚¹å‡»æˆ–ä½¿ç”¨é”®ç›˜ä¸Šçš„ç®å¤´å’Œ Tab 键获å–焦点。在 [member " +"focus_mode] ä¸ä½¿ç”¨ã€‚" #: doc/classes/Control.xml:873 msgid "" @@ -20234,9 +20283,9 @@ msgid "" "automatically marked as handled, and they will not propagate further to " "other controls. This also results in blocking signals in other controls." msgstr "" -"如果å•击,控件将通过[method_gui_input]æŽ¥æ”¶é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ã€‚å¹¶ä¸”æŽ§ä»¶å°†æŽ¥æ”¶" -"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚è¿™äº›äº‹ä»¶å°†è‡ªåŠ¨æ ‡è®°ä¸ºå·²å¤„" -"ç†ï¼Œå¹¶ä¸”ä¸ä¼šè¿›ä¸€æ¥ä¼ æ’到其他控件。这也会导致其他控件ä¸çš„ä¿¡å·é˜»å¡žã€‚" +"被点击时,控件将通过 [method _gui_input] æ”¶åˆ°é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ã€‚æŽ§ä»¶èƒ½å¤ŸæŽ¥æ”¶" +"到 [signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚è¿™äº›äº‹ä»¶å°†è‡ªåŠ¨è¢«æ ‡è®°" +"为已处ç†ï¼Œä¸ä¼šè¿›ä¸€æ¥ä¼ æ’åˆ°å…¶ä»–æŽ§ä»¶ï¼Œå› æ¤ç›¸å…³çš„ä¿¡å·ä¹Ÿä¸ä¼šåœ¨å…¶ä»–控件ä¸è§¦å‘。" #: doc/classes/Control.xml:1029 msgid "" @@ -20249,11 +20298,11 @@ msgid "" "all, the event will still be handled automatically, so unhandled input will " "not be fired." msgstr "" -"如果å•击,控件将通过[method_gui_input]æŽ¥æ”¶é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ã€‚å¹¶ä¸”æŽ§ä»¶å°†æŽ¥æ”¶" -"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚å¦‚æžœæ¤æŽ§ä»¶æœªå¤„ç†äº‹ä»¶ï¼Œåˆ™å°†" -"è€ƒè™‘çˆ¶æŽ§ä»¶ï¼ˆå¦‚æžœæœ‰ï¼‰ï¼Œä¾æ¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为æ¢ã€‚这也å…许信" -"å·åœ¨å…¶ä»–控件ä¸è§¦å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹ä»¶ä»å°†è‡ªåЍ处ç†ï¼Œå› æ¤ä¸" -"ä¼šè§¦å‘æœªå¤„ç†çš„输入。" +"被点击时,控件将通过 [method _gui_input] æ”¶åˆ°é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ã€‚æŽ§ä»¶èƒ½å¤ŸæŽ¥æ”¶ " +"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚å¦‚æžœæ¤æŽ§ä»¶æœªå¤„ç†äº‹ä»¶ï¼Œ" +"则将考虑其父控件(如果有的è¯ï¼‰ï¼Œå¹¶ä¾æ¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为" +"æ¢ã€‚å› æ¤ï¼Œç›¸å…³çš„ä¿¡å·å¯ä»¥åœ¨å…¶ä»–控件ä¸è§¦å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹" +"ä»¶ä»å°†è¢«è‡ªåЍ处ç†ï¼Œå› æ¤ä¸ä¼šè§¦å‘未处ç†çš„输入。" #: doc/classes/Control.xml:1032 msgid "" @@ -20263,9 +20312,9 @@ msgid "" "receiving these events or firing the signals. Ignored events will not be " "handled automatically." msgstr "" -"控件将ä¸ä¼šé€šè¿‡[method_gui_input]æŽ¥æ”¶é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ã€‚è¯¥æŽ§ä»¶ä¹Ÿä¸ä¼šæŽ¥æ”¶" -"[signal mouse_entered]或[signal mouse_exited]ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ¢å…¶ä»–控件接收这些" -"事件或触å‘ä¿¡å·ã€‚忽略的事件将ä¸ä¼šè‡ªåЍ处ç†ã€‚" +"该控件ä¸ä¼šé€šè¿‡ [method _gui_input] æ”¶åˆ°é¼ æ ‡æŒ‰é’®è¾“å…¥äº‹ä»¶ï¼Œä¹Ÿä¸ä¼šæŽ¥æ”¶åˆ° " +"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ¢å…¶ä»–控件接收" +"这些事件或触å‘ä¿¡å·ã€‚被忽略的事件将ä¸ä¼šè¢«è‡ªåЍ处ç†ã€‚" #: doc/classes/Control.xml:1035 msgid "" @@ -20298,9 +20347,9 @@ msgid "" "variables, like [member anchor_left]. To change all 4 anchors at once, use " "[method set_anchors_preset]." msgstr "" -"å°†4个锚点的一侧之一对é½åˆ°èŠ‚ç‚¹çš„[code] Rect [/code]的左上角。与[code] anchor " -"_ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹æ‰€æœ‰4个" -"锚点,请使用[method set_anchors_preset]。" +"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] 的左上角。在 " +"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨" +"部 4 个锚点,请使用 [method set_anchors_preset]。" #: doc/classes/Control.xml:1047 msgid "" @@ -20309,9 +20358,9 @@ msgid "" "member variables, like [member anchor_left]. To change all 4 anchors at " "once, use [method set_anchors_preset]." msgstr "" -"å°†4ä¸ªé”šç‚¹çš„ä¸€ä¾§ä¹‹ä¸€æ•æ‰åˆ°å³ä¸‹è§’节点[code] Rect [/code]的末端。与[code] " -"anchor _ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹" -"所有4个锚点,请使用[method set_anchors_preset]。" +"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] çš„å³ä¸‹è§’。在 " +"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨" +"部 4 个锚点,请使用 [method set_anchors_preset]。" #: doc/classes/ConvexPolygonShape.xml:4 msgid "Convex polygon shape for 3D physics." @@ -20404,7 +20453,7 @@ msgstr "返回[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§ç³»æ•°ã€‚" #: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47 msgid "" "Returns the enabled state of the given flag (see [enum Flags] for options)." -msgstr "è¿”å›žç»™å®šæ ‡å¿—çš„å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[æžšä¸¾æ ‡å¿—])。" +msgstr "è¿”å›žç»™å®šæ ‡å¿—çš„å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[enum Flags])。" #: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53 msgid "Restarts the particle emitter." @@ -20425,7 +20474,7 @@ msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§å› å。" #: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85 msgid "Enables or disables the given flag (see [enum Flags] for options)." -msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[æžšä¸¾æ ‡å¿—])。" +msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[enum Flags])。" #: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91 #: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33 @@ -20489,7 +20538,7 @@ msgstr "ç²’å动画速度。" #: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125 msgid "Each particle's animation speed will vary along this [Curve]." -msgstr "æ¯ä¸ªç²’å的动画速度将沿æ¤[曲线]å˜åŒ–。" +msgstr "æ¯ä¸ªç²’å的动画速度将沿æ¤[Curve]å˜åŒ–。" #: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128 #: doc/classes/ParticlesMaterial.xml:112 @@ -21026,7 +21075,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/particle_systems_2d." +"html" #: doc/classes/CPUParticles2D.xml:19 msgid "" @@ -21348,7 +21398,7 @@ msgstr "" "从[code]path[/code]åŠ è½½ä¸€ä¸ªå¯†é’¥ã€‚å¦‚æžœ[code]public_only[/code]是[code]true[/" "code],将åªåŠ è½½å…¬é’¥ã€‚\n" "[b]注æ„:[/b] 如果[code]public_only[/code]是[code]true[/code],[code]path[/" -"code]应该是一个 \"*.pub \" 文件,å¦åˆ™æ˜¯ \"*.key \" 文件。" +"code]应该是一个 \"*.pub\" 文件,å¦åˆ™æ˜¯ \"*.key\" 文件。" #: doc/classes/CryptoKey.xml:34 msgid "" @@ -21768,7 +21818,7 @@ msgstr "" "è€Œä¸æ˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用 " "collision_mask 属性。\n" "如果对象A在对象B所扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A所扫æçš„任何层ä¸ï¼Œå°±ä¼šæ£€æµ‹" -"åˆ°æŽ¥è§¦ã€‚è¯¦è§æ–‡æ¡£ä¸çš„[url=https://docs.godotengine.org/en/3.4/tutorials/" +"åˆ°æŽ¥è§¦ã€‚è¯¦è§æ–‡æ¡£ä¸çš„[url=https://docs.godotengine.org/zh_CN/stable/tutorials/" "physics/physics_introduction.html#collision-layers-and-masks]碰撞层和掩ç [/" "url]。" @@ -21780,7 +21830,7 @@ msgid "" "documentation for more information." msgstr "" "æ¤ CSG å½¢çŠ¶å°†è¦æ‰«æç¢°æ’žçš„物ç†å±‚。有关更多信æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://" -"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction." +"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction." "html#collision-layers-and-masks]碰撞层和掩ç [/url]。" #: modules/csg/doc_classes/CSGShape.xml:68 @@ -21915,8 +21965,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/c_sharp/" +"index.html" #: modules/mono/doc_classes/CSharpScript.xml:18 #: modules/gdnative/doc_classes/PluginScript.xml:13 @@ -22489,7 +22539,7 @@ msgid "" "code], and its fractional part as [code]t[/code]." msgstr "" "返回顶点 [code]fofs[/code] çš„ä½ç½®ã€‚它使用 [code]fofs[/code] 的整数部分作为 " -"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [方法æ’值]。" +"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [method interpolate]。" #: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145 msgid "" @@ -22743,7 +22793,7 @@ msgstr "ä¸€ç§æ˜¾ç¤ºæ›²çº¿çš„纹ç†ã€‚" msgid "" "Renders a given [Curve] provided to it. Simplifies the task of drawing " "curves and/or saving them as image files." -msgstr "渲染æä¾›ç»™å®ƒçš„[曲线]。简化了绘制曲线和/或ä¿å˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。" +msgstr "渲染æä¾›ç»™å®ƒçš„[Curve]。简化了绘制曲线和/或ä¿å˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。" #: doc/classes/CurveTexture.xml:15 msgid "The [code]curve[/code] rendered onto the texture." @@ -22822,13 +22872,13 @@ msgstr "圆柱体的åŠå¾„。" #: doc/classes/DampedSpringJoint2D.xml:4 msgid "Damped spring constraint for 2D physics." -msgstr "二维物ç†å¦çš„阻尼弹簧约æŸã€‚" +msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚" #: doc/classes/DampedSpringJoint2D.xml:7 msgid "" "Damped spring constraint for 2D physics. This resembles a spring joint that " "always wants to go back to a given length." -msgstr "二维物ç†å¦çš„阻尼弹簧约æŸã€‚这类似于一个总是想回到给定长度的弹簧关节。" +msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚这类似于总是想回到给定长度的弹簧关节。" #: doc/classes/DampedSpringJoint2D.xml:15 msgid "" @@ -22845,7 +22895,7 @@ msgstr "" msgid "" "The spring joint's maximum length. The two attached bodies cannot stretch it " "past this value." -msgstr "弹簧接头的最大长度。两个连接体ä¸èƒ½è¶…过这个值。" +msgstr "弹簧关节的最大长度。两个连接体ä¸èƒ½è¶…过这个值。" #: doc/classes/DampedSpringJoint2D.xml:21 msgid "" @@ -23071,7 +23121,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" "gdscript_basics.html#dictionary" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/" "gdscript_basics.html#dictionary" #: doc/classes/Dictionary.xml:94 @@ -23108,8 +23158,8 @@ msgid "" "key does not exist, the method returns the value of the optional default " "argument, or [code]null[/code] if it is omitted." msgstr "" -"返回[å—å…¸]䏿Œ‡å®šé”®çš„当å‰å€¼ã€‚如果键ä¸å˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚数的值;如果" -"çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。" +"返回[Dictionary]䏿Œ‡å®šé”®çš„当å‰å€¼ã€‚如果键ä¸å˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚æ•°çš„" +"值;如果çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。" #: doc/classes/Dictionary.xml:130 msgid "" @@ -23198,7 +23248,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/lights_and_shadows." +"html" #: doc/classes/DirectionalLight.xml:16 msgid "" @@ -23370,8 +23421,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/" +"filesystem.html" #: doc/classes/Directory.xml:35 msgid "" @@ -23465,10 +23516,10 @@ msgid "" "mandatory in such a case)." msgstr "" "返回当å‰ç›®å½•ä¸çš„ä¸‹ä¸€ä¸ªå…ƒç´ ï¼ˆæ–‡ä»¶æˆ–ç›®å½•ï¼‰ï¼ˆåŒ…æ‹¬[code].[/code]å’Œ[code].[/" -"code],除éž[code]skip_navigational[/code]被赋予[方法list_dir_begin])。\n" +"code],除éž[code]skip_navigational[/code]被赋予[method list_dir_begin])。\n" "返回的是文件或目录的åç§°ï¼ˆè€Œä¸æ˜¯å®ƒçš„完整路径)。一旦æµè¢«å®Œå…¨å¤„ç†ï¼Œè¯¥æ–¹æ³•返回" -"一个空的Stringï¼Œå¹¶è‡ªåŠ¨å…³é—æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[方法list_dir_end]将䏿˜¯å¼ºåˆ¶æ€§" -"的)。" +"一个空的Stringï¼Œå¹¶è‡ªåŠ¨å…³é—æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[method list_dir_end]将䏿˜¯å¼ºåˆ¶" +"性的)。" #: doc/classes/Directory.xml:103 msgid "" @@ -24562,7 +24613,6 @@ msgstr "" "æºç±»åž‹å¯¼å…¥ã€‚" #: doc/classes/EditorImportPlugin.xml:7 -#, fuzzy msgid "" "EditorImportPlugins provide a way to extend the editor's resource import " "functionality. Use them to import resources from custom files or to provide " @@ -24619,15 +24669,15 @@ msgid "" "[/codeblock]" msgstr "" "EditorImportPluginsæä¾›äº†ä¸€ç§æ‰©å±•编辑器资æºå¯¼å…¥åŠŸèƒ½çš„æ–¹æ³•ã€‚ä½¿ç”¨å®ƒä»¬æ¥å¯¼å…¥è‡ªå®š" -"义文件资æºï¼Œæˆ–者æˆä¸ºç¼–辑器现有导入器的替代å“。用[method EditorPlugin." +"义文件ä¸çš„资æºï¼Œæˆ–æˆä¸ºç¼–辑器现有导入器的替代å“。用[method EditorPlugin." "add_import_plugin]æ³¨å†Œä½ çš„[EditorPlugin]。\n" "EditorImportPlugins通过与特定的文件扩展å和资æºç±»åž‹ç›¸å…³è”æ¥å·¥ä½œã€‚å‚阅 " -"[method get_recognized_extensions] å’Œ [method get_resource_type]。它们å¯ä»¥é€‰" -"择性地指定一些影å“导入过程的导入预置。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿" -"å˜åœ¨[code].import[/code]目录ä¸ï¼Œå‚阅[member ProjectSettings.application/" -"config/project_data_dir_name]。\n" -"䏋颿˜¯ä¸€ä¸ªEditorImportPlugin的例å,它从扩展å为\".special \"或\".spec \"的文" -"ä»¶ä¸å¯¼å…¥ä¸€ä¸ª[Mesh]:\n" +"[method get_recognized_extensions] å’Œ [method get_resource_type]。其å¯ä»¥é€‰æ‹©" +"性地指定一些影å“导入过程的导入预置。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿å˜" +"在[code].import[/code]目录ä¸ï¼Œå‚阅[member ProjectSettings.application/config/" +"use_hidden_project_data_directory]。\n" +"䏋颿˜¯ä¸€ä¸ªEditorImportPlugin的例å,它从扩展å为 \".special\" 或 \".spec\" çš„" +"文件ä¸å¯¼å…¥ä¸€ä¸ª[Mesh]:\n" "[codeblock]\n" "tool\n" "extends EditorImportPlugin\n" @@ -24674,8 +24724,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/" +"import_plugins.html" #: doc/classes/EditorImportPlugin.xml:58 msgid "" @@ -24684,9 +24734,9 @@ msgid "" "[code]default_value[/code], [code]property_hint[/code] (optional), " "[code]hint_string[/code] (optional), [code]usage[/code] (optional)." msgstr "" -"获å–该索引下预设的选项和默认值。返回一个包å«ä»¥ä¸‹é”®åçš„Dictionaries数组。" -"[code]name[/code], [code]default_value[/code], [code]property_hint[/code](å¯" -"选), [code]hint_string[/code](å¯é€‰), [code]use[/code](å¯é€‰)。" +"获å–该索引下预设的选项和默认值。返回一个å—典数组,包å«ä»¥ä¸‹é”®å:[code]name[/" +"code]ã€[code]default_value[/code]ã€[code]property_hint[/code](å¯é€‰ï¼‰ã€" +"[code]hint_string[/code](å¯é€‰ï¼‰ã€[code]usage[/code](å¯é€‰ï¼‰ã€‚" #: doc/classes/EditorImportPlugin.xml:64 msgid "" @@ -24775,14 +24825,13 @@ msgstr "" "[code]\"Animation\"[/code]。" #: doc/classes/EditorImportPlugin.xml:124 -#, fuzzy msgid "" "Gets the extension used to save this resource in the [code].import[/code] " "directory (see [member ProjectSettings.application/config/" "use_hidden_project_data_directory])." msgstr "" "获å–用于在[code].import[/code]目录ä¸ä¿å˜æ¤èµ„æºçš„æ‰©å±•å,å‚阅[member " -"ProjectSettings.application/config/project_data_dir_name]。" +"ProjectSettings.application/config/use_hidden_project_data_directory]。" #: doc/classes/EditorImportPlugin.xml:130 msgid "" @@ -24917,7 +24966,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/" "inspector_plugins.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/" "inspector_plugins.html" #: doc/classes/EditorInspectorPlugin.xml:23 @@ -25224,7 +25273,7 @@ msgstr "" #: doc/classes/EditorPlugin.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/index.html" #: doc/classes/EditorPlugin.xml:18 msgid "" @@ -25614,8 +25663,8 @@ msgid "" " return forward\n" "[/codeblock]" msgstr "" -"在当å‰ç¼–辑的场景ä¸å˜åœ¨æ ¹èŠ‚ç‚¹æ—¶è°ƒç”¨ï¼Œå®žçŽ°[æ–¹æ³•å¥æŸ„]并在3D视窗ä¸å‘生按键输入" -"[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则" +"在当å‰ç¼–辑的场景ä¸å˜åœ¨æ ¹èŠ‚ç‚¹æ—¶è°ƒç”¨ï¼Œå®žçŽ°[method handles]并在3D视窗ä¸å‘生按键" +"输入[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则" "[EditorPlugin]会使用键值[code]event[/code],å¦åˆ™å°†é”®å€¼[code]event[/code]转å‘" "到其他Editor类。例å:\n" "[codeblock]\n" @@ -26130,6 +26179,8 @@ msgid "" "[code]edit[/code] is [code]true[/code], the signal was caused by the context " "menu \"Edit\" option." msgstr "" +"当资æºå€¼è¢«è®¾ç½®ï¼Œå¹¶ä¸”用户点击它编辑时触å‘。当[code]edit[/code]为[code]true[/" +"code]æ—¶ï¼Œè¯¥ä¿¡å·æ˜¯ç”±ä¸Šä¸‹æ–‡èœå•çš„ \"Edit\" 选项引起。" #: doc/classes/EditorResourcePreview.xml:4 msgid "Helper to generate previews of resources or files." @@ -26188,14 +26239,14 @@ msgid "" "[code]receiver_func[/code] will still be called, but the preview will be " "null." msgstr "" -"å°†ä½äºŽè·¯å¾„ [code]path [/code] çš„èµ„æºæ–‡ä»¶æŽ’队以进行预览。预览准备好åŽï¼Œå°†è°ƒç”¨" -"接收器 [code]receiver [/code] çš„ [code]receiver_func [/code] 。" +"å°†ä½äºŽè·¯å¾„ [code]path[/code] çš„èµ„æºæ–‡ä»¶æŽ’队以进行预览。预览准备好åŽï¼Œå°†è°ƒç”¨æŽ¥" +"收器 [code]receiver[/code] çš„ [code]receiver_func[/code] 。" "[code]receiver_func[/code] å¿…é¡»å¸¦æœ‰ä»¥ä¸‹å››ä¸ªå‚æ•°ï¼š[String] path, [Texture] " "preview, [Texture] thumbnail_preview, [Variant] userdataã€‚ç”¨æˆ·æ•°æ® " -"[code]userdata[/code] å¯ä»¥æ˜¯ä»»ä½•东西,并将在调用 [code]receiver_func[/code] " -"返回。\n" -"[b]注æ„:[/b] å¦‚æžœæ— æ³•åˆ›å»ºé¢„è§ˆï¼Œåˆ™ä»å°†è°ƒç”¨ [code]receiver_func [/code],但预" -"è§ˆå°†æ— æ•ˆã€‚" +"[code]userdata[/code] å¯ä»¥æ˜¯ä»»æ„的,并将在调用 [code]receiver_func[/code] è¿”" +"回。\n" +"[b]注æ„:[/b] å¦‚æžœæ— æ³•åˆ›å»ºé¢„è§ˆï¼Œåˆ™ä»å°†è°ƒç”¨ [code]receiver_func[/code],但预览" +"å°†æ— æ•ˆã€‚" #: doc/classes/EditorResourcePreview.xml:53 msgid "Removes a custom preview generator." @@ -26393,7 +26444,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/" "importing_scenes.html#custom-script" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/" "importing_scenes.html#custom-script" #: doc/classes/EditorScenePostImport.xml:35 @@ -26619,7 +26670,7 @@ msgid "" "[/codeblock]" msgstr "" "å°†è‡ªå®šä¹‰å±žæ€§ä¿¡æ¯æ·»åŠ åˆ°å±žæ€§ã€‚è¯¥è¯å…¸å¿…须包å«ï¼š\n" -"-[code]åç§°[/code]:[å—符串](属性å称)\n" +"-[code]åç§°[/code]:[String](属性å称)\n" "-[code]类型[/code]:[int](请å‚阅[enum Variant.Type])\n" "-(å¯é€‰ï¼‰[code]æç¤º[/code]:[int](请å‚阅[enum PropertyHint])和[code] " "hint_string [/code]:[String]\n" @@ -26798,7 +26849,7 @@ msgid "" "redraw]." msgstr "" "å°†ç¢°æ’žä¸‰è§’å½¢æ·»åŠ åˆ°å°å·¥å…·ä¸ï¼Œä¾›æŒ‘选。也å¯ä»¥ä»Žæ™®é€šçš„[Mesh]生æˆ[TriangleMesh]。" -"在[方法é‡ç»˜]时调用æ¤å‡½æ•°ã€‚" +"在[method redraw]时调用æ¤å‡½æ•°ã€‚" #: doc/classes/EditorSpatialGizmo.xml:33 msgid "" @@ -26944,8 +26995,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/" +"spatial_gizmos.html" #: doc/classes/EditorSpatialGizmoPlugin.xml:18 msgid "" @@ -27274,7 +27325,7 @@ msgid "" "The [Object] identifier stored in this [EncodedObjectAsID] instance. The " "object instance can be retrieved with [method @GDScript.instance_from_id]." msgstr "" -"å˜å‚¨åœ¨è¿™ä¸ª[EncodedObjectAsID]实例ä¸çš„[对象]æ ‡è¯†ç¬¦ã€‚å¯¹è±¡å®žä¾‹å¯ä»¥ç”¨[method " +"å˜å‚¨åœ¨è¿™ä¸ª[EncodedObjectAsID]实例ä¸çš„[Object]æ ‡è¯†ç¬¦ã€‚å¯¹è±¡å®žä¾‹å¯ä»¥ç”¨[method " "@GDScript.instance_from_id]检索。" #: doc/classes/Engine.xml:4 @@ -27522,8 +27573,8 @@ msgstr "" "else:\n" " simulate_physics()\n" "[/codeblock]\n" -"更多信æ¯è¯·å‚阅文档ä¸[url=https://docs.godotengine.org/en/3.4/tutorials/misc/" -"running_code_in_the_editor.html]在编辑器ä¸è¿è¡Œä»£ç [/url]。\n" +"更多信æ¯è¯·å‚阅文档ä¸[url=https://docs.godotengine.org/zh_CN/stable/tutorials/" +"misc/running_code_in_the_editor.html]在编辑器ä¸è¿è¡Œä»£ç [/url]。\n" "[b]注æ„:[/b]è¦æ£€æµ‹è„šæœ¬æ˜¯å¦ä»Žç¼–辑器[i]构建[/i]ä¸è¿è¡Œï¼ˆä¾‹å¦‚按[code]F5[/code]" "时),请使用带有[code]\"editor\"[/code]傿•°çš„[method OS.has_feature]代替。" "[code]OS.has_feature(\"editor\")[/code]当代ç 在编辑器ä¸è¿è¡Œå’Œä»Žç¼–辑器ä¸è¿è¡Œé¡¹" @@ -27644,14 +27695,15 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/" "environment_and_post_processing.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/" "environment_and_post_processing.html" #: doc/classes/Environment.xml:16 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/high_dynamic_range." +"html" #: doc/classes/Environment.xml:17 doc/classes/Material.xml:10 #: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10 @@ -28545,7 +28597,7 @@ msgstr "" " file.close()\n" " return content\n" "[/codeblock]\n" -"在上é¢çš„例åä¸ï¼Œæ–‡ä»¶å°†è¢«ä¿å˜åœ¨[url=https://docs.godotengine.org/en/3.4/" +"在上é¢çš„例åä¸ï¼Œæ–‡ä»¶å°†è¢«ä¿å˜åœ¨[url=https://docs.godotengine.org/zh_CN/stable/" "tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]æ–‡ä»¶ä¸æŒ‡å®šçš„ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹ä¸ã€‚\n" "[b]注æ„:[/b] è¦åœ¨å¯¼å‡ºåŽè®¿é—®é¡¹ç›®èµ„æºï¼Œå»ºè®®ä½¿ç”¨[ResourceLoader]è€Œä¸æ˜¯" "[File]APIï¼Œå› ä¸ºæœ‰äº›æ–‡ä»¶è¢«è½¬æ¢ä¸ºå¼•æ“Žç‰¹å®šçš„æ ¼å¼ï¼Œå…¶åŽŸå§‹æºæ–‡ä»¶å¯èƒ½ä¸å˜åœ¨äºŽå¯¼å‡ºçš„" @@ -28735,8 +28787,8 @@ msgid "" "timestamp can be converted to datetime by using [method OS." "get_datetime_from_unix_time]." msgstr "" -"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个[å—符" -"串]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS." +"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个" +"[String]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS." "get_datetime_from_unix_time]转æ¢ä¸ºæ•°æ®æ—¶é—´ã€‚" #: doc/classes/File.xml:165 @@ -29221,7 +29273,7 @@ msgstr "当文件å˜åœ¨æ—¶ï¼Œå¯¹è¯æ¡†ä¼šå‘出è¦å‘Šã€‚" msgid "" "The dialog only allows accessing files under the [Resource] path " "([code]res://[/code])." -msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[资æº]路径下的文件([code]res://[/code])。" +msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[Resource]路径下的文件([code]res://[/code])。" #: doc/classes/FileDialog.xml:121 msgid "" @@ -29524,16 +29576,16 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-" "example.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-" -"example.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/" +"gdnative-c-example.html" #: modules/gdnative/doc_classes/GDNativeLibrary.xml:11 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-" "example.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-" -"example.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/" +"gdnative-cpp-example.html" #: modules/gdnative/doc_classes/GDNativeLibrary.xml:17 msgid "" @@ -29619,17 +29671,17 @@ msgid "" "set_script] extends an existing object, if that object's class matches one " "of the script's base classes." msgstr "" -"用GDScript编程è¯è¨€å®žçŽ°çš„è„šæœ¬ã€‚è¯¥è„šæœ¬æ‰©å±•äº†å®žä¾‹åŒ–è¯¥å¯¹è±¡çš„æ‰€æœ‰å¯¹è±¡çš„åŠŸèƒ½ã€‚\n" -"[method new]创建脚本的新实例。如果该对象的类与脚本的基类之一匹é…,则[method " -"Object.set_script]会扩展该对象。" +"用GDScript编程è¯è¨€å®žçŽ°çš„è„šæœ¬ã€‚è¯¥è„šæœ¬æ‰©å±•äº†å®žä¾‹åŒ–è¯¥å¯¹è±¡åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功能。\n" +"[method new] 创建脚本的新实例。如果一个对象的类与脚本的基类之一匹é…,则 " +"[method Object.set_script] 会扩展该对象。" #: modules/gdscript/doc_classes/GDScript.xml:11 msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/" +"index.html" #: modules/gdscript/doc_classes/GDScript.xml:17 msgid "Returns byte code for the script source code." @@ -30717,12 +30769,14 @@ msgid "" "lighting, but the resulting lightmap will not be saved. Useful for emissive " "only materials or shadow casters." msgstr "" +"当ç¦ç”¨æ—¶ï¼Œè®¡ç®—é—´æŽ¥å…‰ç…§æ—¶å°†è€ƒè™‘ç½‘æ ¼ï¼Œä½†äº§ç”Ÿçš„å…‰ç…§è´´å›¾ä¸ä¼šè¢«ä¿å˜ã€‚适用于仅有å‘" +"å…‰æè´¨æˆ–阴影投射器。" #: doc/classes/GeometryInstance.xml:46 msgid "" "Scale factor for the generated baked lightmap. Useful for adding detail to " "certain mesh instances." -msgstr "" +msgstr "生æˆçš„çƒ˜ç„™å…‰ç…§è´´å›¾çš„ç¼©æ”¾ç³»æ•°ã€‚å¯¹å¢žåŠ æŸäº›ç½‘æ ¼å®žä¾‹çš„ç»†èŠ‚å¾ˆæœ‰ç”¨ã€‚" #: doc/classes/GeometryInstance.xml:49 msgid "" @@ -30826,12 +30880,14 @@ msgid "" "Will allow the GeometryInstance to be used when baking lights using a " "[GIProbe] or [BakedLightmap]." msgstr "" +"å°†å…许在使用[GIProbe]或[BakedLightmap]进行ç¯å…‰çƒ˜ç„™æ—¶ä½¿ç”¨GeometryInstanceå‡ ä½•" +"实例。" #: doc/classes/GeometryInstance.xml:106 msgid "" "Unused in this class, exposed for consistency with [enum VisualServer." "InstanceFlags]." -msgstr "" +msgstr "在æ¤ç±»ä¸æœªä½¿ç”¨ï¼Œå…¬å¼€ä»¥ä¸Ž [enum VisualServer.InstanceFlags] ä¿æŒä¸€è‡´ã€‚" #: doc/classes/GIProbe.xml:4 msgid "Real-time global illumination (GI) probe." @@ -30850,26 +30906,42 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -"[GIProbe]用于为场景æä¾›é«˜è´¨é‡çš„实时间接光。它们预先计算å‘å…‰å¯¹è±¡çš„æ•ˆæžœå’Œé™æ€å‡ " -"ä½•å›¾å½¢çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光的行为。 [GIProbe]必须先烘烤æ‰èƒ½ä½¿ç”¨ï¼Œä½†æ˜¯ä¸€æ—¦" -"烘烤,动æ€ç‰©ä½“就会从它们那里接收光。æ¤å¤–,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„æˆ–烘烤的。\n" -"在场景ä¸ä½¿ç”¨[GIProbe]å¯èƒ½ä¼šå¾ˆæ˜‚è´µ(å 用较多资æº),å¯ä»¥ä½¿ç”¨[member " -"ProjectSettings.rendering / quality / gi_probes / quality]é™ä½ŽæŽ¢é’ˆçš„è´¨é‡ï¼Œä»¥" -"æ¢å–[ProjectSettings]䏿›´å¥½çš„æ€§èƒ½ã€‚" - -#: doc/classes/GIProbe.xml:13 +"[GIProbe]是用æ¥ä¸ºåœºæ™¯æä¾›é«˜è´¨é‡çš„实时间接光照。它们预先计算å‘光物体的效果和é™" +"æ€å‡ ä½•ä½“çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光线的行为。[GIProbe]在使用å‰éœ€è¦è¿›è¡Œçƒ˜ç„™ï¼Œè€Œ" +"åŽï¼Œä¸€æ—¦çƒ˜ç„™ï¼ŒåЍæ€ç‰©ä½“就会从它们那里接收光线。æ¤å¤–,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„,也" +"å¯ä»¥æ˜¯çƒ˜ç„™çš„。\n" +"在场景ä¸ä½¿ç”¨[GIProbe]会很消耗资æºï¼Œå¯ä»¥åœ¨[ProjectSettings]ä¸ä½¿ç”¨[member " +"ProjectSettings.rendering/quality/voxel_cone_tracing/high_quality]æ¥è°ƒä½ŽæŽ¢å¤´" +"的质é‡ï¼Œä»¥èŽ·å¾—æ›´å¥½çš„æ€§èƒ½ã€‚\n" +"[b]注æ„:[/b]ç½‘æ ¼åº”è¯¥æœ‰è¶³å¤ŸåŽšçš„å¢™ä»¥é¿å…æ¼å…‰ï¼Œæ³¨ï¼Œé¿å…å•é¢å¢™ã€‚对于内部关å¡ï¼Œå°†" +"ä½ çš„å…³å¡å‡ 何体包围在一个足够大的盒åé‡Œï¼Œå¹¶å°†çŽ¯è·¯è”æŽ¥èµ·æ¥ä»¥å…³é—ç½‘æ ¼ã€‚\n" +"[b]注æ„:[/b]由于渲染器的é™åˆ¶ï¼Œåœ¨[GIProbe]ä¸ä½¿ç”¨å‘光的[ShaderMaterial]æ—¶ä¸èƒ½" +"å‘å…‰ã€‚åªæœ‰å‘射型的[SpatialMaterial]å¯ä»¥åœ¨[GIProbe]ä¸å‘射光线。" + +#: doc/classes/GIProbe.xml:15 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 #, fuzzy msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " @@ -30879,20 +30951,24 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." -msgstr "" -"ä»Žæ‰€æœ‰æ ‡æœ‰[constant GeometryInstance3D.GI_MODE_BAKED]çš„[GeometryInstance3D]å’Œ" -"æ ‡æœ‰[constant Light3D.BAKE_DYNAMIC]或[constant Light3D.BAKE_STATIC]çš„" -"[Light3D]烘烤效果。如果[code]create_visual_debug[/code]是[code]true[/code]," -"在烘烤光线之åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh]ï¼Œå…¶ä¸æœ‰ä¸€ä¸ªç«‹æ–¹ä½“代表æ¯ä¸ªå®žä½“å•元,æ¯" -"个立方体的颜色与该å•元的å照率颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–[GIProbe]的数æ®å¹¶è°ƒè¯•" -"任何å¯èƒ½å‘生的问题。" - -#: doc/classes/GIProbe.xml:28 +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." +msgstr "" +"çƒ˜ç„™æ‰€æœ‰æ ‡æœ‰ [member GeometryInstance.use_in_baked_light] çš„ " +"[GeometryInstance] å’Œæ ‡æœ‰ [constant Light.BAKE_INDIRECT] 或 [constant Light." +"BAKE_ALL] çš„ [Light] 的效果。如果[code]create_visual_debug[/code]是" +"[code]true[/code],在烘焙光线åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh]ï¼Œå…¶ä¸æœ‰ä¸€ä¸ªç«‹æ–¹ä½“代" +"表æ¯ä¸ªå®žä½“å•元,æ¯ä¸ªç«‹æ–¹ä½“的颜色与该å•元的å射颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–" +"[GIProbe]的数æ®ï¼Œä»¥è°ƒè¯•任何å¯èƒ½å‘生的问题。" + +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "在å¯ç”¨ [code]create_visual_debug[/code] 的情况下调用 [method bake] 。" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -30901,30 +30977,33 @@ msgid "" "[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the " "size of the voxels." msgstr "" +"从 [GIProbe] å移光贡献的查找。这å¯ç”¨äºŽé¿å…自阴影,但å¯èƒ½ä¼šåœ¨è¾ƒé«˜çš„值下引入æ¼" +"光。这个和 [member normal_bias] 应该使用,以尽é‡å‡å°‘自阴影和æ¼å…‰ã€‚\n" +"[b]注æ„:[/b] [code]bias[/code] 通常应该在 1.0 ä»¥ä¸Šï¼Œå› ä¸ºè¿™æ˜¯ä½“ç´ çš„å¤§å°ã€‚" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." -msgstr "" +msgstr "[i]已废弃[/i]由于已知的错误,这个属性已被废弃,å¯ç”¨åŽä¸å†æœ‰ä»»ä½•效果。" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "æŒæœ‰æ¤[GIProbe]的数æ®çš„[GIProbeData]资æºã€‚" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." -msgstr "" +msgstr "[GIProbe] 能识别的最大亮度。亮度将在æ¤èŒƒå›´å†…缩放。" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." -msgstr "" +msgstr "能é‡å€å¢žå™¨ã€‚使 [GIProbe] 的照明贡献更亮。" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " @@ -30933,25 +31012,25 @@ msgstr "" "[GIProbe]所覆盖区域的大å°ã€‚å¦‚æžœä½ è®©å¤–å»¶å˜å¤§ï¼Œè€Œæ²¡æœ‰ç”¨[member subdiv]å¢žåŠ ç»†" "分,æ¯ä¸ªå•元的大å°å°†å¢žåŠ ï¼Œå¹¶å¯¼è‡´ä½Žç»†èŠ‚ç…§æ˜Žã€‚" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "如果为[code]true[/code],在计算照明时忽略天空的贡献。" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" "æ ¹æ®ç‰©ä½“的法线方å‘,对[GIProbe]的查找进行å移。å¯ä»¥ç”¨æ¥å‡å°‘一些自阴影的å‡è±¡ã€‚" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "å…‰åœ¨æŽ¢é’ˆå†…éƒ¨ä¼ æ’的程度。一个较高的值å¯ä»¥ä½¿å…‰ä¼ æ’得更远。" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " @@ -30960,7 +31039,7 @@ msgstr "" "对 [GIProbe] 所æ“ä½œçš„ç½‘æ ¼è¿›è¡Œç»†åˆ†çš„æ¬¡æ•°ã€‚æ•°å—è¶Šå¤§ï¼Œç»†èŠ‚å°±è¶Šç²¾ç»†ï¼Œå› è€Œè§†è§‰è´¨é‡" "就越高,而数å—è¶Šå°ï¼Œæ€§èƒ½å°±è¶Šå¥½ã€‚" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." @@ -30968,23 +31047,24 @@ msgstr "" "使用64分区,这是最低的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€å¿«çš„ã€‚å¦‚æžœä½ èƒ½ä½¿ç”¨å®ƒï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žç«¯ç¡¬" "件上使用它。" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "使用128个分区。这是默认的质é‡è®¾ç½®ã€‚" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "使用256个分区。" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 +#, fuzzy msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" "使用512个分区。这是最高的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€æ…¢çš„。在低端硬件上,这å¯èƒ½ä¼šå¯¼è‡´" "GPUåœé¡¿ã€‚" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "代表 [enum Subdiv] 举的大å°ã€‚" @@ -30992,7 +31072,7 @@ msgstr "代表 [enum Subdiv] 举的大å°ã€‚" msgid "" "The [Color] of the light. Defaults to white. A black color causes the light " "to have no effect." -msgstr "" +msgstr "ç¯çš„[Color]。默认为白色。黑色会导致ç¯å…‰æ— 效。" #: modules/gltf/doc_classes/GLTFLight.xml:16 msgid "" @@ -31003,6 +31083,9 @@ msgid "" "brightness. When creating a Godot [SpotLight], the ratio between the inner " "and outer cone angles is used to calculate the attenuation of the light." msgstr "" +"èšå…‰ç¯ä¸åœ†é”¥ä½“的内角。必须å°äºŽæˆ–ç‰äºŽå¤–锥角。\n" +"在这个角度内,光线处于全亮状æ€ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的" +"过渡。当创建Godot [SpotLight]时,内锥角和外锥角之间的比率被用æ¥è®¡ç®—光的衰å‡ã€‚" #: modules/gltf/doc_classes/GLTFLight.xml:20 msgid "" @@ -31011,6 +31094,8 @@ msgid "" "directional lights. When creating a Godot light, this value is converted to " "a unitless multiplier." msgstr "" +"光的强度。对于点光æºå’Œèšå…‰ç¯ï¼Œç”¨çƒ›å…‰candelasï¼ˆæµæ˜Ž/立体光)表示;对于定å‘ç¯ï¼Œ" +"用勒克斯luxï¼ˆæµæ˜Ž/平方米)表示。在创建Godotç¯æ—¶ï¼Œè¿™ä¸ªå€¼è¢«è½¬æ¢ä¸ºæ— å•ä½çš„乘数。" #: modules/gltf/doc_classes/GLTFLight.xml:23 msgid "" @@ -31022,6 +31107,10 @@ msgid "" "directions. When creating a Godot [SpotLight], the outer cone angle is used " "as the angle of the spotlight." msgstr "" +"èšå…‰ç¯ä¸‹åœ†é”¥ä½“的外角。必须大于或ç‰äºŽå†…角。\n" +"在这个角度,光线会下é™åˆ°é›¶äº®åº¦ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的" +"过渡。如果这个角度是一个åŠåœ†ï¼Œé‚£ä¹ˆèšå…‰ç¯å°±ä¼šå‘所有方å‘å‘射。创建Godot " +"[SpotLight]时,外锥角被用作èšå…‰ç¯çš„角度。" #: modules/gltf/doc_classes/GLTFLight.xml:27 msgid "" @@ -31029,6 +31118,8 @@ msgid "" "with no range defined behave like physical lights (which have infinite " "range). When creating a Godot light, the range is clamped to 4096." msgstr "" +"ç¯å…‰çš„范围,超过这个范围ç¯å…‰æ— 效。没有定义范围的GLTFç¯å…‰çš„è¡Œä¸ºä¸Žæ— é™èŒƒå›´çš„物" +"ç†ç¯å…‰ä¸€æ ·ã€‚当创建Godotç¯å…‰æ—¶ï¼ŒèŒƒå›´é™åˆ¶åœ¨4096。" #: modules/gltf/doc_classes/GLTFLight.xml:30 msgid "" @@ -31036,6 +31127,8 @@ msgid "" "and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], " "and [DirectionalLight] respectively." msgstr "" +"ç¯å…‰çš„类型。Godot接å—的值是 \"point\"ã€\"spot\"å’Œ \"directional\",分别对应于" +"Godotçš„[OmniLight]ã€[SpotLight]å’Œ[DirectionalLight]。" #: modules/mono/doc_classes/GodotSharp.xml:4 msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)." @@ -31156,9 +31249,8 @@ msgid "Returns the interpolated color specified by [code]offset[/code]." msgstr "返回由åç§»[code]offset[/code]指定的æ’值颜色。" #: doc/classes/Gradient.xml:51 -#, fuzzy msgid "Removes the color at the index [code]point[/code]." -msgstr "移除索引[code]offset[/code]å移处的颜色。" +msgstr "移除索引[code]point[/code]处的颜色。" #: doc/classes/Gradient.xml:59 msgid "Sets the color of the ramp color at index [code]point[/code]." @@ -31169,14 +31261,12 @@ msgid "Sets the offset for the ramp color at index [code]point[/code]." msgstr "为索引[code]point[/code]处的斜é¢é¢œè‰²è®¾ç½®å移。" #: doc/classes/Gradient.xml:73 -#, fuzzy msgid "Gradient's colors returned as a [PoolColorArray]." -msgstr "æ¸å˜çš„颜色以[PackedColorArray]的形å¼è¿”回。" +msgstr "æ¸å˜é¢œè‰²ä»¥ [PoolColorArray] 返回。" #: doc/classes/Gradient.xml:76 -#, fuzzy msgid "Gradient's offsets returned as a [PoolRealArray]." -msgstr "æ¸å˜çš„åç§»é‡ä»¥[PackedFloat32Array]å½¢å¼è¿”回。" +msgstr "æ¸å˜çš„åç§»é‡ä»¥ [PoolRealArray] 返回。" #: doc/classes/GradientTexture.xml:4 msgid "Gradient-filled texture." @@ -31190,9 +31280,9 @@ msgid "" "gradient, but instead an interpolation of samples obtained from the gradient " "at fixed steps (see [member width])." msgstr "" -"æ¸å˜æè´¨GradientTexture使用一个[Gradientæ•°æ®ã€‚梯度将使用从梯度获得的颜色从左" -"到å³å¡«å……。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¢¯åº¦çš„精确拷è´ï¼Œè€Œæ˜¯ä»¥å›ºå®šçš„æ¥é•¿ä»Žæ¢¯åº¦ä¸èŽ·å¾—" -"çš„æ ·æœ¬æ’值(è§[member width])。" +"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³" +"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的æ¥é•¿ä»Žæ¸å˜ä¸èŽ·å¾—çš„æ ·" +"本的æ’值,è§[member width]。" #: doc/classes/GradientTexture.xml:15 msgid "The [Gradient] that will be used to fill the texture." @@ -31282,7 +31372,6 @@ msgstr "" "1\" }[/code]." #: doc/classes/GraphEdit.xml:70 -#, fuzzy msgid "" "Gets the [HBoxContainer] that contains the zooming and grid snap controls in " "the top left of the graph. You can use this method to reposition the toolbar " @@ -31291,10 +31380,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" -"获å–包å«å›¾å½¢å·¦ä¸Šæ–¹çš„ç¼©æ”¾å’Œç½‘æ ¼å¿«ç…§æŽ§åˆ¶çš„[HBoxContainer]。\n" -"è¦å‘Šã€‚这个函数的预期用途是å…è®¸ä½ é‡æ–°å®šä½æˆ–æ·»åŠ ä½ è‡ªå·±çš„è‡ªå®šä¹‰æŽ§ä»¶åˆ°å®¹å™¨ä¸ã€‚è¿™" -"æ˜¯ä¸€ä¸ªå†…éƒ¨æŽ§ä»¶ï¼Œå› æ¤ä¸åº”è¯¥è¢«é‡Šæ”¾ã€‚å¦‚æžœä½ æƒ³éšè—å®ƒæˆ–å®ƒçš„ä»»ä½•åæŽ§ä»¶ï¼Œè¯·ä½¿ç”¨å®ƒä»¬" -"çš„ [member CanvasItem.visible] 属性。" +"获å–包å«å›¾å½¢å·¦ä¸Šè§’çš„ç¼©æ”¾å’Œç½‘æ ¼æ•æ‰æŽ§ä»¶çš„ [HBoxContainer]ã€‚ä½ å¯ä»¥ä½¿ç”¨æ¤æ–¹æ³•é‡" +"新定ä½å·¥å…·æ 或å‘å…¶æ·»åŠ è‡ªå®šä¹‰æŽ§ä»¶ã€‚\n" +"[b]è¦å‘Šï¼š[/b] è¿™æ˜¯ä¸€ä¸ªå¿…éœ€çš„å†…éƒ¨èŠ‚ç‚¹ï¼Œåˆ é™¤å’Œé‡Šæ”¾å®ƒå¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ å¸Œæœ›" +"éšè—它或其任何å项,请使用它们的 [member CanvasItem.visible] 属性。" #: doc/classes/GraphEdit.xml:81 msgid "" @@ -31345,20 +31434,18 @@ msgid "Sets the specified [code]node[/code] as the one selected." msgstr "选ä¸ä¸€ä¸ªç‰¹å®šçš„节点[code]node[/code]." #: doc/classes/GraphEdit.xml:136 -#, fuzzy msgid "If [code]true[/code], the minimap is visible." -msgstr "如果[code]true[/code],按钮的形状是å¯è§çš„。" +msgstr "如果[code]true[/code],å°å›¾æ˜¯å¯è§çš„。" #: doc/classes/GraphEdit.xml:139 -#, fuzzy msgid "The opacity of the minimap rectangle." -msgstr "选择的矩形的轮廓颜色。" +msgstr "å°å›¾çŸ©å½¢çš„ä¸é€æ˜Žåº¦ã€‚" #: doc/classes/GraphEdit.xml:142 msgid "" "The size of the minimap rectangle. The map itself is based on the size of " "the grid area and is scaled to fit this rectangle." -msgstr "" +msgstr "å°å›¾çŸ©å½¢çš„大å°ã€‚åœ°å›¾è‡ªèº«åŸºäºŽç½‘æ ¼åŒºåŸŸçš„å¤§å°ï¼Œå¹¶è¢«ç¼©æ”¾ä»¥é€‚应这个矩形。" #: doc/classes/GraphEdit.xml:146 msgid "" @@ -31376,6 +31463,7 @@ msgid "" "If [code]true[/code], makes a label with the current zoom level visible. The " "zoom value is displayed in percents." msgstr "" +"如果[code]true[/code],则使当å‰ç¼©æ”¾çº§åˆ«çš„æ ‡ç¾å¯è§ã€‚缩放值以百分比显示。" #: doc/classes/GraphEdit.xml:155 msgid "The snapping distance in pixels." @@ -31390,14 +31478,12 @@ msgid "The current zoom value." msgstr "当å‰ç¼©æ”¾å€¼ã€‚" #: doc/classes/GraphEdit.xml:164 -#, fuzzy msgid "The upper zoom limit." -msgstr "当å‰ç¼©æ”¾å€¼ã€‚" +msgstr "缩放上é™ã€‚" #: doc/classes/GraphEdit.xml:167 -#, fuzzy msgid "The lower zoom limit." -msgstr "触å‘的信å·ã€‚" +msgstr "缩放下é™ã€‚" #: doc/classes/GraphEdit.xml:170 msgid "The step of each zoom level." @@ -31434,9 +31520,8 @@ msgid "" msgstr "当用户将输出端å£è¿žæŽ¥åˆ°å›¾å½¢çš„ç©ºä½æ—¶å‘出。" #: doc/classes/GraphEdit.xml:211 -#, fuzzy msgid "Emitted when the user presses [code]Ctrl + C[/code]." -msgstr "当用户按下[kbd]Ctrl + C[/kbd]æ—¶å‘出。" +msgstr "当用户按[code]Ctrl + C[/code]时触å‘。" #: doc/classes/GraphEdit.xml:216 msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit." @@ -31462,9 +31547,8 @@ msgid "Emitted when a GraphNode is selected." msgstr "当图形节点GraphNode被选择时å‘出。" #: doc/classes/GraphEdit.xml:246 -#, fuzzy msgid "Emitted when the user presses [code]Ctrl + V[/code]." -msgstr "当用户按下[kbd]Ctrl + V[/kbd]æ—¶å‘出。" +msgstr "当用户按下[code]Ctrl + V[/code]时触å‘。" #: doc/classes/GraphEdit.xml:252 msgid "" @@ -31886,7 +31970,6 @@ msgid "" msgstr "ç½‘æ ¼å®¹å™¨ï¼Œç”¨äºŽåœ¨ç±»ä¼¼ç½‘æ ¼çš„å¸ƒå±€ä¸æŽ’åˆ—Control派生的å项。" #: doc/classes/GridContainer.xml:7 -#, fuzzy msgid "" "GridContainer will arrange its Control-derived children in a grid like " "structure, the grid columns are specified using the [member columns] " @@ -31899,19 +31982,20 @@ msgid "" "[b]Note:[/b] GridContainer only works with child nodes inheriting from " "Control. It won't rearrange child nodes inheriting from Node2D." msgstr "" -"ç½‘æ ¼å®¹å™¨å°†å…¶åé¡¹æŽ’åˆ—åœ¨ç±»ä¼¼ç½‘æ ¼çš„ç»“æž„ä¸ï¼Œç½‘æ ¼åˆ—ä½¿ç”¨ [member columns] 属性指" -"定,行数ç‰äºŽå®¹å™¨ä¸çš„å项数除以列数。例如,如果容器有 5 个å项和 2 列,则容器" -"䏿œ‰ 3 行。\n" -"请注æ„ï¼Œç½‘æ ¼å¸ƒå±€å°†ä¸ºå®¹å™¨çš„æ¯ä¸ªå¤§å°ä¿ç•™åˆ—和行,并且空列将自动展开。" +"GridContainer将把它的Control派生的åçº§æŽ’å¸ƒåœ¨ä¸€ä¸ªç±»ä¼¼ç½‘æ ¼çš„ç»“æž„ä¸ï¼Œç½‘æ ¼åˆ—æ˜¯" +"[member columns]属性指定,行的数é‡ç‰äºŽå®¹å™¨ä¸å级的数é‡é™¤ä»¥åˆ—的数é‡ã€‚例如,如" +"果容器有5个å级,2个列,容器ä¸å°±ä¼šæœ‰3行。\n" +"请注æ„ï¼Œç½‘æ ¼å¸ƒå±€å°†ä¿ç•™æ¯ä¸ªå¤§å°çš„容器的列和行,并且空列将自动扩展。\n" +"[b]注æ„:[/b] GridContaineråªå¯¹ç»§æ‰¿è‡ªControlçš„å节点生效。它ä¸ä¼šé‡æ–°æŽ’列继承" +"自Node2Dçš„å节点。" #: doc/classes/GridContainer.xml:18 -#, fuzzy msgid "" "The number of columns in the [GridContainer]. If modified, [GridContainer] " "reorders its Control-derived children to accommodate the new layout." msgstr "" -"在[GridContainer]ä¸çš„列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列它的å节" -"点,以适应新的布局。" +"在[GridContainer]ä¸çš„列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列其Controlæ´¾" +"生的å代,以适应新的布局。" #: doc/classes/GridContainer.xml:26 msgid "The horizontal separation of children nodes." @@ -31926,7 +32010,6 @@ msgid "Node for 3D tile-based maps." msgstr "基于3Dè´´å›¾æ ¼åœ°å›¾(3D tile-based maps)的节点。" #: modules/gridmap/doc_classes/GridMap.xml:7 -#, fuzzy msgid "" "GridMap lets you place meshes on a grid interactively. It works both from " "the editor and from scripts, which can help you create in-game level " @@ -31943,18 +32026,22 @@ msgid "" "light not affect the first layer, the whole GridMap won't be lit by the " "light in question." msgstr "" -"GridMapå¯ä»¥è®©ä½ 交互å¼åœ°å°†ç½‘æ ¼æ”¾åœ¨ä¸€ä¸ªç½‘æ ¼ä¸Šã€‚å®ƒæ—¢å¯ä»¥ä»Žç¼–辑器ä¸å·¥ä½œï¼Œä¹Ÿå¯ä»¥ä»Ž" -"脚本ä¸å·¥ä½œï¼Œè¿™å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸åˆ›å»ºå…³å¡ç¼–辑器。\n" -"GridMaps使用一个[MeshLibrary],其ä¸åŒ…å«äº†ä¸€ä¸ªè´´å›¾æ ¼çš„列表。æ¯ä¸€ä¸ªç“¦ç‰‡éƒ½æ˜¯ä¸€ä¸ª" -"带有æè´¨çš„ç½‘æ ¼ï¼ŒåŠ ä¸Šå¯é€‰çš„碰撞和导航形状。\n" -"一个GridMap包å«ä¸€ä¸ªå•å…ƒæ ¼çš„é›†åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]ä¸çš„一个贴图" -"æ ¼ã€‚åœ°å›¾ä¸çš„æ‰€æœ‰å•元都有相åŒçš„尺寸。\n" -"在内部,一个GridMap被分割æˆä¸€ä¸ªç¨€ç–的八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„" -"ç†ã€‚æ¯ä¸ªå…«è§’形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。" +"GridMapå…è®¸ä½ ä»¥äº¤äº’æ–¹å¼å°†meshesç½‘æ ¼æ”¾ç½®åœ¨ç½‘æ ¼ä¸Šã€‚å®ƒæ—¢å¯ä»¥åœ¨ç¼–辑器ä¸è¿›è¡Œï¼Œä¹Ÿå¯" +"以从脚本ä¸è¿›è¡Œï¼Œè¿™å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸åˆ›å»ºå…³å¡ç¼–辑器。\n" +"GridMaps使用[MeshLibrary],其ä¸åŒ…å«äº†ä¸€ä¸ªå›¾å—的列表。æ¯ä¸€ä¸ªå›¾å—都是一个带有æ" +"è´¨çš„ç½‘æ ¼ï¼ŒåŠ ä¸Šå¯é€‰çš„碰撞和导航形状。\n" +"GridMap包å«ä¸€ä¸ªå•å…ƒæ ¼çš„é›†åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]ä¸çš„一个图å—。地" +"图ä¸çš„æ‰€æœ‰å•元都有相åŒçš„尺寸。\n" +"在内部,GridMap被分割æˆä¸€ä¸ªæ¾æ•£çš„八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„ç†ã€‚æ¯" +"个八角形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。\n" +"[b]注æ„:[/b] GridMap没有扩展[VisualInstance]ï¼Œå› æ¤ä¸èƒ½åŸºäºŽ[member " +"VisualInstance.layer]进行éšè—æˆ–å‰”é™¤é®æŒ¡ã€‚å¦‚æžœä½ è®©ç¯å…‰ä¸å½±å“第一层,整个" +"GridMapå°±ä¸ä¼šè¢«ç›¸å…³çš„ç¯å…‰ç…§äº®ã€‚" #: modules/gridmap/doc_classes/GridMap.xml:14 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_gridmaps.html" #: modules/gridmap/doc_classes/GridMap.xml:22 msgid "Clear all cells." @@ -31965,23 +32052,22 @@ msgid "" "Returns an array of [ArrayMesh]es and [Transform] references of all bake " "meshes that exist within the current GridMap." msgstr "" +"返回当å‰GridMapä¸å˜åœ¨çš„æ‰€æœ‰çƒ˜ç„™ç½‘æ ¼çš„[ArrayMesh]å’Œ[Transform]引用的数组。" #: modules/gridmap/doc_classes/GridMap.xml:48 -#, fuzzy msgid "" "The [MeshLibrary] item index located at the grid-based X, Y and Z " "coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be " "returned." msgstr "" -"ä½äºŽç»™å®šç½‘æ ¼åæ ‡çš„[MeshLibrary]项的索引。如果该å•å…ƒæ ¼æ˜¯ç©ºçš„ï¼Œå°†è¿”å›ž[constant " -"INVALID_CELL_ITEM]。" +"[MeshLibrary] 项目索引ä½äºŽåŸºäºŽç½‘æ ¼çš„ Xã€Y å’Œ Z åæ ‡å¤„。如果å•å…ƒæ ¼ä¸ºç©ºï¼Œåˆ™è¿”" +"回 [constant INVALID_CELL_ITEM]。" #: modules/gridmap/doc_classes/GridMap.xml:57 -#, fuzzy msgid "" "The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is " "returned if the cell is empty." -msgstr "ç»™å®šç½‘æ ¼åæ ‡å¤„çš„å•å…ƒæ ¼æ–¹å‘。如果å•å…ƒæ ¼ä¸ºç©ºï¼Œåˆ™è¿”å›ž [code]-1[/code]。" +msgstr "å•å…ƒæ ¼åœ¨åŸºäºŽç½‘æ ¼çš„ Xã€Y å’Œ Z åæ ‡å¤„的方å‘。如果å•å…ƒæ ¼ä¸ºç©ºï¼Œåˆ™è¿”å›ž -1。" #: modules/gridmap/doc_classes/GridMap.xml:64 msgid "Returns an individual bit on the [member collision_layer]." @@ -32011,7 +32097,6 @@ msgid "" msgstr "è¿”å›žä¸€ä¸ªç½‘æ ¼å•元在GridMapæœ¬åœ°åæ ‡ç©ºé—´ä¸çš„ä½ç½®ã€‚" #: modules/gridmap/doc_classes/GridMap.xml:116 -#, fuzzy msgid "" "Sets the mesh index for the cell referenced by its grid-based X, Y and Z " "coordinates.\n" @@ -32020,9 +32105,9 @@ msgid "" "Optionally, the item's orientation can be passed. For valid orientation " "values, see [method Basis.get_orthogonal_index]." msgstr "" -"è®¾ç½®ä»¥ç½‘æ ¼åæ ‡ä¸ºå‚考的å•å…ƒæ ¼çš„ç½‘æ ¼ç´¢å¼•ã€‚\n" -"一个负的项目索引,例如[constant INVALID_CELL_ITEM]会清除该å•元。\n" -"或者,å¯ä»¥ä¼ 递项目的方å‘。关于有效的方å‘值,请å‚阅[method Basis." +"è®¾ç½®ç”±åŸºäºŽç½‘æ ¼çš„ Xã€Y å’Œ Z åæ ‡å¼•用的å•å…ƒæ ¼çš„ç½‘æ ¼ç´¢å¼•ã€‚\n" +"负的项目索引将清除å•å…ƒæ ¼ï¼Œä¾‹å¦‚ [constant INVALID_CELL_ITEM]。\n" +"或者,å¯ä»¥ä¼ 递项目的方å‘。相关有效的方å‘值,请å‚阅 [method Basis." "get_orthogonal_index]。" #: modules/gridmap/doc_classes/GridMap.xml:135 @@ -32094,6 +32179,9 @@ msgid "" "layers-and-masks]Collision layers and masks[/url] in the documentation for " "more information." msgstr "" +"æ¤ GridMap 检测碰撞的物ç†å±‚。å‚阅 [url=https://docs.godotengine.org/zh_CN/" +"stable/tutorials/physics/physics_introduction.html#collision-layers-and-" +"masks]碰撞层和掩ç [/url ] 文档,从ä¸èŽ·å–æ›´å¤šä¿¡æ¯ã€‚" #: modules/gridmap/doc_classes/GridMap.xml:184 msgid "The assigned [MeshLibrary]." @@ -32102,7 +32190,7 @@ msgstr "指定的[MeshLibrary]。" #: modules/gridmap/doc_classes/GridMap.xml:187 msgid "" "Controls whether this GridMap will be baked in a [BakedLightmap] or not." -msgstr "" +msgstr "æŽ§åˆ¶æ¤ GridMap 是å¦ä¼šåœ¨ [BakedLightmap] ä¸çƒ˜ç„™ã€‚" #: modules/gridmap/doc_classes/GridMap.xml:194 msgid "Emitted when [member cell_size] changes." @@ -32212,8 +32300,8 @@ msgid "" "Starts a new hash computation of the given [code]type[/code] (e.g. [constant " "HASH_SHA256] to start computation of a SHA-256)." msgstr "" -"开始对给定的 [code] type[/code] (例如 [æ’定HASH_SHA256] 进行新的哈希计算, " -"以开始计算 SHA-256) 。" +"开始对给定的 [code] type[/code] (例如 [constant HASH_SHA256] 进行新的哈希计" +"算, 以开始计算 SHA-256) 。" #: doc/classes/HashingContext.xml:52 msgid "Updates the computation with the given [code]chunk[/code] of data." @@ -32244,15 +32332,13 @@ msgid "The horizontal space between the [HBoxContainer]'s elements." msgstr "[HBoxContainer]çš„å…ƒç´ ä¹‹é—´çš„æ°´å¹³ç©ºé—´ã€‚" #: doc/classes/HeightMapShape.xml:4 -#, fuzzy msgid "Height map shape for 3D physics." -msgstr "三维物ç†çš„高度图形状(仅é™å弹)。" +msgstr "3D 物ç†çš„高度图形状。" #: doc/classes/HeightMapShape.xml:7 -#, fuzzy msgid "" "Height map shape resource, which can be added to a [PhysicsBody] or [Area]." -msgstr "高度图形状资æºï¼Œå®ƒå¯ä»¥è¢«æ·»åŠ åˆ°[PhysicsBody3D]或[Area3D]。" +msgstr "高度图形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ°[PhysicsBody]或[Area]ä¸ã€‚" #: doc/classes/HeightMapShape.xml:15 msgid "" @@ -32274,18 +32360,17 @@ msgid "" msgstr "高度图数æ®çš„宽度。更改æ¤è®¾ç½®å°†è°ƒæ•´ [member map_data] 的大å°ã€‚" #: doc/classes/HingeJoint.xml:4 -#, fuzzy msgid "A hinge between two 3D PhysicsBodies." -msgstr "两个 3D 实体之间的铰链。" +msgstr "两个 3D 物ç†ä½“之间的铰链。" #: doc/classes/HingeJoint.xml:7 -#, fuzzy msgid "" "A HingeJoint normally uses the Z axis of body A as the hinge axis, another " "axis can be specified when adding it manually though. See also " "[Generic6DOFJoint]." msgstr "" -"HingeJoint3D 通常使用主体 A çš„ Z è½´ä½œä¸ºé“°é“¾è½´ï¼Œä½†æ‰‹åŠ¨æ·»åŠ æ—¶å¯ä»¥æŒ‡å®šå…¶ä»–轴。" +"铰链关节通常使用物体 A çš„ Z è½´ä½œä¸ºé“°é“¾è½´ï¼Œä½†æ‰‹åŠ¨æ·»åŠ æ—¶å¯ä»¥æŒ‡å®šå¦ä¸€ä¸ªè½´ã€‚å‚阅 " +"[Generic6DOFJoint]。" #: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21 msgid "Returns the value of the specified flag." @@ -32363,7 +32448,7 @@ msgstr "两个物体å‘ä¸åŒæ–¹å‘移动时被拉回到一起的速度。" #: doc/classes/HMACContext.xml:4 msgid "Used to create an HMAC for a message using a key." -msgstr "" +msgstr "用æ¥ä¸ºä¸€ä¸ªä½¿ç”¨å¯†é’¥çš„ä¿¡æ¯åˆ›å»ºHMAC。" #: doc/classes/HMACContext.xml:7 msgid "" @@ -32414,18 +32499,65 @@ msgid "" "[/codeblock]\n" "[b]Note:[/b] Not available in HTML5 exports." msgstr "" +"HMACContext类对于高级的HMAC用例éžå¸¸æœ‰ç”¨ï¼Œä¾‹å¦‚æµå¼æ¶ˆæ¯ï¼Œå› 为它支æŒåœ¨ä¸€æ®µæ—¶é—´å†…" +"创建消æ¯ï¼Œè€Œä¸æ˜¯ä¸€æ¬¡æ€§æä¾›ã€‚\n" +"[codeblock]\n" +"extends Node\n" +"var ctx = HMACContext.new()\n" +"\n" +"func _ready():\n" +" var key = \"supersecret\".to_utf8()\n" +" var err = ctx.start(HashingContext.HASH_SHA256, key)\n" +" assert(err == OK)\n" +" var msg1 = \"this is \".to_utf8()\n" +" var msg2 = \"vewy vewy secret\".to_utf8()\n" +" err = ctx.update(msg1)\n" +" assert(err == OK)\n" +" err = ctx.update(msg2)\n" +" assert(err == OK)\n" +" var hmac = ctx.finish()\n" +" print(hmac.hex_encode())\n" +"[/codeblock]\n" +"而在C#ä¸ï¼Œæˆ‘们å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„æ–¹æ³•。\n" +"[codeblock]\n" +"using Godot;\n" +"using System;\n" +"using System.Diagnostics;\n" +"\n" +"public class CryptoNode : Node\n" +"{\n" +" private HMACContext ctx = new HMACContext();\n" +" public override void _Ready()\n" +" {\n" +" PoolByteArray key = String(\"supersecret\").to_utf8();\n" +" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n" +" GD.Assert(err == OK);\n" +" PoolByteArray msg1 = String(\"this is \").to_utf8();\n" +" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n" +" err = ctx.Update(msg1);\n" +" GD.Assert(err == OK);\n" +" err = ctx.Update(msg2);\n" +" GD.Assert(err == OK);\n" +" PoolByteArray hmac = ctx.Finish();\n" +" GD.Print(hmac.HexEncode());\n" +" }\n" +"}\n" +"[/codeblock]\n" +"[b]注æ„:[/b] 在HTML5导出ä¸ä¸å¯ç”¨ã€‚" #: doc/classes/HMACContext.xml:58 msgid "" "Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is " "returned." -msgstr "" +msgstr "返回生æˆçš„HMAC。如果HMAC失败,将返回一个空的[PoolByteArray]。" #: doc/classes/HMACContext.xml:66 msgid "" "Initializes the HMACContext. This method cannot be called again on the same " "HMACContext until [method finish] has been called." msgstr "" +"åˆå§‹åŒ–HMACContext。在[method finish]被调用之å‰ï¼Œä¸èƒ½åœ¨åŒä¸€ä¸ªHMACContextä¸Šå†æ¬¡" +"è°ƒç”¨æ¤æ–¹æ³•。" #: doc/classes/HMACContext.xml:73 msgid "" @@ -32433,6 +32565,8 @@ msgid "" "[method finish] is called to append [code]data[/code] to the message, but " "cannot be called until [method start] has been called." msgstr "" +"æ›´æ–°è¦è¿›è¡ŒHMAC的消æ¯ã€‚在调用[method finish]å°†[code]data[/code]è¿½åŠ åˆ°æ¶ˆæ¯ä¸ä¹‹" +"å‰ï¼Œå¯ä»¥å¤šæ¬¡è°ƒç”¨ï¼Œä½†åœ¨è°ƒç”¨[method start]之å‰ä¸èƒ½è°ƒç”¨ã€‚" #: doc/classes/HScrollBar.xml:4 msgid "Horizontal scroll bar." @@ -32456,9 +32590,8 @@ msgid "Displayed when the mouse cursor hovers over the decrement button." msgstr "å½“é¼ æ ‡æŒ‡é’ˆæ‚¬åœåœ¨é€’凿Œ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚" #: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27 -#, fuzzy msgid "Displayed when the decrement button is being pressed." -msgstr "å½“æ ‡é¢˜æŒ‰é’®è¢«æŒ‰ä¸‹æ—¶ä½¿ç”¨çš„[StyleBox]。" +msgstr "åœ¨æŒ‰ä¸‹é€’å‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚" #: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30 msgid "" @@ -32487,9 +32620,8 @@ msgid "Displayed when the mouse cursor hovers over the increment button." msgstr "å½“é¼ æ ‡æŒ‡é’ˆæ‚¬åœåœ¨å¢žé‡æŒ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚" #: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45 -#, fuzzy msgid "Displayed when the increment button is being pressed." -msgstr "å½“æ ‡é¢˜æŒ‰é’®è¢«æŒ‰ä¸‹æ—¶ä½¿ç”¨çš„[StyleBox]。" +msgstr "åœ¨æŒ‰ä¸‹å¢žé‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚" #: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48 msgid "Used as background of this [ScrollBar]." @@ -32531,6 +32663,9 @@ msgid "" "[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] " "signals are part of the [Range] class which this class inherits from." msgstr "" +"水平滑å—。å‚阅[Slider]。这个从左到å³ï¼Œæœ€å°åˆ°æœ€å¤§ã€‚\n" +"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯" +"[Range]类的一部分,该类继承自它。" #: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22 msgid "The texture for the grabber (the draggable element)." @@ -32588,12 +32723,10 @@ msgid "The space between sides of the container." msgstr "容器两侧之间的空间。" #: doc/classes/HTTPClient.xml:4 -#, fuzzy msgid "Low-level hyper-text transfer protocol client." -msgstr "è¶…æ–‡æœ¬ä¼ è¾“å议客户端。" +msgstr "ä½Žçº§åˆ«çš„è¶…æ–‡æœ¬ä¼ è¾“å议客户端。" #: doc/classes/HTTPClient.xml:7 -#, fuzzy msgid "" "Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used " "to make HTTP requests to download web content, upload files and other data " @@ -32627,30 +32760,35 @@ msgid "" "are otherwise valid. If this is a concern, you may want to use automatically " "managed certificates with a short validity period." msgstr "" -"è¶…æ–‡æœ¬ä¼ è¾“å议客户端(有时称为“用户代ç†â€ï¼‰ï¼Œå¯ç”¨äºŽå‘出 HTTP 请求以下载 web 内" -"容ã€ä¸Šä¼ æ–‡ä»¶å’Œå…¶ä»–æ•°æ®æˆ–与å„ç§æœåŠ¡é€šä¿¡ï¼Œä»¥åŠå…¶ä»–用例。请å‚阅 [HTTPRequest] 以" -"èŽ·å–æ›´é«˜çº§åˆ«çš„æ›¿ä»£æ–¹æ¡ˆã€‚\n" -"[b]注æ„:[/b] æ¤å®¢æˆ·ç«¯åªéœ€è¿žæŽ¥åˆ°ä¸»æœºä¸€æ¬¡ï¼ˆè¯·å‚阅 [method connect_to_host])å³" -"å¯å‘é€å¤šä¸ªè¯·æ±‚ã€‚å› æ¤ï¼Œé‡‡ç”¨ URL 的方法通常åªé‡‡ç”¨ä¸»æœºåŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„ " -"URLï¼Œå› ä¸ºå®¢æˆ·æœºå·²ç»è¿žæŽ¥åˆ°ä¸»æœºã€‚请å‚阅 [method request] 以获å–完整的示例并开始" -"使用。\n" -"[HTTPClient] 应该在多个请求之间é‡ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创建" -"ä¸€ä¸ªå®¢æˆ·ç«¯ã€‚æ”¯æŒ SSL ä»¥åŠ SSL æœåС噍è¯ä¹¦éªŒè¯ã€‚2xx 范围内的 HTTP 状æ€ç 表示æˆ" -"功,3xx é‡å®šå‘(å³â€œé‡è¯•,但在这里â€ï¼‰ï¼Œ4xx 请求出错,5xx æœåŠ¡å™¨ç«¯å‡ºé”™ã€‚\n" -"有关 HTTP 的更多信æ¯è¯·å‚阅 https://developer.mozilla.org/en-US/docs/Web/HTTP " -"(或者通过阅读 RFC 2616 è¿½æ ¹æº¯æºï¼šhttps://tools.ietf.org/html/rfc2616)。\n" -"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡" -"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/" -"url] çš„å…³ç³»è€Œç¦æ¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æå»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ " -"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。" +"è¶…æ–‡æœ¬ä¼ è¾“å议客户端,有时称为 \"用户代ç†\"。用于å‘出HTTP请求,以下载网络内" +"容ã€ä¸Šä¼ 文件和其他数æ®ï¼Œæˆ–与å„ç§æœåŠ¡è¿›è¡Œé€šä¿¡ï¼Œä»¥åŠå…¶ä»–情况。[b]å‚阅" +"[HTTPRequest]节点,以获得更高一级的替代方案[/b] 。\n" +"[b]注æ„:[/b]这个客户端åªéœ€è¦è¿žæŽ¥ä¸»æœºä¸€æ¬¡å°±å¯ä»¥å‘é€å¤šä¸ªè¯·æ±‚,å‚阅[method " +"connect_to_host]ã€‚å› æ¤ï¼ŒèŽ·å–URL的方法通常åªèŽ·å–主机åŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„" +"URLï¼Œå› ä¸ºå®¢æˆ·ç«¯å·²ç»è¿žæŽ¥åˆ°äº†ä¸€ä¸ªä¸»æœºã€‚å‚阅method request]以获得完整的例å,并" +"开始使用。\n" +"[HTTPClient]应该在多个请求ä¸é‡å¤ä½¿ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创" +"建一个客户端。它支æŒSSLå’ŒSSLæœåС噍è¯ä¹¦éªŒè¯ã€‚HTTP状æ€ä»£ç 在2xx范围内表示æˆåŠŸï¼Œ" +"3xx表示é‡å®šå‘ï¼Œå³ \"é‡è¯•,但在这里\",4xx表示请求出了问题,5xx表示æœåŠ¡å™¨ç«¯å‡º" +"了问题。\n" +"关于HTTP的更多信æ¯ï¼Œå‚阅https://developer.mozilla.org/en-US/docs/Web/HTTP,或" +"者阅读RFC 2616,直接从æºå¤´ä¸Šäº†è§£ï¼šhttps://tools.ietf.org/html/rfc2616。\n" +"[b]注æ„:[/b] 当从导出到HTML5çš„é¡¹ç›®ä¸æ‰§è¡ŒHTTP请求时,请记ä½è¿œç¨‹æœåС噍å¯èƒ½ç”±äºŽ" +"[url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/url]而ä¸å…" +"许æ¥è‡ªå›½å¤–çš„è¯·æ±‚ã€‚å¦‚æžœæ˜¯ä½ æ‰˜ç®¡çš„æœåŠ¡å™¨ï¼Œåº”è¯¥ä¿®æ”¹å…¶åŽå°ï¼Œä¸ºå…¶æ·»åŠ " +"[code]Access-Control-Allow-Origin:*[/code] HTTP头。\n" +"[b]注æ„:[/b] SSL/TLS支æŒç›®å‰ä»…é™äºŽTLS 1.0ã€TLS 1.1å’ŒTLS 1.2。试图连接到一个" +"åªæœ‰TLS 1.3çš„æœåŠ¡å™¨å°†è¿”å›žä¸€ä¸ªé”™è¯¯ã€‚\n" +"[b]è¦å‘Šï¼š[/b] ç›®å‰ä¸æ”¯æŒSSL/TLSè¯ä¹¦æ’¤é”€å’Œè¯ä¹¦ç»‘定。撤销的è¯ä¹¦åªè¦åœ¨å…¶ä»–æ–¹é¢æ˜¯" +"有效的,就å¯ä»¥æŽ¥å—ã€‚å¦‚æžœè¿™æ˜¯ä¸ªé—®é¢˜ï¼Œä½ å¯èƒ½æƒ³ä½¿ç”¨è‡ªåŠ¨ç®¡ç†çš„æœ‰æ•ˆæœŸçŸçš„è¯ä¹¦ã€‚" #: doc/classes/HTTPClient.xml:16 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/" +"http_client_class.html" #: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71 #: doc/classes/StreamPeerSSL.xml:10 @@ -32658,8 +32796,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/" +"ssl_certificates.html" #: doc/classes/HTTPClient.xml:23 msgid "Closes the current connection, allowing reuse of this [HTTPClient]." @@ -32833,7 +32971,6 @@ msgstr "" "http_escape]。" #: doc/classes/HTTPClient.xml:146 -#, fuzzy msgid "" "Sends a raw request to the connected host.\n" "The URL parameter is usually just the part after the host, so for " @@ -32846,11 +32983,14 @@ msgid "" "Method].\n" "Sends the body data raw, as a byte array and does not encode it in any way." msgstr "" -"å‘连接的æœåС噍å‘é€åŽŸå§‹è¯·æ±‚ã€‚URL 傿•°ä»…为主机ååŽé¢çš„部分,å³è¯·æ±‚ " -"[code]http://somehost.com/index.php[/code] 应该填写 [code]index.php[/" -"code]。\n" -"Headers 傿•°æ˜¯ HTTP 请求的报头。HTTP 方法å¯ä»¥æŸ¥çœ‹ [enum Method]。\n" -"å‘é€åŽŸå§‹çš„è¯·æ±‚ä½“æ•°æ®ï¼Œç±»åž‹ä¸ºå—节数组,ä¸ä¼šå†åšä»»ä½•å½¢å¼çš„ç¼–ç 。" +"å‘连接的主机å‘é€åŽŸå§‹è¯·æ±‚ã€‚\n" +"URL傿•°é€šå¸¸åªæ˜¯ä¸»æœºåŽé¢çš„部分,所以对于[code]http://somehost.com/index.php[/" +"code],它是[code]/index.php[/code]。当å‘HTTPä»£ç†æœåС噍å‘é€è¯·æ±‚时,它应该是一" +"个ç»å¯¹çš„URL。对于[constant HTTPClient.METHOD_OPTIONS]请求,å…许[code]*[/" +"code]。对于[constant HTTPClient.METHOD_CONNECT]è¯·æ±‚ï¼Œåº”è¯¥æ˜¯æ ‡å‡†ç»„ä»¶ï¼Œ" +"[code]host:port[/code]。\n" +"å¤´ä¿¡æ¯æ˜¯HTTP请求头信æ¯ã€‚关于å¯ç”¨çš„HTTP方法,å‚阅[enum Method]。\n" +"以å—节数组的形å¼å‘é€åŽŸå§‹æ£æ–‡æ•°æ®ï¼Œä¸ä»¥ä»»ä½•æ–¹å¼è¿›è¡Œç¼–ç 。" #: doc/classes/HTTPClient.xml:155 msgid "" @@ -33570,7 +33710,6 @@ msgid "A node with the ability to send HTTP(S) requests." msgstr "具有å‘é€ HTTP(S) 请求能力的节点。" #: doc/classes/HTTPRequest.xml:7 -#, fuzzy msgid "" "A node with the ability to send HTTP requests. Uses [HTTPClient] " "internally.\n" @@ -33644,82 +33783,82 @@ msgid "" " texture_rect.texture = texture\n" "[/codeblock]" msgstr "" -"具有å‘é€ HTTP 请求能力的节点,内部使用 [HTTPClient]。\n" -"å¯ä»¥ç”¨æ¥å‘é€ HTTP 请求,å³é€šè¿‡ HTTP ä¸‹è½½ä¸Šä¼ æ–‡ä»¶å’Œç½‘é¡µå†…å®¹ã€‚\n" -"[b]与 REST API é€šä¿¡ç¤ºä¾‹ï¼Œè¾“å‡ºæ‰€è¿”å›žçš„å—æ®µï¼š[/b]\n" +"有能力å‘é€HTTP请求的节点。内部使用[HTTPClient]。\n" +"å¯ä»¥ç”¨æ¥è¿›è¡ŒHTTP请求,å³é€šè¿‡HTTPä¸‹è½½æˆ–ä¸Šä¼ æ–‡ä»¶æˆ–ç½‘ç»œå†…å®¹ã€‚\n" +"[b]è¦å‘Šï¼š[/b]å‚阅[HTTPClient]的注释和è¦å‘Šï¼Œä»¥äº†è§£å…¶å±€é™æ€§ï¼Œç‰¹åˆ«æ˜¯å…³äºŽSSL的安" +"全性。\n" +"[b]连接REST API并打å°å…¶è¿”å›žå—æ®µä¹‹ä¸€çš„例å:[/b]\n" "[codeblock]\n" "func _ready():\n" -" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n" +" # Create an HTTP request node and connect its completion signal.\n" " var http_request = HTTPRequest.new()\n" " add_child(http_request)\n" " http_request.connect(\"request_completed\", self, " "\"_http_request_completed\")\n" "\n" -" # 执行 GET 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n" +" # Perform a GET request. The URL below returns JSON as of writing.\n" " var error = http_request.request(\"https://httpbin.org/get\")\n" " if error != OK:\n" -" push_error(\"HTTP 请求出错。\")\n" +" push_error(\"An error occurred in the HTTP request.\")\n" "\n" -" # 执行 POST 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n" -" # 注æ„:ä¸è¦ä½¿ç”¨åŒä¸€ä¸ª HTTPRequest èŠ‚ç‚¹åŒæ—¶è¿›è¡Œå¤šä¸ªè¯·æ±‚\n" -" # 下é¢çš„代ç ä»…ä¾›å‚考。\n" +" # Perform a POST request. The URL below returns JSON as of writing.\n" +" # Note: Don't make simultaneous requests using a single HTTPRequest " +"node.\n" +" # The snippet below is provided for reference only.\n" " var body = {\"name\": \"Godette\"}\n" -" var error = http_request.request(\"https://httpbin.org/post\", [], true, " +" error = http_request.request(\"https://httpbin.org/post\", [], true, " "HTTPClient.METHOD_POST, body)\n" " if error != OK:\n" -" push_error(\"HTTP 请求出错。\")\n" +" push_error(\"An error occurred in the HTTP request.\")\n" "\n" "\n" -"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n" +"# Called when the HTTP request is completed.\n" "func _http_request_completed(result, response_code, headers, body):\n" " var response = parse_json(body.get_string_from_utf8())\n" "\n" -" # 会输出(被 httpbin.org 识别到的)HTTPRequest 节点所使用的用户代ç†å—符" -"串。\n" +" # Will print the user agent string used by the HTTPRequest node (as " +"recognized by httpbin.org).\n" " print(response.headers[\"User-Agent\"])\n" "[/codeblock]\n" -"[b]使用 HTTPRequest åŠ è½½å¹¶æ˜¾ç¤ºå›¾ç‰‡ç¤ºä¾‹ï¼š[/b]\n" +"[b]使用HTTPRequeståŠ è½½å’Œæ˜¾ç¤ºå›¾ç‰‡çš„ä¾‹å:[/b]\n" "[codeblock]\n" "func _ready():\n" -" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n" +" # Create an HTTP request node and connect its completion signal.\n" " var http_request = HTTPRequest.new()\n" " add_child(http_request)\n" " http_request.connect(\"request_completed\", self, " "\"_http_request_completed\")\n" "\n" -" # 执行 HTTP 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 PNG 图片。\n" +" # Perform the HTTP request. The URL below returns a PNG image as of " +"writing.\n" " var error = http_request.request(\"https://via.placeholder.com/512\")\n" " if error != OK:\n" -" push_error(\"HTTP 请求出错。\")\n" +" push_error(\"An error occurred in the HTTP request.\")\n" "\n" "\n" -"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n" +"# Called when the HTTP request is completed.\n" "func _http_request_completed(result, response_code, headers, body):\n" " var image = Image.new()\n" " var error = image.load_png_from_buffer(body)\n" " if error != OK:\n" -" push_error(\"æ— æ³•åŠ è½½å›¾ç‰‡\")\n" +" push_error(\"Couldn't load the image.\")\n" "\n" " var texture = ImageTexture.new()\n" " texture.create_from_image(image)\n" "\n" -" # 在 TextureRect èŠ‚ç‚¹ä¸æ˜¾ç¤ºè¯¥å›¾ç‰‡ã€‚\n" +" # Display the image in a TextureRect node.\n" " var texture_rect = TextureRect.new()\n" " add_child(texture_rect)\n" " texture_rect.texture = texture\n" -"[/codeblock]\n" -"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡" -"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/" -"url] çš„å…³ç³»è€Œç¦æ¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æå»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ " -"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。" +"[/codeblock]" #: doc/classes/HTTPRequest.xml:70 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/" +"http_request_class.html" #: doc/classes/HTTPRequest.xml:77 msgid "Cancels the current request." @@ -33747,7 +33886,6 @@ msgid "" msgstr "返回内部 [HTTPClient] 的当å‰çжæ€ã€‚è§ [enum HTTPClient.Status]。" #: doc/classes/HTTPRequest.xml:107 -#, fuzzy msgid "" "Creates request on the underlying [HTTPClient]. If there is no configuration " "errors, it tries to connect using [method HTTPClient.connect_to_host] and " @@ -33765,17 +33903,22 @@ msgid "" "url] for more details). As a workaround, you can send data as a query string " "in the URL. See [method String.http_escape] for an example." msgstr "" -"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method " -"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ 递给 [method HTTPClient." +"在底层的 [HTTPClient] 上创建请求。如果没有é…置错误,它会å°è¯•使用 [method " +"HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ 递给 [method HTTPClient." "request]。\n" -"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘䏿—¶è¿”" -"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant " -"ERR_BUSY],给出的å—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant " -"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] æ— æ³•è¿žæŽ¥åˆ°ä¸»æœºæ—¶è¿”å›ž " -"[constant ERR_CANT_CONNECT]。" +"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应)," +"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘ä¸ï¼Œ[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ" +"å‰çš„请求,[constant ERR_INVALID_PARAMETER] 如果给定的å—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼" +"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] æ— æ³•è¿žæŽ¥åˆ°" +"主机。\n" +"[b]注æ„:[/b]当[code]method[/code]为[constant HTTPClient.METHOD_GET]时,通过" +"[code]request_data[/code]å‘é€çš„payloadå¯èƒ½ä¼šè¢«æœåŠ¡å™¨å¿½ç•¥ç”šè‡³å¯¼è‡´æœåŠ¡å™¨æ‹’ç»è¯·" +"求,å‚阅 [url=https://datatracker.ietf.org/doc/html/" +"rfc7231#section-4.3.1]RFC 7231 第 4.3.1 节[/url] 了解更多。作为一ç§è§£å†³æ–¹æ³•," +"ä½ å¯ä»¥å°†æ•°æ®ä½œä¸º URL ä¸çš„æŸ¥è¯¢å—符串å‘é€ã€‚å‚阅 [method String.http_escape] 示" +"例。" #: doc/classes/HTTPRequest.xml:120 -#, fuzzy msgid "" "Creates request on the underlying [HTTPClient] using a raw array of bytes " "for the request body. If there is no configuration errors, it tries to " @@ -33788,31 +33931,30 @@ msgid "" "[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot " "connect to host." msgstr "" -"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method " -"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ 递给 [method HTTPClient." -"request]。\n" -"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘䏿—¶è¿”" -"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant " -"ERR_BUSY],给出的å—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant " -"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] æ— æ³•è¿žæŽ¥åˆ°ä¸»æœºæ—¶è¿”å›ž " -"[constant ERR_CANT_CONNECT]。" +"在底层的[HTTPClient]上创建请求,使用一个原始å—节数组作为请求主体。如果没有é…" +"置错误,它会å°è¯•使用 [method HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ 递给 " +"[method HTTPClient.request]。\n" +"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应)," +"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘ä¸ï¼Œ[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ" +"å‰çš„请求,[constant ERR_INVALID_PARAMETER] 如果给定的å—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼" +"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] æ— æ³•è¿žæŽ¥åˆ°" +"主机。" #: doc/classes/HTTPRequest.xml:127 msgid "Maximum allowed size for response bodies." msgstr "å…许的最大å“应体大å°ã€‚" #: doc/classes/HTTPRequest.xml:130 -#, fuzzy msgid "" "The size of the buffer used and maximum bytes to read per iteration. See " "[member HTTPClient.read_chunk_size].\n" "Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files " "to decrease memory usage at the cost of download speeds." msgstr "" -"æ¯æ¬¡è¿ä»£æ—¶æ‰€ä½¿ç”¨çš„缓冲区大å°ï¼Œå³æ¯æ¬¡è¿ä»£æ—¶æ‰€èƒ½è¯»å–的最大å—èŠ‚æ•°ã€‚è§ [member " -"HTTPClient.read_chunk_size]。\n" -"下载大文件时将该值调大(例如下载 64 KiB 时设为 65536)å¯ä»¥ç”¨æ›´å¤§çš„å†…å˜æ¶ˆè€—æ¢" -"å–æ›´å¿«çš„下载速度。" +"使用的缓冲区大å°å’Œæ¯æ¬¡è¿ä»£è¯»å–的最大å—节数。å‚阅 [member HTTPClient." +"read_chunk_size]。\n" +"ä¸‹è½½å°æ–‡ä»¶æ—¶å°†å…¶è®¾ç½®ä¸ºè¾ƒä½Žçš„值,以é™ä½Žå†…å˜ä½¿ç”¨é‡ï¼Œä½†ä¼šé™ä½Žä¸‹è½½é€Ÿåº¦ï¼Œä¾‹å¦‚ " +"4096 表示 4 KiB。" #: doc/classes/HTTPRequest.xml:134 msgid "The file to download into. Will output any received file into it." @@ -33879,7 +34021,6 @@ msgid "Image datatype." msgstr "å›¾åƒæ•°æ®ç±»åž‹ã€‚" #: doc/classes/Image.xml:7 -#, fuzzy msgid "" "Native image datatype. Contains image data which can be converted to an " "[ImageTexture] and provides commonly used [i]image processing[/i] methods. " @@ -33891,9 +34032,12 @@ msgid "" "[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics " "hardware limitations. Larger images may fail to import." msgstr "" -"åŽŸç”Ÿå›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [Texture2D]å›¾åƒæ•°æ®ï¼Œä»¥åŠä¸Žä¹‹äº¤äº’çš„å¤šç§æ–¹æ³•。" -"[Image] 的最大宽度和高度为 [constant MAX_WIDTH] å’Œ [constant MAX_HEIGHT] 。\n" -"[b]注:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå¤§å°ä¸º 16384×16384 åƒç´ 。较大的图åƒå°†" +"æœ¬åœ°å›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [ImageTexture] çš„å›¾åƒæ•°æ®ï¼Œå¹¶æä¾›å¸¸ç”¨çš„ [i] 图" +"åƒå¤„ç† [/i] 方法。 [Image] 的最大宽度和高度是 [constant MAX_WIDTH] å’Œ " +"[constant MAX_HEIGHT]。\n" +"[Image] ä¸èƒ½ç›´æŽ¥åˆ†é…给对象的 [code]texture[/code] 属性,例如 [Sprite],必须先" +"手动转æ¢ä¸º [ImageTexture]。\n" +"[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå°ºå¯¸ä¸º16384×16384åƒç´ 。较大的图åƒå¯èƒ½" "æ— æ³•å¯¼å…¥ã€‚" #: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31 @@ -33901,7 +34045,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/" "importing_images.html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/" "importing_images.html" #: doc/classes/Image.xml:21 @@ -34033,7 +34177,7 @@ msgstr "" msgid "" "Stretches the image and enlarges it by a factor of 2. No interpolation is " "done." -msgstr "" +msgstr "拉伸图åƒå¹¶å°†å…¶æ”¾å¤§2å€ï¼Œä¸è¿›è¡Œæ’值。" #: doc/classes/Image.xml:140 msgid "Fills the image with a given [Color]." @@ -34052,7 +34196,6 @@ msgid "Flips the image vertically." msgstr "垂直翻转图åƒã€‚" #: doc/classes/Image.xml:165 -#, fuzzy msgid "" "Generates mipmaps for the image. Mipmaps are precalculated lower-resolution " "copies of the image that are automatically used if the image needs to be " @@ -34064,14 +34207,16 @@ msgid "" "result in noticeable stuttering during gameplay, even if [method " "generate_mipmaps] is called from a [Thread]." msgstr "" -"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的ã€åˆ†è¾¨çŽ‡è¾ƒä½Žçš„å›¾åƒå‰¯æœ¬ã€‚如果图åƒåœ¨æ¸²" -"染时需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨Mipmaps。这å¯ä»¥æé«˜å›¾åƒçš„è´¨é‡å’Œæ¸²æŸ“的性能。如果图åƒ" -"è¢«åŽ‹ç¼©ï¼Œæˆ–è€…æ˜¯è‡ªå®šä¹‰æ ¼å¼ï¼Œæˆ–者图åƒçš„宽度/高度为0,则返回一个错误。" +"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的图åƒçš„低分辨率副本,如果图åƒåœ¨æ¸²æŸ“æ—¶" +"需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨ã€‚å…¶æœ‰åŠ©äºŽæé«˜å›¾åƒè´¨é‡å’Œæ¸²æŸ“时的性能。如果图åƒè¢«åŽ‹ç¼©ï¼Œ" +"æˆ–é‡‡ç”¨è‡ªå®šä¹‰æ ¼å¼ï¼Œæˆ–图åƒçš„宽度或高度为[code]0[/code]ï¼Œåˆ™æ¤æ–¹æ³•返回错误。\n" +"[b]注æ„:[/b] Mipmapçš„ç”Ÿæˆæ˜¯åœ¨CPU上完æˆçš„,是å•线程的,并且[i]总是[/i]在主线" +"程上完æˆã€‚è¿™æ„味ç€åœ¨æ¸¸æˆè¿‡ç¨‹ä¸ç”Ÿæˆmipmaps会导致明显的å¡é¡¿ï¼Œå³ä½¿ä»Ž[Thread]调用" +"[method generate_mipmaps]。" #: doc/classes/Image.xml:172 -#, fuzzy msgid "Returns a copy of the image's raw data." -msgstr "返回图åƒçš„原始数æ®ã€‚" +msgstr "返回图åƒåŽŸå§‹æ•°æ®çš„副本。" #: doc/classes/Image.xml:178 msgid "Returns the image's format. See [enum Format] constants." @@ -34090,26 +34235,26 @@ msgstr "" "é‡ã€‚" #: doc/classes/Image.xml:199 -#, fuzzy msgid "" "Returns the color of the pixel at [code](x, y)[/code] if the image is " "locked. If the image is unlocked, it always returns a [Color] with the value " "[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but " "two integer arguments instead of a Vector2 argument." msgstr "" -"返回 [code](x, y)[/code] 处åƒç´ 的颜色。这与[method get_pixelv]相åŒï¼Œä½†æœ‰ä¸¤ä¸ª" -"æ•´æ•°å‚æ•°ï¼Œè€Œä¸æ˜¯ä¸€ä¸ª[Vector2]傿•°ã€‚" +"如果图åƒè¢«é”定,则返回 [code](x, y)[/code] 处åƒç´ 的颜色。如果图åƒè¢«è§£é”,它总" +"是返回 [code](0, 0, 0, 1.0)[/code] 值的 [Color]。这与 [method get_pixelv] 相" +"åŒï¼Œä½†æœ‰ä¸¤ä¸ªæ•´æ•°å‚æ•°è€Œä¸æ˜¯ Vector2 傿•°ã€‚" #: doc/classes/Image.xml:206 -#, fuzzy msgid "" "Returns the color of the pixel at [code]src[/code] if the image is locked. " "If the image is unlocked, it always returns a [Color] with the value [code]" "(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a " "Vector2 argument instead of two integer arguments." msgstr "" -"返回[code](x,y)[/code]处åƒç´ 的颜色。这与[method get_pixel]相åŒï¼Œä½†ç”¨ä¸€ä¸ª" -"[Vector2]傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。" +"如果图åƒè¢«é”定,返回[code]src[/code]处的åƒç´ 的颜色。如果图åƒè¢«è§£é”,它总是返" +"回[code](0, 0, 0, 1.0)[/code]值的[Color]。这与[method get_pixel]相åŒï¼Œåªæ˜¯ç”¨" +"一个Vector2傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。" #: doc/classes/Image.xml:213 msgid "" @@ -34154,7 +34299,6 @@ msgstr "" "åƒç´ çš„é€æ˜Žåº¦ï¼ˆalpha )高于0,则返回[code]false[/code]。" #: doc/classes/Image.xml:262 -#, fuzzy msgid "" "Loads an image from file [code]path[/code]. See [url=https://docs." "godotengine.org/en/3.4/getting_started/workflow/assets/importing_images." @@ -34165,9 +34309,13 @@ msgid "" "the [code]user://[/code] directory, and may not work in exported projects.\n" "See also [ImageTexture] description for usage examples." msgstr "" -"从文件路径[code]path[/code]åŠ è½½å›¾åƒã€‚有关支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶çš„列表,请å‚阅" -"[url=https://docs.godotengine.org/zh_CN/latest/getting_started/workflow/" -"assets/importing_images.html#supported-image-formats]支æŒçš„å›¾åƒæ ¼å¼[/url]。" +"从文件[code]path[/code]åŠ è½½å›¾åƒã€‚å‚阅[url=https://docs.godotengine.org/zh_CN/" +"stable/getting_started/workflow/assets/importing_images.html#supported-image-" +"formats]支æŒçš„å›¾åƒæ ¼å¼[/url],了解支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶ã€‚\n" +"[b]è¦å‘Šï¼š[/b] 这个方法åªèƒ½åœ¨ç¼–辑器ä¸ä½¿ç”¨ï¼Œæˆ–者在è¿è¡Œæ—¶éœ€è¦åŠ è½½å¤–éƒ¨å›¾åƒçš„æƒ…况" +"下使用,比如ä½äºŽ[code]user://[/code]目录下的图åƒï¼Œåœ¨å¯¼å‡ºçš„项目ä¸å¯èƒ½æ— 法工" +"作。\n" +"有关使用实例,å‚阅[ImageTexture]æè¿°ã€‚" #: doc/classes/Image.xml:271 msgid "" @@ -34175,6 +34323,9 @@ msgid "" "[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. " "Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported." msgstr "" +"从BMP文件的二进制内容ä¸åŠ è½½å›¾åƒã€‚\n" +"[b]注æ„:[/b] Godotçš„BMP模å—䏿”¯æŒ16ä½åƒç´ 的图åƒã€‚åªæ”¯æŒ1ä½ã€4ä½ã€8ä½ã€24ä½å’Œ" +"32ä½åƒç´ 的图åƒã€‚" #: doc/classes/Image.xml:279 msgid "Loads an image from the binary contents of a JPEG file." @@ -34197,6 +34348,8 @@ msgid "" "Locks the data for reading and writing access. Sends an error to the console " "if the image is not locked when reading or writing a pixel." msgstr "" +"é”定数æ®çš„读写访问。如果在读或写åƒç´ æ—¶ï¼Œå›¾åƒæ²¡æœ‰è¢«é”å®šï¼Œåˆ™å‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™" +"误。" #: doc/classes/Image.xml:312 msgid "" @@ -34216,25 +34369,24 @@ msgstr "" "code]。" #: doc/classes/Image.xml:327 -#, fuzzy msgid "" "Resizes the image to the given [code]width[/code] and [code]height[/code]. " "New pixels are calculated using the [code]interpolation[/code] mode defined " "via [enum Interpolation] constants." msgstr "" -"将图åƒè°ƒæ•´åˆ°ç»™å®šçš„[code]宽度[/code]å’Œ[code]高度[/code]。新的åƒç´ 是用" -"[code]interpolation[/code](æ’值)计算的。è§[code]interpolation[/code]常é‡ã€‚" +"调整图åƒå¤§å°åˆ°ç»™å®šçš„[code]width[/code]å’Œ[code]height[/code]。新åƒç´ 通过[enum " +"Interpolation]常数定义的[code]interpolation[/code]æ’值模å¼è®¡ç®—。" #: doc/classes/Image.xml:335 -#, fuzzy msgid "" "Resizes the image to the nearest power of 2 for the width and height. If " "[code]square[/code] is [code]true[/code] then set width and height to be the " "same. New pixels are calculated using the [code]interpolation[/code] mode " "defined via [enum Interpolation] constants." msgstr "" -"将图åƒçš„宽度和高度调整为最接近的 2 次幂。如果 [code]square[/code] 为 " -"[code]true[/code],则将宽度和高度设置为相åŒã€‚" +"将图åƒçš„宽度和高度调整到最接近的2次方。如果[code]square[/code]是[code]true[/" +"code],那么设置宽度和高度为相åŒã€‚æ–°åƒç´ 通过[enum Interpolation]常数定义的" +"[code]interpolation[/code]æ’值模å¼è®¡ç®—。" #: doc/classes/Image.xml:341 msgid "" @@ -34242,7 +34394,6 @@ msgid "" msgstr "å°†æ ‡å‡† RGBEï¼ˆçº¢ç»¿è“æŒ‡æ•°ï¼‰å›¾åƒè½¬æ¢ä¸º sRGB 图åƒã€‚" #: doc/classes/Image.xml:349 -#, fuzzy msgid "" "Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/" "code] is [code]true[/code] and the image has only one channel, it will be " @@ -34254,16 +34405,17 @@ msgid "" "called from an exported project." msgstr "" "将图åƒä½œä¸ºEXR文件ä¿å˜åˆ°[code]path[/code]。如果[code]grayscale[/code]是" -"[code]true[/code],并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确ä¿å˜ä¸ºå•è‰²è€Œä¸æ˜¯ä¸€ä¸ªçº¢è‰²é€š" -"é“。如果Godot在编译时没有å¯ç”¨TinyEXR模å—,这个函数将返回[constant " -"ERR_UNAVAILABLE]。" +"[code]true[/code]并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确地ä¿å˜ä¸ºå•è‰²è€Œä¸æ˜¯çº¢è‰²é€šé“。" +"如果Godot在编译时没有TinyEXR模å—,这个函数将返回[constant " +"ERR_UNAVAILABLE]。\n" +"[b]注æ„:[/b] TinyEXR模å—在éžç¼–辑器构建ä¸è¢«ç¦ç”¨ï¼Œè¿™æ„味ç€[method save_exr]从" +"导出的项目ä¸è°ƒç”¨æ—¶å°†è¿”回[constant ERR_UNAVAILABLE]。" #: doc/classes/Image.xml:357 msgid "Saves the image as a PNG file to [code]path[/code]." msgstr "将图åƒä½œä¸º PNG 文件ä¿å˜åˆ° [code]path[/code]。" #: doc/classes/Image.xml:371 -#, fuzzy msgid "" "Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. " "Example:\n" @@ -34276,15 +34428,17 @@ msgid "" "img.set_pixel(x, y, color) # Does not have an effect\n" "[/codeblock]" msgstr "" -"设置[code](x, y)[/code]处的åƒç´ çš„[Color]。示例:\n" +"如果图åƒè¢«é”定,设置[code](x, y)[/code]处åƒç´ çš„[Color]。例å:\n" "[codeblock]\n" "var img = Image.new()\n" "img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n" -"img.set_pixel(x, y, color)\n" +"img.lock()\n" +"img.set_pixel(x, y, color) # Works\n" +"img.unlock()\n" +"img.set_pixel(x, y, color) # Does not have an effect\n" "[/codeblock]" #: doc/classes/Image.xml:387 -#, fuzzy msgid "" "Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is " "locked. Note that the [code]dst[/code] values must be integers. Example:\n" @@ -34297,12 +34451,15 @@ msgid "" "img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n" "[/codeblock]" msgstr "" -"设置[code](dst.x, dst.y)[/code]处åƒç´ çš„[Color]。注æ„,[code]dst[/code]的值必" -"须是整数。例å。\n" +"如果图åƒè¢«é”定,设置[code](dst.x, dst.y)[/code]处的åƒç´ çš„[Color]。注æ„," +"[code]dst[/code]值必须是整数。例:\n" "[codeblock]\n" "var img = Image.new()\n" "img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n" -"img.set_pixelv(Vector2(x, y), color)\n" +"img.lock()\n" +"img.set_pixelv(Vector2(x, y), color) # Works\n" +"img.unlock()\n" +"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n" "[/codeblock]" #: doc/classes/Image.xml:401 @@ -34318,7 +34475,6 @@ msgid "Unlocks the data and prevents changes." msgstr "è§£é”æ•°æ®å¹¶é˜²æ¢æ›´æ”¹ã€‚" #: doc/classes/Image.xml:419 -#, fuzzy msgid "" "Holds all the image's color data in a given format. See [enum Format] " "constants." @@ -34343,15 +34499,14 @@ msgid "" msgstr "OpenGL çº¹ç†æ ¼å¼ï¼Œå…·æœ‰ä¸¤ä¸ªå€¼ï¼Œäº®åº¦å’Œ alpha,æ¯ä¸ªå€¼ä»¥ 8 ä½å˜å‚¨ã€‚" #: doc/classes/Image.xml:436 -#, fuzzy msgid "" "OpenGL texture format [code]RED[/code] with a single component and a " "bitdepth of 8.\n" "[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel " "instead of the red channel for storage." msgstr "" -"OpenGL çº¹ç†æ ¼å¼ [code]RGB[/code] 具有三个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 8。\n" -"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行sRGB到线性色彩空间的转æ¢ã€‚" +"OpenGL çº¹ç†æ ¼å¼ [code]RED[/code],具有å•个分é‡å’Œ 8 使·±åº¦ã€‚\n" +"[b]注æ„:[/b] 当使用 GLES2 åŽç«¯æ—¶ï¼Œå®ƒä½¿ç”¨ alpha 通é“è€Œä¸æ˜¯çº¢è‰²é€šé“进行å˜å‚¨ã€‚" #: doc/classes/Image.xml:440 msgid "" @@ -34387,11 +34542,12 @@ msgstr "" "OpenGL çº¹ç†æ ¼å¼ [code]RGBA[/code] 有四个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 4。" #: doc/classes/Image.xml:454 -#, fuzzy msgid "" "OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each " "component of RGB and one bit for alpha." -msgstr "OpenGL çº¹ç†æ ¼å¼ [code]RG[/code],具有两个部分,æ¯ä¸ªéƒ¨åˆ†çš„使·±åº¦ä¸º 8。" +msgstr "" +"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB5_A1[/code],其ä¸RGBæ¯ä¸ªåˆ†é‡çš„æ·±åº¦ä¸º5ä½ï¼Œalpha为1" +"ä½ã€‚" #: doc/classes/Image.xml:457 msgid "" @@ -34719,7 +34875,6 @@ msgstr "" "å¼é€šå¸¸ä¼šäº§ç”Ÿæ›´å¥½çš„结果,但代价是速度较慢." #: doc/classes/Image.xml:564 -#, fuzzy msgid "" "Performs bilinear separately on the two most-suited mipmap levels, then " "linearly interpolates between them.\n" @@ -34733,13 +34888,14 @@ msgid "" "On the other hand, if the image already has mipmaps, they will be used, and " "a new set will be generated for the resulting image." msgstr "" -"在两个最åˆé€‚çš„mipmap层上分别执行åŒçº¿æ€§,ç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值.\n" -"它比[INTERPOLATE_BILINEAR]æ…¢,ä½†èƒ½äº§ç”Ÿè´¨é‡æ›´é«˜çš„æ•ˆæžœ,并且å‡å°‘很多混å .\n" -"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šå¯¹ç”Ÿæˆçš„图åƒç”Ÿæˆmipmaps.\n" -"[b]注æ„: [/b]如果您打算对原始图åƒè¿›è¡Œå¤šä»½ç¼©æ”¾,最好æå‰å¯¹å…¶è°ƒç”¨ " -"generate_mipmaps(),以é¿å…在åå¤ç”Ÿæˆå®ƒä»¬æ—¶æµªè´¹å¤„ç†èƒ½åŠ›.\n" -"å¦ä¸€æ–¹é¢,如果图åƒå·²ç»æœ‰äº†mipmaps,就会使用它们,并为生æˆçš„图åƒç”Ÿæˆä¸€ç»„æ–°çš„" -"mipmaps." +"在两个最适åˆçš„mipmap级别上分别执行åŒçº¿æ€§ï¼Œç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值。\n" +"它比[constant INTERPOLATE_BILINEAR]慢,但能产生更高质é‡çš„æ•ˆæžœï¼Œå‡å°‘锯齿伪" +"影。\n" +"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šåœ¨ç”Ÿæˆçš„图åƒä¹‹ä¸Šç”Ÿæˆ" +"mipmaps。\n" +"[b]注æ„:[/b] å¦‚æžœä½ æ‰“ç®—ç¼©æ”¾åŽŸå§‹å›¾åƒçš„多个副本,最好事先对其调用[method " +"generate_mipmaps],以é¿å…在生æˆå®ƒä»¬æ—¶å夿µªè´¹å¤„ç†èƒ½åŠ›ã€‚\n" +"å¦ä¸€æ–¹é¢ï¼Œå¦‚果图åƒå·²ç»æœ‰äº†mipmaps,其将被使用,并为生æˆçš„图åƒç”Ÿæˆæ–°çš„一组。" #: doc/classes/Image.xml:571 msgid "" @@ -34874,17 +35030,15 @@ msgstr "" "[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§çº¹ç†å°ºå¯¸ä¸º16384×16384åƒç´ 。" #: doc/classes/ImageTexture.xml:41 -#, fuzzy msgid "" "Create a new [ImageTexture] with [code]width[/code] and [code]height[/" "code].\n" "[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] " "is any combination of [enum Texture.Flags]." msgstr "" -"使用一个[code]width[/code] 宽度和 [code]height[/code]高度创建一个新的 " -"[ImageTexture]图片纹ç†ã€‚\n" -"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] " -"is any combination of [enum Texture.Flags]." +"创建具有[code]width[/code]å’Œ[code]height[/code]的新[ImageTexture]。\n" +"[code]format[/code]是[enum Image.Format]ä¸çš„一个值,[code]flags[/code]是" +"[enum Texture.Flags]的任æ„组åˆã€‚" #: doc/classes/ImageTexture.xml:50 msgid "" @@ -34892,11 +35046,13 @@ msgid "" "with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color " "space conversion can take place, according to [enum Image.Format]." msgstr "" +"通过使用 [enum Texture.Flags] ä¸çš„ [code]flags[/code] 分é…和设置æ¥è‡ª [Image] " +"çš„æ•°æ®æ¥åˆå§‹åŒ–纹ç†ã€‚æ ¹æ® [enum Image.Format],å¯ä»¥è¿›è¡Œ sRGB 到线性颜色空间的" +"转æ¢ã€‚" #: doc/classes/ImageTexture.xml:56 -#, fuzzy msgid "Returns the format of the texture, one of [enum Image.Format]." -msgstr "返回 [ImageTexture] çš„æ ¼å¼ï¼Œæ˜¯ [enum Image.Format] ä¸çš„一个。" +msgstr "返回纹ç†çš„æ ¼å¼ï¼Œ[enum Image.Format] 之一。" #: doc/classes/ImageTexture.xml:63 msgid "" @@ -34920,20 +35076,24 @@ msgid "" "texture frequently, which is faster than allocating additional memory for a " "new texture each time." msgstr "" +"用新的 [Image] 替æ¢çº¹ç†çš„æ•°æ®ã€‚\n" +"[b]注æ„:[/b]纹ç†å¿…须先用[method create_from_image]方法åˆå§‹åŒ–ï¼Œç„¶åŽæ‰èƒ½æ›´æ–°ã€‚" +"新的图åƒå°ºå¯¸ã€æ ¼å¼å’Œ mipmap é…置应与现有纹ç†çš„图åƒé…置相匹é…,å¦åˆ™å¿…须使用 " +"[method create_from_image] æ–¹æ³•é‡æ–°åˆ›å»ºã€‚\n" +"如果需è¦é¢‘ç¹æ›´æ–°çº¹ç†ï¼Œè¯·åœ¨ [method create_from_image] ä¸Šä½¿ç”¨æ¤æ–¹æ³•ï¼Œè¿™æ¯”æ¯æ¬¡" +"为新纹ç†åˆ†é…é¢å¤–内å˜è¦å¿«ã€‚" #: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837 -#, fuzzy msgid "Resizes the texture to the specified dimensions." -msgstr "å°† [ImageTexture] 调整为指定的大å°ã€‚" +msgstr "将纹ç†çš„大å°è°ƒæ•´ä¸ºæŒ‡å®šçš„尺寸。" #: doc/classes/ImageTexture.xml:87 msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]." msgstr "[constant STORAGE_COMPRESS_LOSSY]çš„å˜å‚¨è´¨é‡ã€‚" #: doc/classes/ImageTexture.xml:90 -#, fuzzy msgid "The storage type (raw, lossy, or compressed)." -msgstr "按钮被按下的状æ€ã€‚" +msgstr "å˜å‚¨ç±»åž‹ï¼Œå³åŽŸå§‹ã€æœ‰æŸã€æˆ–压缩。" #: doc/classes/ImageTexture.xml:95 msgid "[Image] data is stored raw and unaltered." @@ -34944,18 +35104,17 @@ msgid "" "[Image] data is compressed with a lossy algorithm. You can set the storage " "quality with [member lossy_quality]." msgstr "" -"[图åƒ]æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨[member lossy_quality]设置å˜å‚¨è´¨é‡ã€‚" +"[Image]æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨[member lossy_quality]设置å˜å‚¨è´¨é‡ã€‚" #: doc/classes/ImageTexture.xml:101 msgid "[Image] data is compressed with a lossless algorithm." -msgstr "[图åƒ]æ•°æ®æ˜¯ç”¨æ— æŸç®—法压缩的。" +msgstr "[Image]æ•°æ®æ˜¯ç”¨æ— æŸç®—法压缩的。" #: doc/classes/ImmediateGeometry.xml:4 msgid "Draws simple geometry from code." msgstr "通过代ç 绘制简å•çš„å‡ ä½•å½¢çŠ¶ã€‚" #: doc/classes/ImmediateGeometry.xml:7 -#, fuzzy msgid "" "Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n" "See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural " @@ -34971,14 +35130,16 @@ msgid "" "data, try increasing its buffer size limit under [member ProjectSettings." "rendering/limits/buffers/immediate_buffer_size_kb]." msgstr "" -"通过代ç 绘制简å•çš„å‡ ä½•å½¢çŠ¶ã€‚ä½¿ç”¨ç±»ä¼¼äºŽOpenGL 1.x.的绘制方å¼ã€‚\n" -"å…³äºŽå‡ ä½•å½¢çŠ¶çš„ç¨‹åºåŒ–构建,å‚阅 [ArrayMesh],[MeshDataTool] ä»¥åŠ " -"[SurfaceTool]。\n" -"[b]注æ„:[/b] ImmediateGeometry3D 最适用于æ¯å¸§å˜åŒ–的少é‡ç½‘æ ¼æ•°æ®ã€‚如果处ç†å¤§" -"é‡ç½‘æ ¼æ•°æ®å°†ä¼šå˜æ…¢ã€‚å¦‚æžœç½‘æ ¼æ•°æ®ä¸éœ€è¦ç»å¸¸å˜åŒ–,使用[ArrayMesh]," -"[MeshDataTool] 或者 [SurfaceTool] 代替。\n" -"[b]注æ„:[/b] 对于三角形基本模å¼çš„æ£é¢ï¼ŒGodot使用顺时针[url=https://" -"learnopengl.com/Advanced-OpenGL/Face-culling]ç¼ ç»•é¡ºåº[/url]。" +"从代ç ä¸ç»˜åˆ¶ç®€å•çš„å‡ ä½•å›¾å½¢ã€‚ä½¿ç”¨ç±»ä¼¼äºŽOpenGL 1.x的绘制模å¼ã€‚\n" +"请å‚阅[ArrayMesh]ã€[MeshDataTool]å’Œ[SurfaceTool]ï¼Œäº†è§£ç¨‹åºæ€§å‡ 何体的生æˆã€‚\n" +"[b]注æ„:[/b] ImmediateGeometry3D最适åˆå¤„ç†æ¯ä¸€å¸§å˜åŒ–的少é‡ç½‘æ ¼æ•°æ®ã€‚当处ç†å¤§" +"é‡çš„ç½‘æ ¼æ•°æ®æ—¶ï¼Œå®ƒå°†ä¼šå¾ˆæ…¢ã€‚å¦‚æžœç½‘æ ¼æ•°æ®ä¸ç»å¸¸å˜åŒ–,请使用[ArrayMesh]ã€" +"[MeshDataTool]或[SurfaceTool]代替。\n" +"[b]注æ„:[/b] Godot对三角形基本å•元模å¼çš„æ£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://" +"learnopengl.com/Advanced-OpenGL/Face-culling]ç¼ ç»•é¡ºåº[/url]。\n" +"[b]注æ„:[/b] 在处ç†å¤§é‡ç½‘æ ¼æ•°æ®æ—¶ï¼Œå¦‚果出现æ¼ç‚¹ï¼Œå¯ä»¥å°è¯•在[member " +"ProjectSettings.rendering/limits/buffers/immediate_buffer_size_kb]å¢žåŠ å…¶ç¼“å†²" +"区大å°é™åˆ¶ã€‚" #: doc/classes/ImmediateGeometry.xml:23 msgid "" @@ -35046,7 +35207,7 @@ msgstr "" #: doc/classes/Input.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/index.html" #: doc/classes/Input.xml:20 msgid "" @@ -35084,6 +35245,12 @@ msgid "" "once per frame). However, this can be useful in advanced cases where you " "want precise control over the timing of event handling." msgstr "" +"将当å‰ç¼“冲区内的所有输入事件å‘é€ç»™æ¸¸æˆå¾ªçŽ¯ã€‚è¿™äº›äº‹ä»¶å¯èƒ½æ˜¯ç”±äºŽç´¯ç§¯è¾“å…¥" +"([method set_use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member " +"ProjectSettings.input_devices/buffering/agile_event_flushing])而被缓冲的结" +"果。\n" +"引擎已ç»ä¼šåœ¨å…³é”®çš„æ‰§è¡Œç‚¹æ‰§è¡Œæ¤æ“作,至少æ¯å¸§ä¸€æ¬¡ã€‚ç„¶è€Œï¼Œåœ¨ä½ æƒ³è¦ç²¾ç¡®æŽ§åˆ¶äº‹ä»¶" +"å¤„ç†æ—¶é—´çš„高级情况下,这å¯èƒ½æ˜¯æœ‰ç”¨çš„。" #: doc/classes/Input.xml:50 msgid "" @@ -35097,6 +35264,13 @@ msgid "" "measurement for each axis is m/s² while on iOS and UWP it's a multiple of " "the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)." msgstr "" +"å¦‚æžœè®¾å¤‡æœ‰åŠ é€Ÿåº¦ä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žè®¾å¤‡çš„åŠ é€Ÿåº¦ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant " +"Vector3.ZERO]。\n" +"请注æ„,å³ä½¿ä½ çš„è®¾å¤‡æœ‰ä¸€ä¸ªåŠ é€Ÿåº¦è®¡ï¼Œå½“ä»Žç¼–è¾‘å™¨è¿è¡Œæ—¶ï¼Œè¯¥æ–¹æ³•也会返回一个空的" +"[Vector3]ã€‚ä½ å¿…é¡»å°†é¡¹ç›®å¯¼å‡ºåˆ°ä¸€ä¸ªæ”¯æŒçš„è®¾å¤‡ä¸Šï¼Œä»¥ä¾¿ä»ŽåŠ é€Ÿåº¦è®¡ä¸Šè¯»å–æ•°å€¼ã€‚\n" +"[b]注æ„:[/b] 这个方法åªåœ¨iOSã€Androidå’ŒUWP上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回" +"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOSå’ŒUWP" +"上,它是地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。" #: doc/classes/Input.xml:60 msgid "" @@ -35107,9 +35281,13 @@ msgid "" "for [InputEventKey] and [InputEventMouseButton] events, and the direction " "for [InputEventJoypadMotion] events." msgstr "" +"返回介于0å’Œ1之间的值,代表给定动作的原始强度,忽略动作的æ»åŒºã€‚在大多数情况" +"ä¸‹ï¼Œä½ åº”è¯¥ä½¿ç”¨[method get_action_strength]æ¥ä»£æ›¿ã€‚\n" +"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/Input.xml:69 -#, fuzzy msgid "" "Returns a value between 0 and 1 representing the intensity of the given " "action. In a joypad, for example, the further away the axis (analog sticks " @@ -35120,9 +35298,12 @@ msgid "" "for [InputEventKey] and [InputEventMouseButton] events, and the direction " "for [InputEventJoypadMotion] events." msgstr "" -"返回一个介于0å’Œ1ä¹‹é—´çš„å€¼ï¼Œä»£è¡¨ç»™å®šåŠ¨ä½œçš„å¼ºåº¦ã€‚ä»¥æ¸¸æˆæ‰‹æŸ„为例,推动轴(模拟摇" -"æ†æˆ–L2ã€R2触å‘器)离盲区(dead zone)越远,数值就越接近1ã€‚å¦‚æžœåŠ¨ä½œè¢«æ˜ å°„åˆ°ä¸€ä¸ª" -"没有轴作为控件的键盘,返回数值将是0或1。" +"返回介于0å’Œ1之间的值,代表给定动作的强度。例如,在一个æ“纵æ¿ä¸Šï¼Œè½´ï¼ˆæ¨¡æ‹Ÿæ†æˆ–" +"L2ã€R2触å‘器)离æ»åŒºè¶Šè¿œï¼Œæ•°å€¼å°±è¶ŠæŽ¥è¿‘1ã€‚å¦‚æžœåŠ¨ä½œè¢«æ˜ å°„åˆ°ä¸€ä¸ªæ²¡æœ‰è½´ä½œä¸ºé”®ç›˜çš„" +"控件上,返回的数值将是0或1。\n" +"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/Input.xml:78 msgid "" @@ -35131,6 +35312,9 @@ msgid "" "get_action_strength(\"positive_action\") - Input." "get_action_strength(\"negative_action\")[/code]." msgstr "" +"通过指定两个动作æ¥èŽ·å–轴的输入,一个是负的,一个是æ£çš„。\n" +"这是写[code]Input.get_action_strength(\"positive_action\")-Input." +"get_action_strength(\"negative_action\")[/code]的简写。" #: doc/classes/Input.xml:85 msgid "" @@ -35151,6 +35335,11 @@ msgid "" "measurement for each axis is m/s² while on iOS it's a multiple of the " "Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)." msgstr "" +"å¦‚æžœè®¾å¤‡æœ‰åŠ é€Ÿåº¦ä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žè®¾å¤‡çš„é‡åŠ›ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant Vector3." +"ZERO]。\n" +"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回" +"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOS上,它是" +"地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。" #: doc/classes/Input.xml:104 msgid "" @@ -35160,13 +35349,16 @@ msgid "" "[b]Note:[/b] This method only works on Android and iOS. On other platforms, " "it always returns [constant Vector3.ZERO]." msgstr "" +"å¦‚æžœè®¾å¤‡æœ‰é™€èžºä»ªä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žå›´ç»•è®¾å¤‡Xã€Yã€Z轴的旋转速率,å•ä½ä¸ºrad/s。å¦" +"则,该方法返回[constant Vector3.ZERO]。\n" +"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回" +"[constant Vector3.ZERO]。" #: doc/classes/Input.xml:113 -#, fuzzy msgid "" "Returns the current value of the joypad axis at given index (see [enum " "JoystickList])." -msgstr "返回给定索引处的手柄(joypad)轴的当å‰å€¼ï¼ˆå‚阅 [enum JoyAxisList])。" +msgstr "è¿”å›žç»™å®šç´¢å¼•çš„æ¸¸æˆæ‰‹æŸ„轴的当å‰å€¼ï¼Œå‚阅[enum JoystickList]。" #: doc/classes/Input.xml:120 msgid "Returns the index of the provided axis name." @@ -35183,13 +35375,11 @@ msgid "Returns the index of the provided button name." msgstr "返回所æä¾›çš„æŒ‰é’®å称的索引。" #: doc/classes/Input.xml:141 -#, fuzzy msgid "" "Receives a gamepad button from [enum JoystickList] and returns its " "equivalent name as a string." msgstr "" -"从[enum JoyButtonList]ä¸æŽ¥æ”¶ä¸€ä¸ªæ¸¸æˆæ‰‹æŸ„(gamepad)按钮,并以å—符串形å¼è¿”回其对" -"应的å称。" +"从[enum JoystickList]ä¸æŽ¥æ”¶æ¸¸æˆæ‰‹æŸ„按钮,并将其对应的å称作为一个å—符串返回。" #: doc/classes/Input.xml:148 msgid "" @@ -35231,6 +35421,10 @@ msgid "" "[b]Note:[/b] This method only works on Android, iOS and UWP. On other " "platforms, it always returns [constant Vector3.ZERO]." msgstr "" +"如果设备有ç£åŠ›ä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žè®¾å¤‡æ‰€æœ‰è½´çš„ç£åœºå¼ºåº¦ï¼Œå¾®ç‰¹æ–¯æ‹‰ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回" +"[constant Vector3.ZERO]。\n" +"[b]注æ„:[/b] 这个方法åªåœ¨Androidã€iOSå’ŒUWP上有效。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回" +"[constant Vector3.ZERO]。" #: doc/classes/Input.xml:188 msgid "" @@ -35256,9 +35450,13 @@ msgid "" "action deadzones. However, you can override the deadzone to be whatever you " "want (on the range of 0 to 1)." msgstr "" +"通过指定æ£è´ŸXå’ŒY轴的四个动作æ¥èŽ·å–å‘é‡çŸ¢é‡ã€‚\n" +"这个方法在获å–å‘é‡è¾“入时很有用,比如从æ“纵æ†ã€æ–¹å‘盘ã€ç®å¤´æˆ–WASD。å‘é‡çš„长度" +"被é™åˆ¶ä¸º1,并且有一个圆形的æ»åŒºï¼Œè¿™å¯¹äºŽä½¿ç”¨å‘é‡è¾“入进行è¿åŠ¨å¾ˆæœ‰ç”¨ã€‚\n" +"默认情况下,æ»åŒºæ ¹æ®åŠ¨ä½œæ»åŒºçš„å¹³å‡å€¼è‡ªåŠ¨è®¡ç®—ã€‚ç„¶è€Œï¼Œä½ å¯ä»¥è¦†ç›–æ»åŒºï¼ŒèŽ·å¾—ä½ æƒ³" +"è¦çš„,注,在0到1的范围内。" #: doc/classes/Input.xml:215 -#, fuzzy msgid "" "Returns [code]true[/code] when the user starts pressing the action event, " "meaning it's [code]true[/code] only on the frame that the user pressed down " @@ -35269,13 +35467,15 @@ msgid "" "for [InputEventKey] and [InputEventMouseButton] events, and the direction " "for [InputEventJoypadMotion] events." msgstr "" -"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧" -"上æ‰è¿”回[code]true[/code].\n" -"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸è¿è¡Œçš„代ç 很有" -"用。" +"当用户开始按下动作事件时,返回[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·æŒ‰ä¸‹æŒ‰é’®" +"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n" +"这对那些åªéœ€è¦åœ¨åŠ¨ä½œè¢«æŒ‰ä¸‹æ—¶è¿è¡Œä¸€æ¬¡çš„代ç ä¸å¾ˆæœ‰ç”¨ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶æ¯ä¸€å¸§éƒ½è¦" +"è¿è¡Œã€‚\n" +"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/Input.xml:225 -#, fuzzy msgid "" "Returns [code]true[/code] when the user stops pressing the action event, " "meaning it's [code]true[/code] only on the frame that the user released the " @@ -35284,13 +35484,13 @@ msgid "" "for [InputEventKey] and [InputEventMouseButton] events, and the direction " "for [InputEventJoypadMotion] events." msgstr "" -"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧" -"上æ‰è¿”回[code]true[/code].\n" -"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸è¿è¡Œçš„代ç 很有" -"用。" +"å½“ç”¨æˆ·åœæ¢æŒ‰ä¸‹åŠ¨ä½œäº‹ä»¶æ—¶ï¼Œè¿”å›ž[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·é‡Šæ”¾æŒ‰é’®" +"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n" +"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/Input.xml:234 -#, fuzzy msgid "" "Returns [code]true[/code] if you are pressing the action event. Note that if " "an action has multiple buttons assigned and more than one of them is " @@ -35300,37 +35500,37 @@ msgid "" "for [InputEventKey] and [InputEventMouseButton] events, and the direction " "for [InputEventJoypadMotion] events." msgstr "" -"如果您按下动作事件,则返回[code]true[/code]。请注æ„,如果为一个动作分é…了多个按" -"钮,并且按下了多个按钮,那么å³ä½¿ä»ç„¶æŒ‰ä¸‹åˆ†é…给该动作的æŸä¸ªå…¶ä»–按钮,释放一个按" -"钮也将释放该动作。" +"å¦‚æžœä½ æ£åœ¨æŒ‰ä¸‹åŠ¨ä½œäº‹ä»¶ï¼Œè¿”å›ž[code]true[/code]。请注æ„,如果一个动作有多个分é…" +"çš„æŒ‰é’®ï¼Œå¹¶ä¸”ä¸æ¢ä¸€ä¸ªè¢«æŒ‰ä¸‹ï¼Œé‡Šæ”¾ä¸€ä¸ªæŒ‰é’®å°†é‡Šæ”¾è¿™ä¸ªåŠ¨ä½œï¼Œå³ä½¿å…¶ä»–分é…给这个动" +"作的按钮ä»ç„¶è¢«æŒ‰ä¸‹ã€‚\n" +"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/Input.xml:243 -#, fuzzy msgid "" "Returns [code]true[/code] if you are pressing the joypad button (see [enum " "JoystickList])." -msgstr "如果按下æ“çºµæ†æŒ‰é’®ï¼Œåˆ™è¿”回[code]true[/code](请å‚阅[JoystickList])。" +msgstr "" +"å¦‚æžœä½ æ£åœ¨æŒ‰ä¸‹æ‰‹æŸ„按钮,则返回[code]true[/code],å‚阅[enum JoystickList]。" #: doc/classes/Input.xml:250 -#, fuzzy msgid "" "Returns [code]true[/code] if the system knows the specified device. This " "means that it sets all button and axis indices exactly as defined in [enum " "JoystickList]. Unknown joypads are not expected to match these constants, " "but you can still retrieve events from them." msgstr "" -"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§" -"JoystickListä¸çš„å®šä¹‰è®¾ç½®æ‰€æœ‰æŒ‰é’®å’Œè½´ç´¢å¼•ã€‚æœªçŸ¥çš„æ¸¸æˆæ‰‹æŸ„ä¸å¸Œæœ›ä¸Žè¿™äº›å¸¸é‡åŒ¹" -"é…,但是您ä»ç„¶å¯ä»¥ä»Žä¸æ£€ç´¢äº‹ä»¶ã€‚" +"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§[enum " +"JoystickList]ä¸çš„定义设置所有按钮和轴的索引。未知的æ“纵æ†å¯èƒ½ä¸ä¼šä¸Žè¿™äº›å¸¸æ•°ç›¸" +"匹é…ï¼Œä½†ä½ ä»ç„¶å¯ä»¥ä»Žä¸æ£€ç´¢äº‹ä»¶ã€‚" #: doc/classes/Input.xml:257 -#, fuzzy msgid "" "Returns [code]true[/code] if you are pressing the key. You can pass a [enum " "KeyList] constant." msgstr "" -"å¦‚æžœä½ æŒ‰å½“å‰é”®ç›˜å¸ƒå±€ä¸çš„键,则返回 [code]true[/code]。您å¯ä»¥ä¼ å…¥ [enum " -"KeyList] 常é‡å‚数。" +"å¦‚æžœä½ æ£åœ¨æŒ‰åŽ‹è¯¥é”®ï¼Œåˆ™è¿”å›ž[code]true[/code]ã€‚ä½ å¯ä»¥ä¼ 递[enum KeyList]常é‡ã€‚" #: doc/classes/Input.xml:264 msgid "" @@ -35362,8 +35562,8 @@ msgid "" "Input.parse_input_event(a)\n" "[/codeblock]" msgstr "" -"呿¸¸æˆæä¾›[InputEvent]。å¯ç”¨äºŽä»Žä»£ç ä¸äººå·¥è§¦å‘输入事件。也会产生[Node." -"_input()]调用。\n" +"呿¸¸æˆæä¾› [InputEvent]。å¯ç”¨äºŽä»Žä»£ç 人为触å‘输入事件。也会产生 [method Node." +"_input()] 调用。\n" "例:\n" "[codeblock]\n" "var a = InputEventAction.new()\n" @@ -35385,6 +35585,9 @@ msgid "" "[b]Note:[/b] This value can be immediately overwritten by the hardware " "sensor value on Android and iOS." msgstr "" +"è®¾ç½®åŠ é€Ÿåº¦ä¼ æ„Ÿå™¨çš„åŠ é€Ÿåº¦å€¼ã€‚å¯ä»¥ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ 感器的设备上进行调试,例如在" +"PC上的编辑器ä¸ã€‚\n" +"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ 感器的值所覆盖。" #: doc/classes/Input.xml:313 msgid "" @@ -35432,6 +35635,9 @@ msgid "" "[b]Note:[/b] This value can be immediately overwritten by the hardware " "sensor value on Android and iOS." msgstr "" +"è®¾ç½®åŠ é€Ÿåº¦ä¼ æ„Ÿå™¨çš„é‡åŠ›å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ 感器的设备上进行调试,例如在PC上" +"的编辑器ä¸ã€‚\n" +"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ 感器的值覆盖。" #: doc/classes/Input.xml:341 msgid "" @@ -35441,6 +35647,9 @@ msgid "" "[b]Note:[/b] This value can be immediately overwritten by the hardware " "sensor value on Android and iOS." msgstr "" +"è®¾ç½®é™€èžºä»ªä¼ æ„Ÿå™¨çš„æ—‹è½¬é€ŸçŽ‡å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ 感器的设备上进行调试,例如在" +"PC上的编辑器ä¸ã€‚\n" +"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ 感器的值所覆盖。" #: doc/classes/Input.xml:349 msgid "" @@ -35450,6 +35659,9 @@ msgid "" "[b]Note:[/b] This value can be immediately overwritten by the hardware " "sensor value on Android and iOS." msgstr "" +"设置ç£åŠ›ä¼ æ„Ÿå™¨çš„ç£åœºå€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ 感器的设备上进行调试,例如在PC上的" +"编辑器ä¸ã€‚\n" +"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ 感器的值所覆盖。" #: doc/classes/Input.xml:357 msgid "Sets the mouse mode. See the constants for more information." @@ -35500,14 +35712,14 @@ msgid "Stops the vibration of the joypad." msgstr "åœæ¢æ¸¸æˆæ‰‹æŸ„的振动。" #: doc/classes/Input.xml:390 -#, fuzzy msgid "" "Vibrate Android and iOS devices.\n" "[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export " "settings. iOS does not support duration." msgstr "" -"振动Androidå’ŒiOS设备。\n" -"[b]注æ„:[/b]在导出设置时,它需è¦Androidçš„VIBRATEæƒé™ï¼ŒiOS䏿”¯æŒæŒç»æ—¶é—´ã€‚" +"振动 Android å’Œ iOS 设备。\n" +"[b]注æ„:[/b]在导出设置时,它需è¦[code]VIBRATE[/code]安å“çš„æƒé™ã€‚ iOS䏿”¯æŒæŒ" +"ç»æ—¶é—´ã€‚" #: doc/classes/Input.xml:398 msgid "Sets the mouse position to the specified vector." @@ -35532,6 +35744,9 @@ msgid "" "[b]Note:[/b] If you want to process the mouse's movement in this mode, you " "need to use [member InputEventMouseMotion.relative]." msgstr "" +"æ•èŽ·é¼ æ ‡ã€‚é¼ æ ‡å°†è¢«éšè—,其ä½ç½®è¢«é”定在å±å¹•çš„ä¸å¿ƒã€‚\n" +"[b]注æ„:[/b] å¦‚æžœä½ æƒ³åœ¨è¿™ç§æ¨¡å¼ä¸‹å¤„ç†é¼ æ ‡çš„ç§»åŠ¨ï¼Œéœ€è¦ä½¿ç”¨[member " +"InputEventMouseMotion.relative]。" #: doc/classes/Input.xml:423 msgid "Makes the mouse cursor visible but confines it to the game window." @@ -35666,7 +35881,8 @@ msgstr "å„ç§è¾“入事件的基类。å‚阅[method Node._input]。" #: doc/classes/InputEventScreenTouch.xml:11 #: doc/classes/InputEventWithModifiers.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent.html" #: doc/classes/InputEvent.xml:20 msgid "" @@ -35686,7 +35902,6 @@ msgid "Returns a [String] representation of the event." msgstr "返回事件的一个[String]å—符串表示。" #: doc/classes/InputEvent.xml:35 -#, fuzzy msgid "" "Returns a value between 0.0 and 1.0 depending on the given actions' state. " "Useful for getting the value of events of type [InputEventJoypadMotion].\n" @@ -35694,8 +35909,11 @@ msgid "" "modifiers for [InputEventKey] and [InputEventMouseButton] events, and the " "direction for [InputEventJoypadMotion] events." msgstr "" -"æ ¹æ®ç»™å®šçš„动作状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]ç±»" -"型的事件的值很有用。" +"æ ¹æ®ç»™å®šçš„动作的状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]" +"类型的事件值时,很有用。\n" +"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/InputEvent.xml:44 msgid "" @@ -35705,9 +35923,12 @@ msgid "" "modifiers for [InputEventKey] and [InputEventMouseButton] events, and the " "direction for [InputEventJoypadMotion] events." msgstr "" +"如果这个输入事件与任何类型的预定义动作匹é…,则返回[code]true[/code]。\n" +"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/InputEvent.xml:54 -#, fuzzy msgid "" "Returns [code]true[/code] if the given action is being pressed (and is not " "an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is " @@ -35717,12 +35938,14 @@ msgid "" "modifiers for [InputEventKey] and [InputEventMouseButton] events, and the " "direction for [InputEventJoypadMotion] events." msgstr "" -"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª" -"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与" -"[InputEventMouseMotion]或[InputEventScreenDrag]ç±»åž‹çš„äº‹ä»¶æ— å…³ã€‚" +"如果给定的动作被按下,则返回[code]true[/code]ï¼Œå¹¶ä¸”ä¸æ˜¯ [InputEventKey] 事件" +"çš„å›žæ˜¾äº‹ä»¶ï¼Œé™¤éž [code]allow_echo[/code] 是 [code]true[/code]。与" +"[InputEventMouseMotion]或[InputEventScreenDrag]ç±»åž‹çš„äº‹ä»¶æ— å…³ã€‚\n" +"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/InputEvent.xml:63 -#, fuzzy msgid "" "Returns [code]true[/code] if the given action is released (i.e. not " "pressed). Not relevant for events of type [InputEventMouseMotion] or " @@ -35731,9 +35954,11 @@ msgid "" "modifiers for [InputEventKey] and [InputEventMouseButton] events, and the " "direction for [InputEventJoypadMotion] events." msgstr "" -"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª" -"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与" -"[InputEventMouseMotion]或[InputEventScreenDrag]ç±»åž‹çš„äº‹ä»¶æ— å…³ã€‚" +"å¦‚æžœç»™å®šçš„åŠ¨ä½œè¢«é‡Šæ”¾ï¼Œå³æœªè¢«æŒ‰ä¸‹ï¼Œåˆ™è¿”回[code]true[/code]。与" +"[InputEventMouseMotion]或[InputEventScreenDrag]ç±»åž‹çš„äº‹ä»¶æ— å…³ã€‚\n" +"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]å’Œ" +"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方" +"å‘。" #: doc/classes/InputEvent.xml:70 msgid "" @@ -35769,6 +35994,13 @@ msgid "" "modifiers for [InputEventKey] and [InputEventMouseButton] events, and the " "direction for [InputEventJoypadMotion] events." msgstr "" +"如果指定的 [code]event[/code] 与æ¤äº‹ä»¶åŒ¹é…,则返回 [code]true[/code]。仅对动" +"作事件有效,å³é”® ([InputEventKey])ã€æŒ‰é’® ([InputEventMouseButton] 或 " +"[InputEventJoypadButton])ã€è½´ [InputEventJoypadMotion] 或动作 " +"([InputEventAction]) 事件。\n" +"如果 [code]exact_match[/code] 是 [code]false[/code],它会忽略 " +"[InputEventKey] å’Œ [InputEventMouseButton] äº‹ä»¶çš„è¾“å…¥ä¿®é¥°ç¬¦ï¼Œä»¥åŠ " +"[InputEventJoypadMotion] 事件的方å‘。" #: doc/classes/InputEvent.xml:99 msgid "" @@ -35811,7 +36043,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions" +"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent." +"html#actions" #: doc/classes/InputEventAction.xml:18 msgid "The action's name. Actions are accessed via this [String]." @@ -35826,15 +36059,14 @@ msgstr "" "被释放。" #: doc/classes/InputEventAction.xml:24 -#, fuzzy msgid "" "The action's strength between 0 and 1. This value is considered as equal to " "0 if pressed is [code]false[/code]. The event strength allows faking analog " "joypad motion events, by specifying how strongly the joypad axis is bent or " "pressed." msgstr "" -"该动作的强度在0å’Œ1之间。如果按下的是[code]false[/code],则该值被视为ç‰äºŽ0。事" -"件强度å…许通过精确控制手柄轴弯曲或按下的强度æ¥ä¼ªé€ 模拟手柄è¿åŠ¨äº‹ä»¶ã€‚" +"动作的强度介于 0 å’Œ 1 之间。如果按下的是 [code]false[/code],则该值被视为ç‰" +"于 0。事件强度å…许通过指定手柄轴弯曲或按压的强度æ¥ä»¿é€ 模拟手柄è¿åŠ¨äº‹ä»¶ã€‚" #: doc/classes/InputEventGesture.xml:4 msgid "Base class for touch control gestures." @@ -35862,9 +36094,8 @@ msgstr "" "[InputEventJoypadMotion]。" #: doc/classes/InputEventJoypadButton.xml:16 -#, fuzzy msgid "Button identifier. One of the [enum JoystickList] button constants." -msgstr "æŒ‰é’®æ ‡è¯†ç¬¦ã€‚æžšä¸¾[enum JoyButtonList] 按钮常é‡ä¹‹ä¸€ã€‚" +msgstr "æŒ‰é’®æ ‡è¯†ç¬¦ã€‚ [enum JoystickList] 按钮常é‡ä¹‹ä¸€ã€‚" #: doc/classes/InputEventJoypadButton.xml:19 msgid "" @@ -35897,9 +36128,8 @@ msgid "" msgstr "å˜å‚¨å…³äºŽæ“纵æ†è¿åŠ¨çš„ä¿¡æ¯ã€‚一个[InputEventJoypadMotion]一次代表一个轴。" #: doc/classes/InputEventJoypadMotion.xml:16 -#, fuzzy msgid "Axis identifier. Use one of the [enum JoystickList] axis constants." -msgstr "è½´çš„æ ‡è¯†ç¬¦ã€‚ä½¿ç”¨[enum JoyAxisList]轴常数ä¸çš„一个。" +msgstr "è½´æ ‡è¯†ç¬¦ã€‚ä½¿ç”¨ [enum JoystickList] 轴常é‡ä¹‹ä¸€ã€‚" #: doc/classes/InputEventJoypadMotion.xml:19 msgid "" @@ -35921,7 +36151,6 @@ msgid "" msgstr "å˜å‚¨é”®ç›˜ä¸Šçš„æŒ‰é”®ã€‚æ”¯æŒæŒ‰é”®ã€æŒ‰é”®é‡Šæ”¾å’Œ[member echo]回显事件。" #: doc/classes/InputEventKey.xml:16 -#, fuzzy msgid "" "Returns the physical scancode combined with modifier keys such as " "[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n" @@ -35930,14 +36159,13 @@ msgid "" "get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is " "the [InputEventKey]." msgstr "" -"返回与修饰键(如[kbd]Shift[/kbd]或[kbd]Alt[/kbd])相结åˆçš„物ç†é”®ç 。也请å‚阅" +"返回与修改键组åˆçš„物ç†é”®ç ,例如 [code]Shift[/code] 或 [code]Alt[/code]。å‚阅" "[InputEventWithModifiers]。\n" -"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„[InputEventKey]的人类å¯è¯»è¡¨ç¤ºï¼Œä½¿ç”¨[code]OS." -"get_keycode_string(event.get_physical_keycode_with_modifiers())[/code],其ä¸" -"[code]event[/code] 是[InputEventKey]。" +"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS." +"get_scancode_string(event.get_physical_scancode_with_modifiers())[/code] å…¶" +"ä¸ [code]event[/code] 是 [InputEventKey]。" #: doc/classes/InputEventKey.xml:23 -#, fuzzy msgid "" "Returns the scancode combined with modifier keys such as [code]Shift[/code] " "or [code]Alt[/code]. See also [InputEventWithModifiers].\n" @@ -35946,10 +36174,10 @@ msgid "" "get_scancode_with_modifiers())[/code] where [code]event[/code] is the " "[InputEventKey]." msgstr "" -"返回与修饰键相结åˆçš„é”®ç ,如[kbd]Shift[/kbd]或[kbd]Alt[/kbd]。å¦è¯·å‚阅带修饰" -"符的输入[InputEventWithModifiers]。\n" -"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„äººç±»å¯è¯»çš„ [InputEventKey] 表示,请使用 [code]OS." -"get_keycode_string(event.get_keycode_with_modifiers())[/code] å…¶ä¸ " +"返回与 [code]Shift[/code] 或 [code]Alt[/code] ç‰ä¿®é¥°é”®ç»„åˆçš„é”®ç 。å‚阅" +"[InputEventWithModifiers]。\n" +"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS." +"get_scancode_string(event.get_scancode_with_modifiers())[/code] å…¶ä¸ " "[code]event[/code] 是 [InputEventKey]。" #: doc/classes/InputEventKey.xml:30 @@ -35961,7 +36189,6 @@ msgstr "" "键。" #: doc/classes/InputEventKey.xml:33 -#, fuzzy msgid "" "Key physical scancode, which corresponds to one of the [enum KeyList] " "constants. Represent the physical location of a key on the 101/102-key US " @@ -35970,10 +36197,11 @@ msgid "" "get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] " "is the [InputEventKey]." msgstr "" -"键的物ç†é”®ç ,对应于[enum KeyList]常é‡ä¸çš„一个。代表101/102键美国QWERTY键盘上" -"一个键的物ç†ä½ç½®ã€‚\n" -"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event." -"keycode)[/code],其ä¸[code]event[/code]是[InputEventKey]。" +"键的物ç†ç¼–ç ,对应于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示 101/102 键美国 QWERTY 键盘" +"上按键的物ç†ä½ç½®ã€‚\n" +"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS." +"get_scancode_string(event.physical_scancode)[/code] å…¶ä¸ [code]event[/code] " +"是 [InputEventKey]。" #: doc/classes/InputEventKey.xml:37 msgid "" @@ -35984,7 +36212,6 @@ msgstr "" "被释放。" #: doc/classes/InputEventKey.xml:40 -#, fuzzy msgid "" "The key scancode, which corresponds to one of the [enum KeyList] constants. " "Represent key in the current keyboard layout.\n" @@ -35992,20 +36219,19 @@ msgid "" "get_scancode_string(event.scancode)[/code] where [code]event[/code] is the " "[InputEventKey]." msgstr "" -"键的键ç ,对应于[enum KeyList]常é‡ä¸çš„一个。代表当å‰é”®ç›˜å¸ƒå±€ä¸çš„键。\n" -"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event." -"keycode)[/code],其ä¸[code]event[/code]是[InputEventKey]。" +"é”®ç ,对应于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示当å‰é”®ç›˜å¸ƒå±€ä¸çš„键。\n" +"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS." +"get_scancode_string(event.scancode)[/code] å…¶ä¸ [code]event[/code] 是 " +"[InputEventKey]。" #: doc/classes/InputEventKey.xml:44 -#, fuzzy msgid "" "The key Unicode identifier (when relevant). Unicode identifiers for the " "composite characters and complex scripts may not be available unless IME " "input mode is active. See [method OS.set_ime_active] for more information." msgstr "" -"键的 Unicode æ ‡è¯†ç¬¦ï¼ˆç›¸å…³æ—¶ï¼‰ã€‚é™¤éžIME输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¯èƒ½æ— 法为å¤" -"åˆå—ç¬¦å’Œå¤æ‚脚本æä¾› Unicode æ ‡è¯†ç¬¦ã€‚æœ‰å…³æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅 [方法Window." -"set_ime_active] 。" +"Unicodeé”®æ ‡è¯†ç¬¦ï¼ˆå¦‚æžœç›¸å…³ï¼‰ã€‚é™¤éž IME 输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¤åˆå—符和å¤" +"æ‚脚本的 Unicode æ ‡è¯†ç¬¦å¯èƒ½æ— 法使用。更多信æ¯å‚阅[method OS.set_ime_active]。" #: doc/classes/InputEventMouse.xml:4 msgid "Base input event type for mouse events." @@ -36052,7 +36278,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/inputs/" "mouse_and_input_coordinates.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/inputs/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/" "mouse_and_input_coordinates.html" #: doc/classes/InputEventMouseButton.xml:16 @@ -36160,7 +36386,10 @@ msgid "The drag position." msgstr "拖拽的ä½ç½®ã€‚" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +#, fuzzy +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "相对于其起始ä½ç½®çš„æ‹–动ä½ç½®ã€‚" #: doc/classes/InputEventScreenDrag.xml:25 @@ -36251,7 +36480,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap" +"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent." +"html#inputmap" #: doc/classes/InputMap.xml:18 msgid "" @@ -36776,6 +37006,9 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回与列表相关的[Object]ID。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³éš" +"è—它或它的任æ„å节点,请使用其的 [member CanvasItem.visible] 属性。" #: doc/classes/ItemList.xml:131 msgid "Returns [code]true[/code] if one or more items are selected." @@ -37133,7 +37366,7 @@ msgstr "" "è¿™å…许与嵌入页é¢äº¤äº’或调用第三方 JavaScript API。\n" "[b]注æ„:[/b] å¯ä»¥åœ¨æž„建时ç¦ç”¨æ¤å•例以æé«˜å®‰å…¨æ€§ã€‚默认情况下,å¯ç”¨ " "JavaScript å•例。官方导出模æ¿ä¹Ÿå¯ç”¨äº† JavaScript å•例。有关详细信æ¯ï¼Œè¯·å‚阅文" -"æ¡£ä¸çš„ [url=https://docs.godotengine.org/en/3.4/development/compiling/" +"æ¡£ä¸çš„ [url=https://docs.godotengine.org/zh_CN/stable/development/compiling/" "compiling_for_web.html]为 Webå¹³å°ç¼–译[/url]。" #: doc/classes/JavaScript.xml:11 @@ -37141,7 +37374,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/workflow/export/" "exporting_for_web.html#calling-javascript-from-script" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/export/" "exporting_for_web.html#calling-javascript-from-script" #: doc/classes/JavaScript.xml:19 @@ -37150,6 +37383,8 @@ msgid "" "JavaScript. The reference must be kept until the callback happens, or it " "won't be called at all. See [JavaScriptObject] for usage." msgstr "" +"创建脚本函数的引用,å¯ä»¥è¢«JavaScriptç”¨ä½œå›žè°ƒã€‚è¿™ä¸ªå¼•ç”¨å¿…é¡»ä¿æŒåˆ°å›žè°ƒå‘生为" +"æ¢ï¼Œå¦åˆ™å®ƒå°±ä¸ä¼šè¢«è°ƒç”¨ã€‚使用方法å‚阅[JavaScriptObject]。" #: doc/classes/JavaScript.xml:26 msgid "" @@ -37157,6 +37392,8 @@ msgid "" "[code]object[/code] must a valid property of the JavaScript [code]window[/" "code]. See [JavaScriptObject] for usage." msgstr "" +"使用[code]new[/code]æž„é€ å‡½æ•°åˆ›å»ºæ–°çš„JavaScript对象。[code]object[/code]必须是" +"JavaScript[code]window[/code]的有效属性。使用方法å‚阅[JavaScriptObject]。" #: doc/classes/JavaScript.xml:35 msgid "" @@ -37171,6 +37408,14 @@ msgid "" "[b]Note:[/b] Browsers might ask the user for permission or block the " "download if multiple download requests are made in a quick succession." msgstr "" +"æç¤ºç”¨æˆ·ä¸‹è½½ä¸€ä¸ªåŒ…嫿Œ‡å®š[code]buffer[/code]缓冲区的文件。该文件将具有给定的" +"[code]name[/code]å’Œ[code]mime[/code]类型。\n" +"[b]注æ„:[/b] æµè§ˆå™¨å¯èƒ½ä¼šæ ¹æ®æ–‡ä»¶[code]name[/code]的扩展å,覆盖所æä¾›çš„" +"[url=https://en.wikipedia.org/wiki/Media_type]MIME类型[/url]。\n" +"[b]注æ„:[/b] 如果[method download_buffer]䏿˜¯ç”±ç”¨æˆ·äº¤äº’调用,如点击按钮,æµ" +"览器å¯èƒ½ä¼šé˜»æ¢ä¸‹è½½ã€‚\n" +"[b]注æ„:[/b] å¦‚æžœå¿«é€Ÿè¿žç»æå‡ºå¤šä¸ªä¸‹è½½è¯·æ±‚ï¼Œæµè§ˆå™¨å¯èƒ½ä¼šè¦æ±‚ç”¨æˆ·åŒæ„或阻æ¢ä¸‹" +"载。" #: doc/classes/JavaScript.xml:46 msgid "" @@ -37195,11 +37440,13 @@ msgid "" "which will contain the JavaScript [code]arguments[/code]. See " "[JavaScriptObject] for usage." msgstr "" +"返回å¯ä»¥è¢«è„šæœ¬ä½¿ç”¨çš„JavaScript对象的接å£ã€‚这个[code]interface[/code]必须是" +"JavaScript[code]window[/code]的一个有效属性。回调必须接å—一个[Array]傿•°ï¼Œå®ƒ" +"将包å«JavaScript [code]arguments[/code]。å‚阅[JavaScriptObject]的用法。" #: doc/classes/JavaScriptObject.xml:4 -#, fuzzy msgid "A wrapper class for native JavaScript objects." -msgstr "所有[i]scene[/i]对象的基类。" +msgstr "本地JavaScript对象的å°è£…类。" #: doc/classes/JavaScriptObject.xml:7 msgid "" @@ -37239,13 +37486,47 @@ msgid "" "[/codeblock]\n" "[b]Note:[/b] Only available in the HTML5 platform." msgstr "" +"JavaScriptObject用于与通过[method JavaScript.get_interface]ã€[method " +"JavaScript.create_object]或[method JavaScript.create_callback]检索或创建的" +"JavaScript对象交互。\n" +"例:\n" +"[codeblock]\n" +"extends Node\n" +"\n" +"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # " +"This reference must be kept\n" +"var console = JavaScript.get_interface(\"console\")\n" +"\n" +"func _init():\n" +" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new " +"ArrayBuffer(10)\n" +" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n" +" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new " +"Uint8Array(buf)\n" +" uint8arr[1] = 255\n" +" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n" +" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, " +"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n" +"\n" +" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n" +" JavaScript.get_interface(\"Array\").from(uint8arr)." +"forEach(_my_js_callback)\n" +"\n" +"func myCallback(args):\n" +" # Will be called with the parameters passed to the \"forEach\" callback\n" +" # [0, 0, [JavaScriptObject:1173]]\n" +" # [255, 1, [JavaScriptObject:1173]]\n" +" # ...\n" +" # [0, 9, [JavaScriptObject:1180]]\n" +" print(args)\n" +"[/codeblock]\n" +"[b]注æ„:[/b] åªåœ¨HTML5å¹³å°ä¸Šå¯ç”¨ã€‚" #: doc/classes/JNISingleton.xml:4 -#, fuzzy msgid "" "Singleton that connects the engine with Android plugins to interface with " "native Android code." -msgstr "在 HTML5 导出ä¸å°†å¼•擎与æµè§ˆå™¨çš„ JavaScript 上下文连接的å•例。" +msgstr "将引擎与 Android æ’件连接起æ¥ä»¥ä¸ŽåŽŸç”Ÿ Android 代ç 交互的å•例。" #: doc/classes/JNISingleton.xml:7 msgid "" @@ -37256,14 +37537,19 @@ msgid "" "Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more " "information." msgstr "" +"JNISingleton 仅在 Android 导出ä¸å®žçŽ°ã€‚å®ƒç”¨äºŽä»Žç”¨ Java 或 Kotlin 编写的 " +"Android æ’件调用方法和连接信å·ã€‚方法和信å·å¯ä»¥è¢«è°ƒç”¨å¹¶è¿žæŽ¥åˆ° JNISingleton,就" +"好åƒå®ƒæ˜¯ä¸€ä¸ªèŠ‚ç‚¹ä¸€æ ·ã€‚æœ‰å…³æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅 [url=https://en.wikipedia.org/" +"wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] Java 本机" +"接å£ç»´åŸºç™¾ç§‘。" #: doc/classes/JNISingleton.xml:10 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/android/" +"android_plugin.html" #: doc/classes/Joint.xml:4 msgid "Base class for all 3D joints." @@ -37389,6 +37675,34 @@ msgid "" "}\n" "[/codeblock]" msgstr "" +"å°† [Variant] var 转æ¢ä¸º JSON 文本并返回结果。用于åºåˆ—化数æ®ä»¥é€šè¿‡ç½‘络å˜å‚¨æˆ–å‘" +"é€ã€‚\n" +"[b]注:[/b] JSON 规范没有定义 integer 或 float 类型,而åªå®šä¹‰äº† [i]number[/" +"i] ç±»åž‹ã€‚å› æ¤ï¼Œå°† Variant 转æ¢ä¸º JSON 文本会将所有数值转æ¢ä¸º [float] 类型。\n" +"使用 [code]indent[/code] 傿•°æ¥ç¾Žè§‚地打å°è¾“出。\n" +"[b]示例输出:[/b]\n" +"[codeblock]\n" +"## JSON.print(my_dictionary)\n" +"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":" +"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":" +"\"value_1\"}]}\n" +"\n" +"## JSON.print(my_dictionary, \"\\t\")\n" +"{\n" +" \"name\": \"my_dictionary\",\n" +" \"version\": \"1.0.0\",\n" +" \"entities\": [\n" +" {\n" +" \"name\": \"entity_0\",\n" +" \"value\": \"value_0\"\n" +" },\n" +" {\n" +" \"name\": \"entity_1\",\n" +" \"value\": \"value_1\"\n" +" }\n" +" ]\n" +"}\n" +"[/codeblock]" #: doc/classes/JSONParseResult.xml:4 msgid "Data class wrapper for decoded JSON." @@ -37464,7 +37778,7 @@ msgstr "" #: doc/classes/JSONRPC.xml:4 msgid "A helper to handle dictionaries which look like JSONRPC documents." -msgstr "" +msgstr "用于处ç†çœ‹èµ·æ¥åƒJSONRPC文档的å—典的助手。" #: doc/classes/JSONRPC.xml:7 msgid "" @@ -37475,6 +37789,10 @@ msgid "" "standard on top of [Dictionary]; you will have to convert between a " "[Dictionary] and [JSON] with other functions." msgstr "" +"[url=https://www.jsonrpc.org/]JSON-RPC[/url]æ˜¯ä¸€ä¸ªæ ‡å‡†ï¼Œå®ƒå°†ä¸€ä¸ªæ–¹æ³•è°ƒç”¨åŒ…è£…" +"在一个[JSON]对象ä¸ã€‚è¯¥å¯¹è±¡æœ‰ä¸€ä¸ªç‰¹å®šçš„ç»“æž„ï¼Œå¹¶æ ‡è¯†å‡ºå“ªä¸ªæ–¹æ³•è¢«è°ƒç”¨ï¼Œè¯¥å‡½æ•°çš„" +"傿•°ï¼Œå¹¶æºå¸¦ä¸€ä¸ªIDæ¥è·Ÿè¸ªå“应。这个类在[Dictionary]ä¹‹ä¸Šå®žçŽ°äº†è¯¥æ ‡å‡†ï¼›ä½ å¿…é¡»ç”¨" +"其他函数在[Dictionary]å’Œ[JSON]之间进行转æ¢ã€‚" #: doc/classes/JSONRPC.xml:17 msgid "" @@ -37484,6 +37802,9 @@ msgid "" "- [code]params[/code]: An array or dictionary of parameters being passed to " "the method." msgstr "" +"返回JSON-RPC通知形å¼çš„å—典。通知是一次性的信æ¯ï¼Œä¸éœ€è¦æœ‰å“应。\n" +"- [code]method[/code]:被调用的方法的å称。\n" +"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或å—典。" #: doc/classes/JSONRPC.xml:28 msgid "" @@ -37496,6 +37817,11 @@ msgid "" "- [code]id[/code]: Uniquely identifies this request. The server is expected " "to send a response with the same ID." msgstr "" +"以JSON-RPC请求的形å¼è¿”回å—典。请求被å‘é€åˆ°æœåŠ¡å™¨ï¼Œå¹¶æœŸæœ›å¾—åˆ°å“应。ID å—æ®µç”¨äºŽ" +"æœåŠ¡å™¨æŒ‡å®šå®ƒæ£åœ¨å“应的确切请求。\n" +"- [code]method[/code]:被调用的方法的å称。\n" +"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或å—典。\n" +"- [code]id[/code]:å”¯ä¸€æ ‡è¯†æ¤è¯·æ±‚。æœåŠ¡å™¨åº”å‘é€å…·æœ‰ç›¸åŒ ID çš„å“应。" #: doc/classes/JSONRPC.xml:39 msgid "" @@ -37505,6 +37831,10 @@ msgid "" "- [code]result[/code]: The return value of the function which was called.\n" "- [code]id[/code]: The ID of the request this response is targeted to." msgstr "" +"当æœåŠ¡å™¨æŽ¥æ”¶å¹¶å¤„ç†è¯·æ±‚时,它应该å‘é€å“åº”ã€‚å¦‚æžœä½ ä¸æƒ³è¦å›žå¤ï¼Œé‚£ä¹ˆä½ 需è¦å‘é€é€š" +"知。\n" +"- [code]result[/code]:被调用函数的返回值。\n" +"- [code]id[/code]:æ¤å“应针对的请求的 ID。" #: doc/classes/JSONRPC.xml:50 msgid "" @@ -37514,6 +37844,11 @@ msgid "" "- [code]message[/code]: A custom message about this error.\n" "- [code]id[/code]: The request this error is a response to." msgstr "" +"创建å“应,指示先å‰çš„回å¤ä»¥æŸç§æ–¹å¼å¤±è´¥ã€‚\n" +"- [code]code[/code]:这是哪ç§é”™è¯¯å¯¹åº”的错误代ç 。å‚阅 [enum ErrorCode] 常" +"é‡ã€‚\n" +"- [code]message[/code]:关于æ¤é”™è¯¯çš„自定义消æ¯ã€‚\n" +"- [code]id[/code]:这个错误是对请求的å“应。" #: doc/classes/JSONRPC.xml:61 msgid "" @@ -37526,19 +37861,24 @@ msgid "" "[code]action[/code]: The action to be run, as a Dictionary in the form of a " "JSON-RPC request or notification." msgstr "" +"给定采用 JSON-RPC 请求形å¼çš„å—典:解压请求并è¿è¡Œå®ƒã€‚通过查看å为 \"method\" " +"çš„å—æ®µå¹¶åœ¨ JSONRPC å¯¹è±¡ä¸æŸ¥æ‰¾ç‰æ•ˆå‘½å的函数æ¥è§£æžæ–¹æ³•。如果找到,则调用该方" +"法。\n" +"è¦æ·»åŠ æ–°çš„å—æ”¯æŒæ–¹æ³•,请扩展 JSONRPC ç±»å¹¶åœ¨ä½ çš„å类上调用 [method " +"process_action]。\n" +"[code]action[/code]:è¦è¿è¡Œçš„动作,作为 JSON-RPC 请求或通知形å¼çš„å—典。" #: doc/classes/JSONRPC.xml:86 msgid "" "A method call was requested but no function of that name existed in the " "JSONRPC subclass." -msgstr "" +msgstr "请求了方法调用,但 JSONRPC åç±»ä¸ä¸å˜åœ¨è¯¥å称的函数。" #: doc/classes/KinematicBody.xml:4 msgid "Kinematic body 3D node." msgstr "3Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚" #: doc/classes/KinematicBody.xml:7 -#, fuzzy msgid "" "Kinematic bodies are special types of bodies that are meant to be user-" "controlled. They are not affected by physics at all; to other types of " @@ -37555,45 +37895,42 @@ msgid "" "while performing collision tests. This makes them really useful to implement " "characters that collide against a world, but don't require advanced physics." msgstr "" -"è¿åЍå¦å®žä½“是旨在由用户控制的特殊类型的实体。它们完全ä¸å—物ç†å½±å“;对于其他类" -"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n" +"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼ŒæŒ‡åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的" +"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“æ˜¯ä¸€æ ·çš„ã€‚ç„¶è€Œï¼Œå®ƒä»¬æœ‰ä¸¤ä¸ªä¸»è¦ç”¨é€”。\n" "[b]模拟è¿åŠ¨ï¼š[/b]å½“è¿™äº›ç‰©ä½“è¢«æ‰‹åŠ¨ç§»åŠ¨æ—¶ï¼Œæ— è®ºæ˜¯ä»Žä»£ç 还是从[AnimationPlayer]" -"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡" -"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的" -"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥ç‰ï¼‰éžå¸¸æœ‰ç”¨ã€‚\n" -"[b]è¿åЍå¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 " -"API([method move_and_collide] å’Œ [method move_and_slide] 方法)。这使得它们" -"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚" +"(将[member AnimationPlayer.playback_process_mode]设置为 \"physics\"),物ç†" +"å°†è‡ªåŠ¨ä¼°ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–AnimationPlayer控制的物" +"体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥ç‰ã€‚\n" +"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody也有一个API用于移动物体([method " +"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶æ‰§è¡Œç¢°æ’žæµ‹è¯•。这使得它" +"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚" #: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/" +"kinematic_character_2d.html" #: doc/classes/KinematicBody.xml:23 -#, fuzzy msgid "" "Returns [code]true[/code] if the specified [code]axis[/code] is locked. See " "also [member move_lock_x], [member move_lock_y] and [member move_lock_z]." msgstr "" -"如果指定的[code]axis[/code]被é”定,则返回[code]true[/code]。å‚阅[member " -"axis_lock_motion_x],[member axis_lock_motion_y]å’Œ[member " -"axis_lock_motion_z]。" +"如果指定的 [code]axis[/code] 被é”定,则返回 [code]true[/code]。å‚阅[member " +"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。" #: doc/classes/KinematicBody.xml:30 -#, fuzzy msgid "" "Returns the floor's collision angle at the last collision point according to " "[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This " "value is always positive and only valid after calling [method " "move_and_slide] and when [method is_on_floor] returns [code]true[/code]." msgstr "" -"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method " -"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰" -"效。" +"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为" +"[code]Vector3.UP[/code]。æ¤å€¼å§‹ç»ˆä¸ºæ£å€¼ï¼Œå¹¶ä¸”仅在调用 [method " +"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。" #: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28 msgid "" @@ -37618,15 +37955,14 @@ msgstr "" "效。" #: doc/classes/KinematicBody.xml:48 -#, fuzzy msgid "" "Returns a [KinematicCollision], which contains information about the latest " "collision that occurred during the last call to [method move_and_slide]." msgstr "" -"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。" +"返回 [KinematicCollision],其ä¸åŒ…嫿œ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 期间" +"å‘生的最新碰撞的信æ¯ã€‚" #: doc/classes/KinematicBody.xml:55 -#, fuzzy msgid "" "Returns a [KinematicCollision], which contains information about a collision " "that occurred during the last call to [method move_and_slide] or [method " @@ -37634,68 +37970,66 @@ msgid "" "single call to [method move_and_slide], you must specify the index of the " "collision in the range 0 to ([method get_slide_count] - 1)." msgstr "" -"返回[KinematicCollision3D],它包å«åœ¨æœ€åŽä¸€ä¸ª[method move_and_slide]调用期间å‘" -"生的碰撞的相关信æ¯ã€‚由于在[method move_and_slide]çš„å•个调用ä¸ï¼Œç‰©ä½“å¯èƒ½ä¼šå‘生" -"å¤šæ¬¡ç¢°æ’žï¼Œå› æ¤å¿…须在0到([method get_slide_count] - 1)的范围内指定碰撞的索引。" +"返回 [KinematicCollision],其ä¸åŒ…嫿œ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 " +"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ" +"用 [method move_and_slide] æ—¶å‘ç”Ÿå¤šæ¬¡ç¢°æ’žï¼Œå› æ¤ä½ 必须在 0 到 ([method " +"get_slide_count] - 1) 范围内指定碰撞的索引。" #: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59 -#, fuzzy msgid "" "Returns the number of times the body collided and changed direction during " "the last call to [method move_and_slide] or [method " "move_and_slide_with_snap]." msgstr "" -"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。" +"返回上次调用 [method move_and_slide] 或 [method move_and_slide_with_snap] 期" +"间物体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。" #: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65 -#, fuzzy msgid "" "Returns [code]true[/code] if the body collided with the ceiling on the last " "call of [method move_and_slide] or [method move_and_slide_with_snap]. " "Otherwise, returns [code]false[/code]." msgstr "" -"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或" -"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/" -"code]æ—¶æ‰æœ‰æ•ˆã€‚" +"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method " +"move_and_slide_with_snap] 时物体与天花æ¿å‘生碰撞,则返回 [code]true[/code]。" +"å¦åˆ™ï¼Œè¿”回 [code]false[/code]。" #: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71 -#, fuzzy msgid "" "Returns [code]true[/code] if the body collided with the floor on the last " "call of [method move_and_slide] or [method move_and_slide_with_snap]. " "Otherwise, returns [code]false[/code]." msgstr "" -"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method " -"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰" -"效。" +"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method " +"move_and_slide_with_snap] 时物体与地æ¿å‘生碰撞,则返回 [code]true[/code]。å¦" +"则,返回 [code]false[/code]。" #: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77 -#, fuzzy msgid "" "Returns [code]true[/code] if the body collided with a wall on the last call " "of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, " "returns [code]false[/code]." msgstr "" -"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或" -"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/" -"code]æ—¶æ‰æœ‰æ•ˆã€‚" +"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method " +"move_and_slide_with_snap] 时物体与墙å£å‘生碰撞,则返回 [code]true[/code]。å¦" +"则,返回 [code]false[/code]。" #: doc/classes/KinematicBody.xml:89 #, fuzzy msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" -"沿ç€å‘é‡[code]rel_vec[/code]ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ç¢°æ’žï¼Œå®ƒå°†åœæ¢ã€‚返回" -"[KinematicCollision2D],其ä¸åŒ…嫿œ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n" -"如果[code]test_only[/code]为[code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šæä¾›å¯èƒ½çš„" -"碰撞信æ¯ã€‚" +"沿å‘é‡ [code]rel_vec[/code] ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç¢°æ’žï¼Œç‰©ä½“ä¼šåœæ¢ã€‚返回 " +"[KinematicCollision],其ä¸åŒ…嫿œ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n" +"如果 [code]test_only[/code] 是 [code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šç»™å‡ºå¯" +"能å‘生的碰撞信æ¯ã€‚" #: doc/classes/KinematicBody.xml:102 -#, fuzzy msgid "" "Moves the body along a vector. If the body collides with another, it will " "slide along the other body rather than stop immediately. If the other body " @@ -37732,28 +38066,30 @@ msgid "" "automatically added to the body motion. If a collision occurs due to the " "platform's motion, it will always be first in the slide collisions." msgstr "" -"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¯¥ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨ï¼Œè€Œä¸æ˜¯ç«‹" -"å³åœæ¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody3D]或[RigidBody3D],它也会被å¦ä¸€ä¸ªç‰©ä½“" -"çš„è¿åŠ¨æ‰€å½±å“ã€‚ä½ å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n" +"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸" +"是立å³åœæ¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody]或[RigidBody],它也会被å¦ä¸€ä¸ªç‰©ä½“" +"çš„è¿åŠ¨æ‰€å½±å“ã€‚ä½ å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n" "这个方法应该在[method Node._physics_process]ä¸ä½¿ç”¨ï¼Œæˆ–者在被[method Node." "_physics_process]调用的方法ä¸ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶ï¼Œè‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ¥éª¤çš„" -"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿçš„è¿è¡Œé€Ÿåº¦å°†ä¸æ£ç¡®ã€‚\n" -"[code]linear_velocity[/code] 是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method " -"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将其乘以[code]delta[/code]--物ç†å¼•" +"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ£ç¡®çš„速度è¿è¡Œã€‚\n" +"[code]linear_velocity[/code]是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method " +"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]把它乘以[code]delta[/code]--物ç†å¼•" "擎会处ç†åº”用速度。\n" "[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花" -"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],所有都被认为是墙。\n" +"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],一切都被认为是墙。\n" "如果[code]stop_on_slope[/code]是[code]true[/code]ï¼Œå½“ä½ åœ¨" -"[code]lineal_velocity[/code]ä¸åŒ…å«é‡åŠ›ï¼Œå¹¶ä¸”ç‰©ä½“é™æ¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘" +"[code]linear_velocity[/code]ä¸åŒ…å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘" "动。\n" -"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ¢å‰ï¼Œæœ€å¤šæ”¹å˜[code]max_slides[/code]次方å‘。\n" -"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度里,一个斜å¡" +"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ¢ã€‚\n" +"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡" "ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值ç‰äºŽ45度。\n" "如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动" -"[RigidBody3D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°æ‰€æœ‰ä¸Žå®ƒä»¬çš„碰撞。如果[code]false[/code]," -"它将åƒ[RigidBody3D]节点与[StaticBody3D]ä¸€æ ·äº’åŠ¨ã€‚\n" -"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生了滑动碰撞,则旋转和/或缩放。è¦" -"获得å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。" +"[RigidBody]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code],它" +"将与[RigidBody]节点åƒ[StaticBody]ä¸€æ ·äº¤äº’ã€‚\n" +"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·" +"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n" +"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„é€Ÿåº¦ä¼šè‡ªåŠ¨åŠ å…¥åˆ°ç‰©ä½“çš„è¿åЍä¸ã€‚如果由于平" +"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞ä¸çš„第一个。" #: doc/classes/KinematicBody.xml:124 msgid "" @@ -37770,40 +38106,41 @@ msgstr "" "code]或者使用[method move_and_slide]æ¥å®žçŽ°ã€‚" #: doc/classes/KinematicBody.xml:133 -#, fuzzy msgid "" "Locks or unlocks the specified [code]axis[/code] depending on the value of " "[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and " "[member move_lock_z]." msgstr "" "æ ¹æ®[code]lock[/code]的值,é”å®šæˆ–è§£é”æŒ‡å®šçš„[code]axis[/code]。å‚阅[member " -"axis_lock_motion_x], [member axis_lock_motion_y] å’Œ [member " -"axis_lock_motion_z]。" +"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。" #: doc/classes/KinematicBody.xml:142 +#, fuzzy msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" "在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žæƒ…å†µã€‚å®žé™…ä¸Šæ˜¯å°†èŠ‚ç‚¹çš„ä½ç½®ã€æ¯”例和旋转设置为给定" "çš„[Transform],然åŽå°è¯•沿ç€çŸ¢é‡[code]rel_vec[/code]移动物体。如果会å‘生碰撞," "返回[code]true[/code]。" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -37817,8 +38154,15 @@ msgid "" "scale to avoid visible jittering, or for stability with a stack of kinematic " "bodies." msgstr "" +"在è¿åŠ¨å‡½æ•°ä¸ç”¨äºŽç¢°æ’žæ¢å¤çš„é¢å¤–è¾¹è·ï¼Œå‚阅[method move_and_collide], [method " +"move_and_slide], [method move_and_slide_with_snap]。\n" +"如果物体离å¦ä¸€ä¸ªç‰©ä½“至少这么近,它就会认为它们æ£åœ¨å‘生碰撞,并在执行实际è¿åЍ" +"之å‰è¢«æŽ¨å¼€ã€‚\n" +"一个较高的值æ„味ç€å®ƒåœ¨æ£€æµ‹ç¢°æ’žæ—¶æ›´åŠ çµæ´»ï¼Œè¿™æœ‰åŠ©äºŽæŒç»æ£€æµ‹å¢™å£å’Œåœ°æ¿ã€‚\n" +"一个较低的值迫使碰撞算法使用更精确的检测,所以它å¯ä»¥ç”¨äºŽç‰¹åˆ«éœ€è¦ç²¾ç¡®æ€§çš„æƒ…" +"况,例如在éžå¸¸ä½Žçš„æ¯”例下é¿å…å¯è§çš„æŠ–动,或者用于è¿åŠ¨ä½“å †å 的稳定性。" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -37829,30 +38173,29 @@ msgstr "" "为è¿åŠ¨è®¾ç½®åŠ¨ç”»æ—¶ï¼Œä¾‹å¦‚åœ¨ç§»åŠ¨å¹³å°ä¸Šï¼Œè¿™ä¸ªåŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚è¯·[b]ä¸è¦[/b]与 [method " "move_and_slide] 或 [method move_and_collide] 函数一起使用。" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." -msgstr "" +msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_x]的别å。" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." -msgstr "" +msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_y]的别å。" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." -msgstr "" +msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_z]的别å。" #: doc/classes/KinematicBody2D.xml:4 msgid "Kinematic body 2D node." msgstr "2Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚" #: doc/classes/KinematicBody2D.xml:7 -#, fuzzy msgid "" "Kinematic bodies are special types of bodies that are meant to be user-" "controlled. They are not affected by physics at all; to other types of " @@ -37869,47 +38212,45 @@ msgid "" "while performing collision tests. This makes them really useful to implement " "characters that collide against a world, but don't require advanced physics." msgstr "" -"è¿åЍå¦å®žä½“是旨在由用户控制的特殊类型的实体。它们完全ä¸å—物ç†å½±å“;对于其他类" -"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n" -"[b]模拟è¿åŠ¨ï¼š[/b]å½“è¿™äº›ç‰©ä½“è¢«æ‰‹åŠ¨ç§»åŠ¨æ—¶ï¼Œæ— è®ºæ˜¯ä»Žä»£ç 还是从[AnimationPlayer]" -"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡" -"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的" -"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥ç‰ï¼‰éžå¸¸æœ‰ç”¨ã€‚\n" -"[b]è¿åЍå¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 " -"API([method move_and_collide] å’Œ [method move_and_slide] 方法)。这使得它们" -"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚" +"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼Œæ—¨åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的" +"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“ä¸€æ ·ã€‚ç„¶è€Œï¼Œå®ƒä»¬æœ‰ä¸¤ä¸ªä¸»è¦ç”¨é€”:\n" +"[b]模拟è¿åŠ¨ï¼š[/b]å½“è¿™äº›ç‰©ä½“è¢«æ‰‹åŠ¨ç§»åŠ¨æ—¶ï¼Œæ— è®ºæ˜¯ä»Žä»£ç 还是从" +"[AnimationPlayer],将[member AnimationPlayer.playback_process_mode]设置为 " +"\"physics\",物ç†å°†è‡ªåŠ¨è®¡ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦çš„ä¼°å€¼ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–" +"AnimationPlayer控制的物体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥ç‰ã€‚\n" +"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody2D也有一个API用于移动物体([method " +"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶è¿›è¡Œç¢°æ’žæµ‹è¯•。这使得它" +"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚" #: doc/classes/KinematicBody2D.xml:13 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/physics/" "using_kinematic_body_2d.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/physics/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/" "using_kinematic_body_2d.html" #: doc/classes/KinematicBody2D.xml:22 -#, fuzzy msgid "" "Returns the floor's collision angle at the last collision point according to " "[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This " "value is always positive and only valid after calling [method " "move_and_slide] and when [method is_on_floor] returns [code]true[/code]." msgstr "" -"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method " -"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰" -"效。" +"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为" +"[code]Vector2.UP[/code]。æ¤å€¼å§‹ç»ˆä¸ºæ£å€¼ï¼Œå¹¶ä¸”仅在调用 [method " +"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。" #: doc/classes/KinematicBody2D.xml:40 -#, fuzzy msgid "" "Returns a [KinematicCollision2D], which contains information about the " "latest collision that occurred during the last call to [method " "move_and_slide]." msgstr "" -"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。" +"返回[KinematicCollision2D],它包å«åœ¨æœ€åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]æ—¶å‘生" +"的最新碰撞信æ¯ã€‚" #: doc/classes/KinematicBody2D.xml:47 -#, fuzzy msgid "" "Returns a [KinematicCollision2D], which contains information about a " "collision that occurred during the last call to [method move_and_slide] or " @@ -37923,22 +38264,24 @@ msgid "" " print(\"Collided with: \", collision.collider.name)\n" "[/codeblock]" msgstr "" -"返回一个[KinematicCollision2D],它包å«äº†åœ¨æœ€åŽä¸€æ¬¡[method move_and_slide]调用" -"æ—¶å‘生的碰撞的信æ¯ã€‚由于在一次对[method move_and_slide]的调用ä¸ï¼Œèº«ä½“å¯ä»¥å‘生" -"å¤šæ¬¡ç¢°æ’žï¼Œæ‰€ä»¥ä½ å¿…é¡»åœ¨0到([method get_slide_count] - 1)的范围内指定碰撞的索" -"引。\n" -"[b]使用实例:[/b]\n" +"返回 [KinematicCollision2D],其ä¸åŒ…嫿œ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 " +"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ" +"用 [method move_and_slide] æ—¶å‘ç”Ÿå¤šæ¬¡ç¢°æ’žï¼Œå› æ¤ä½ 必须在 0 到 ([method " +"get_slide_count] - 1) 范围内指定碰撞的索引。\n" +"[b]用法示例:[/b]\n" "[codeblock]\n" "for i in get_slide_count():\n" " var collision = get_slide_collision(i)\n" -" print(\"Collided with: \" , collision.collider.name)\n" +" print(\"Collided with: \", collision.collider.name)\n" "[/codeblock]" #: doc/classes/KinematicBody2D.xml:87 +#, fuzzy msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -37948,7 +38291,6 @@ msgstr "" "碰撞信æ¯ã€‚" #: doc/classes/KinematicBody2D.xml:100 -#, fuzzy msgid "" "Moves the body along a vector. If the body collides with another, it will " "slide along the other body rather than stop immediately. If the other body " @@ -37985,29 +38327,32 @@ msgid "" "automatically added to the body motion. If a collision occurs due to the " "platform's motion, it will always be first in the slide collisions." msgstr "" -"沿å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“碰撞,它会沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨è€Œä¸æ˜¯ç«‹å³åœ" -"æ¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会å—到å¦ä¸€ä¸ªç‰©ä½“çš„" -"è¿åŠ¨çš„å½±å“ã€‚ä½ å¯ä»¥ä½¿ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n" -"æ¤æ–¹æ³•应在 [method Node._physics_process](或者在被[method Node." -"_physics_process]调用的方法)ä¸ä½¿ç”¨å› 为它在计算ä¸è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ¥éª¤çš„" -"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥é”™è¯¯çš„速度è¿è¡Œã€‚\n" -"[code]linear_velocity[/code]是线速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method " -"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]——物ç†å¼•" +"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸" +"是立å³åœæ¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会被å¦ä¸€ä¸ª" +"物体的è¿åŠ¨æ‰€å½±å“ã€‚ä½ å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节" +"点。\n" +"这个方法应该在[method Node._physics_process]ä¸ä½¿ç”¨ï¼Œæˆ–者在被[method Node." +"_physics_process]调用的方法ä¸ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ¥éª¤çš„" +"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ£ç¡®çš„速度è¿è¡Œã€‚\n" +"[code]linear_velocity[/code]是速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method " +"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]--物ç†å¼•" "擎会处ç†åº”用速度。\n" -"[code]up_direction[/code]是å‘上的方å‘,用æ¥åˆ¤æ–ä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花æ¿ã€‚" -"如果设置为默认值 [code]Vector2(0, 0)[/code],则一切都被视为墙。这对于俯视视角" -"(topdown )的游æˆå¾ˆæœ‰ç”¨ã€‚\n" -"如果 [code]stop_on_slope[/code] 是 [code]true[/code]ï¼Œå½“ä½ åœ¨" -"[code]linear_velocity[/code]ä¸åŒ…å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘" +"[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花" +"æ¿ã€‚如果设置为默认值[code]Vector2(0, 0)[/code],一切都被认为是墙。这对于自上" +"而下的游æˆå¾ˆæœ‰ç”¨ã€‚\n" +"如果[code]stop_on_slope[/code]是[code]true[/code]ï¼Œå½“ä½ åœ¨" +"[code]linear_velocity[/code]ä¸åŒ…å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ¢æ—¶ï¼Œç‰©ä½“å°±ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘" "动。\n" -"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ¢ä¹‹å‰æœ€å¤šæ”¹å˜æ–¹å‘ [code]max_slides[/code] 次。\n" -"[code]floor_max_angle[/code] 是最大角度(以弧度为å•ä½ï¼‰ï¼Œåœ¨è¿™ä¸ªè§’度下,一个斜" -"å¡ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿ï¼ˆæˆ–天花æ¿ï¼‰ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值ç‰äºŽ45度。\n" -"如果 [code]infinite_inertia[/code] æ— ç©·æƒ¯æ€§æ˜¯ [code]true[/code],物体将能够推" -"动 [RigidBody2D] 节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä¸Žå®ƒä»¬çš„任何碰撞。如果 [code]false[/" -"code],它将与 [RigidBody2D] 节点交互,就åƒä¸Ž [StaticBody2D] ä¸€æ ·ã€‚\n" -"返回 [code]linear_velocity[/code] å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦" -"èŽ·å–æœ‰å…³å‘生的冲çªçš„详细信æ¯ï¼Œè¯·ä½¿ç”¨ [method get_slide_collision]。" +"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ¢ã€‚\n" +"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡" +"ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™ã€‚默认值ç‰äºŽ45度。\n" +"如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动" +"[RigidBody2D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code]," +"它将与[RigidBody2D]节点åƒ[StaticBody2D]ä¸€æ ·äº¤äº’ã€‚\n" +"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·" +"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n" +"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„é€Ÿåº¦ä¼šè‡ªåŠ¨åŠ å…¥åˆ°ç‰©ä½“çš„è¿åЍä¸ã€‚如果由于平" +"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞ä¸çš„第一个。" #: doc/classes/KinematicBody2D.xml:122 msgid "" @@ -38024,23 +38369,24 @@ msgstr "" "或使用 [method move_and_slide]æ¥åšåˆ°è¿™ä¸€ç‚¹ã€‚" #: doc/classes/KinematicBody2D.xml:132 +#, fuzzy msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" "在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žã€‚å°†èŠ‚ç‚¹çš„åæ ‡ï¼Œæ¯”例和旋转虚拟地设置为给定" "[Transform2D]çš„åæ ‡ï¼Œæ¯”例和旋转,然åŽå°è¯•沿ç€å‘é‡[code]rel_vec[/code]移动物" "体。如果å‘生碰撞,则返回[code]true[/code]。" #: doc/classes/KinematicCollision.xml:4 -#, fuzzy msgid "Collision data for [KinematicBody] collisions." -msgstr "[KinematicBody2D] 动æ€ç‰©ä½“2D碰撞器碰撞的数æ®ã€‚" +msgstr "[KinematicBody] 碰撞的碰撞数æ®ã€‚" #: doc/classes/KinematicCollision.xml:7 -#, fuzzy msgid "" "Contains collision data for [KinematicBody] collisions. When a " "[KinematicBody] is moved using [method KinematicBody.move_and_collide], it " @@ -38050,17 +38396,19 @@ msgid "" "colliding object, the remaining motion, and the collision position. This " "information can be used to calculate a collision response." msgstr "" -"包å«[KinematicBody2D]碰撞的碰撞数æ®ã€‚当使用 [method KinematicBody2D." -"move_and_collide] 移动[KinematicBody2D]时,如果检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞,它将" -"åœæ¢ã€‚如果检测到碰撞,则返回KinematicCollision2D对象。\n" -"è¯¥å¯¹è±¡åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞对象,剩余è¿åŠ¨å’Œç¢°æ’žåæ ‡ã€‚该信æ¯å¯ç”¨äºŽè®¡ç®—" -"碰撞å“应。" +"包å«[KinematicBody]碰撞的碰撞数æ®ã€‚当[KinematicBody]使用[method " +"KinematicBody.move_and_collide]移动时,如果它检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞就会åœ" +"æ¢ã€‚如果检测到碰撞,将返回一个KinematicCollision对象。\n" +"这个对象包å«å…³äºŽç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞的物体ã€å‰©ä½™çš„è¿åŠ¨å’Œç¢°æ’žçš„ä½ç½®ã€‚这些信æ¯" +"å¯ä»¥ç”¨æ¥è®¡ç®—碰撞å“应。" #: doc/classes/KinematicCollision.xml:17 msgid "" "The collision angle according to [code]up_direction[/code], which is " "[code]Vector3.UP[/code] by default. This value is always positive." msgstr "" +"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector3.UP[/code]。这个" +"值总是为æ£ã€‚" #: doc/classes/KinematicCollision.xml:23 #: doc/classes/KinematicCollision2D.xml:23 @@ -38079,9 +38427,8 @@ msgid "The colliding body's metadata. See [Object]." msgstr "碰撞体的元数æ®ã€‚å‚阅[Object]。" #: doc/classes/KinematicCollision.xml:32 -#, fuzzy msgid "The colliding body's [RID] used by the [PhysicsServer]." -msgstr "碰撞体的形状。" +msgstr "[PhysicsServer] 使用的碰撞体的 [RID]。" #: doc/classes/KinematicCollision.xml:35 #: doc/classes/KinematicCollision2D.xml:35 @@ -38089,9 +38436,8 @@ msgid "The colliding body's shape." msgstr "碰撞体的形状。" #: doc/classes/KinematicCollision.xml:38 -#, fuzzy msgid "The colliding shape's index. See [CollisionObject]." -msgstr "碰撞形状的索引。å‚阅[CollisionObject2D]。" +msgstr "碰撞形状的索引。å‚阅[CollisionObject]。" #: doc/classes/KinematicCollision.xml:41 #: doc/classes/KinematicCollision2D.xml:41 @@ -38148,10 +38494,12 @@ msgid "" "The collision angle according to [code]up_direction[/code], which is " "[code]Vector2.UP[/code] by default. This value is always positive." msgstr "" +"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector2.UP[/code]。这个" +"值总是为æ£ã€‚" #: doc/classes/KinematicCollision2D.xml:32 msgid "The colliding body's [RID] used by the [Physics2DServer]." -msgstr "" +msgstr "[Physics2DServer] 使用的碰撞体的 [RID]。" #: doc/classes/KinematicCollision2D.xml:38 msgid "The colliding shape's index. See [CollisionObject2D]." @@ -38166,7 +38514,6 @@ msgstr "" "[RichTextLabel]。" #: doc/classes/Label.xml:7 -#, fuzzy msgid "" "Label displays plain text on the screen. It gives you control over the " "horizontal and vertical alignment and can wrap the text inside the node's " @@ -38181,13 +38528,15 @@ msgid "" "emoji) are [i]not[/i] supported on Windows. They will display as unknown " "characters instead. This will be resolved in Godot 4.0." msgstr "" -"Labelæ ‡ç¾åœ¨å±å¹•ä¸Šæ˜¾ç¤ºçº¯æ–‡æœ¬ã€‚ä½ å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶å¯ä»¥å°†æ–‡æœ¬åŒ…裹" -"åœ¨èŠ‚ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“æˆ–å…¶ä»–æ ¼å¼åŒ–,对于这点,请使用" -"[RichTextLabel]代替。\n" -"[b]注æ„:[/b] 与大多数其他[Control]相å,Labelçš„[member Control.mouse_filter]" -"默认为[constant Control.MOUSE_FILTER_IGNORE],å³ï¼Œå®ƒå¯¹é¼ æ ‡è¾“å…¥äº‹ä»¶æ²¡æœ‰å应。" -"è¿™æ„å‘³ç€æ ‡ç¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•é…置的[member Control.hint_tooltip],除éžä½ 改å˜å…¶é¼ æ ‡" -"过滤器。" +"æ ‡ç¾åœ¨å±å¹•上显示纯文本。å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶ä¸”å¯ä»¥å°†æ–‡æœ¬åŒ…裹在节" +"ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“æˆ–å…¶ä»–æ ¼å¼ã€‚若使用,请改用 " +"[RichTextLabel]。\n" +"[b]注æ„:[/b] 与大多数其他 [Control] ä¸åŒï¼ŒLabel çš„ [member Control." +"mouse_filter] 默认为 [constant Control.MOUSE_FILTER_IGNORE],å³å®ƒä¸å“åº”é¼ æ ‡è¾“" +"入事件。这æ„å‘³ç€æ ‡ç¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•å·²é…置的 [member Control.hint_tooltip],除éž" +"æ›´æ”¹å…¶é¼ æ ‡è¿‡æ»¤å™¨ã€‚\n" +"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode å—符在 Windows 上 [i]䏿”¯æŒ " +"[/i],例如大多数表情符å·ï¼Œå®ƒä»¬å°†æ˜¾ç¤ºä¸ºæœªçŸ¥å—符。这将在 Godot 4.0 ä¸è§£å†³ã€‚" #: doc/classes/Label.xml:18 msgid "Returns the amount of lines of text the Label has." @@ -38227,13 +38576,11 @@ msgstr "" "它将自动改å˜å…¶é«˜åº¦ä»¥æ˜¾ç¤ºæ‰€æœ‰çš„æ–‡æœ¬ã€‚" #: doc/classes/Label.xml:48 -#, fuzzy msgid "" "If [code]true[/code], the Label only shows the text that fits inside its " "bounding rectangle and will clip text horizontally." msgstr "" -"如果[code]true[/code]ï¼Œæ ‡ç¾åªæ˜¾ç¤ºé€‚åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ã€‚它还å…许您自由地缩å°èŠ‚" -"点。" +"如果 [code]true[/code]ï¼Œåˆ™æ ‡ç¾ä»…显示适åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ï¼Œå¹¶å°†æ°´å¹³å‰ªåˆ‡æ–‡æœ¬ã€‚" #: doc/classes/Label.xml:51 msgid "" @@ -38344,22 +38691,21 @@ msgid "The vertical offset of the text's shadow." msgstr "文本阴影的垂直å移。" #: doc/classes/LargeTexture.xml:4 -#, fuzzy msgid "" "[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with " "offsets." -msgstr "[Texture2D] 能够å˜å‚¨è®¸å¤šå¸¦æœ‰åç§»é‡çš„较å°çº¹ç†ã€‚" +msgstr "[i]已弃用。[/i] 一ç§èƒ½å¤Ÿå˜å‚¨è®¸å¤šå¸¦æœ‰åç§»é‡çš„较å°çº¹ç†çš„ [Texture]。" #: doc/classes/LargeTexture.xml:7 -#, fuzzy msgid "" "[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of " "storing many smaller textures with offsets.\n" "You can dynamically add pieces ([Texture]s) to this [LargeTexture] using " "different offsets." msgstr "" -"[Texture2D]能够å˜å‚¨è®¸å¤šå¸¦æœ‰åç§»é‡çš„å°çº¹ç†ã€‚\n" -"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡åЍæ€åœ°å°†ç¢Žç‰‡[Texture2D]æ·»åŠ åˆ°è¿™ä¸ª[LargeTexture]ä¸ã€‚" +"[i] 已弃用(将在 Godot 4.0 ä¸ç§»é™¤ï¼‰ã€‚ [/i] 一ç§èƒ½å¤Ÿå˜å‚¨è®¸å¤šå…·æœ‰åç§»é‡çš„较å°çº¹" +"ç†çš„ [Texture]。\n" +"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡å‘æ¤ [LargeTexture] åŠ¨æ€æ·»åŠ [Texture]片段。" #: doc/classes/LargeTexture.xml:18 msgid "" @@ -38382,9 +38728,8 @@ msgid "Returns the offset of the piece with the index [code]idx[/code]." msgstr "返回索引为[code]idx[/code]的片段的åç§»é‡ã€‚" #: doc/classes/LargeTexture.xml:44 -#, fuzzy msgid "Returns the [Texture] of the piece with the index [code]idx[/code]." -msgstr "返回索引为[code]idx[/code]的片段的[Texture2D]。" +msgstr "返回索引为 [code]idx[/code] 的片段的 [Texture]。" #: doc/classes/LargeTexture.xml:52 msgid "" @@ -38393,12 +38738,11 @@ msgid "" msgstr "将索引为[code]idx[/code]的片段的åç§»é‡è®¾ç½®ä¸º[code]ofs[/code]。" #: doc/classes/LargeTexture.xml:60 -#, fuzzy msgid "" "Sets the [Texture] of the piece with index [code]idx[/code] to " "[code]texture[/code]." msgstr "" -"将索引为[code]idx[/code]的片段的[Texture2D]设置为[code]texture[/code]。" +"将索引为 [code]idx[/code] 的片段的 [Texture] 设置为 [code]texture[/code]。" #: doc/classes/LargeTexture.xml:67 msgid "Sets the size of this [LargeTexture]." @@ -38409,25 +38753,22 @@ msgid "Provides a base class for different kinds of light nodes." msgstr "为ä¸åŒç±»åž‹çš„光节点æä¾›åŸºç±»ã€‚" #: doc/classes/Light.xml:7 -#, fuzzy msgid "" "Light is the [i]abstract[/i] base class for light nodes. As it can't be " "instanced, it shouldn't be used directly. Other types of light nodes inherit " "from it. Light contains the common variables and parameters used for " "lighting." msgstr "" -"Light3D是光节点的[i]abstract[/i]æŠ½è±¡åŸºç±»ã€‚å› ä¸ºå®ƒä¸èƒ½è¢«å®žä¾‹åŒ–,所以ä¸åº”该被直" -"接使用。其他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚Light3D包å«ç”¨äºŽç…§æ˜Žçš„常è§å˜é‡å’Œå‚数。" +"Light是ç¯å…‰èŠ‚ç‚¹çš„[i]抽象[/i]基类。它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以它ä¸åº”该被直接使用。其" +"他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚ç¯å…‰åŒ…å«ç”¨äºŽç…§æ˜Žçš„常用å˜é‡å’Œå‚数。" #: doc/classes/Light.xml:18 -#, fuzzy msgid "Returns the value of the specified [enum Light.Param] parameter." -msgstr "返回指定的[enum Light3D.Param]傿•°çš„值。" +msgstr "返回指定的[enum Light.Param]傿•°çš„值。" #: doc/classes/Light.xml:26 -#, fuzzy msgid "Sets the value of the specified [enum Light.Param] parameter." -msgstr "设置指定的[enum Light3D.Param]傿•°çš„值。" +msgstr "设置指定的[enum Light.Param]傿•°çš„值。" #: doc/classes/Light.xml:32 msgid "" @@ -38452,21 +38793,21 @@ msgid "The light will affect objects in the selected layers." msgstr "ç¯å…‰å°†å½±å“所选图层ä¸çš„对象。" #: doc/classes/Light.xml:44 -#, fuzzy msgid "" "The light's strength multiplier (this is not a physical unit). For " "[OmniLight] and [SpotLight], changing this value will only change the light " "color's intensity, not the light's radius." msgstr "" -"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼ˆè¿™ä¸æ˜¯ä¸€ä¸ªç‰©ç†å•ä½ï¼‰ã€‚对于[OmniLight3D]å’Œ[SpotLight3D]æ¥è¯´ï¼Œæ”¹" -"å˜è¿™ä¸ªå€¼åªä¼šæ”¹å˜ç¯å…‰é¢œè‰²çš„强度,ä¸ä¼šæ”¹å˜ç¯å…‰çš„åŠå¾„。" +"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼Œæ³¨ï¼Œè¿™ä¸æ˜¯ç‰©ç†å•ä½ã€‚对于 [OmniLight] å’Œ [SpotLight],更改æ¤å€¼åª" +"会更改ç¯å…‰é¢œè‰²çš„强度,而ä¸ä¼šæ›´æ”¹ç¯å…‰çš„åŠå¾„。" #: doc/classes/Light.xml:47 -#, fuzzy msgid "" "Secondary multiplier used with indirect light (light bounces). This works on " "both [BakedLightmap] and [GIProbe]." -msgstr "与间接光(光å弹)一起使用的二级å€å¢žå™¨ã€‚与[GIProbe]一起使用。" +msgstr "" +"与间接光(光å射)一起使用的辅助å€å¢žå™¨ã€‚这适用于 [BakedLightmap] å’Œ " +"[GIProbe]。" #: doc/classes/Light.xml:50 msgid "" @@ -38476,16 +38817,15 @@ msgstr "" "如果为 [code]true[/code]ï¼Œåˆ™å…‰çº¿çš„æ•ˆæžœä¼šé€†è½¬ï¼Œä½¿åŒºåŸŸå˜æš—并投射明亮的阴影。" #: doc/classes/Light.xml:53 -#, fuzzy msgid "" "The size of the light in Godot units. Only considered in baked lightmaps and " "only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing " "this value will make the shadows appear blurrier. This can be used to " "simulate area lights to an extent." msgstr "" -"ç¯å…‰çš„大å°ï¼Œåœ¨Godotä¸çš„å•ä½ã€‚åªé€‚用于[OmniLight3D]så’Œ[SpotLight3D]sã€‚å¢žåŠ è¿™ä¸ª" -"值会使ç¯å…‰æ·¡å‡ºçš„é€Ÿåº¦å˜æ…¢ï¼Œé˜´å½±çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚这在一定程度上å¯ä»¥ç”¨æ¥æ¨¡æ‹ŸåŒºåŸŸ" -"光。" +"ç¯å…‰çš„大å°ï¼Œä»¥Godotçš„å•ä½ã€‚åªåœ¨çƒ˜çƒ¤çš„光照贴图ä¸è€ƒè™‘,并且åªåœ¨[member " +"light_bake_mode]被设置为[constant BAKE_ALL]æ—¶è€ƒè™‘ã€‚å¢žåŠ è¿™ä¸ªå€¼ä¼šä½¿é˜´å½±çœ‹èµ·æ¥æ›´" +"模糊。这å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šç”¨äºŽæ¨¡æ‹ŸåŒºåŸŸç¯å…‰ã€‚" #: doc/classes/Light.xml:56 msgid "" @@ -38511,25 +38851,24 @@ msgid "The color of shadows cast by this light." msgstr "光线投射的阴影的颜色。" #: doc/classes/Light.xml:65 -#, fuzzy msgid "Attempts to reduce [member shadow_bias] gap." -msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚" +msgstr "å°è¯•å‡å°‘ [member shadow_bias] å·®è·ã€‚" #: doc/classes/Light.xml:68 msgid "If [code]true[/code], the light will cast shadows." msgstr "如果为[code]true[/code],光线会投下阴影。" #: doc/classes/Light.xml:71 -#, fuzzy msgid "" "If [code]true[/code], reverses the backface culling of the mesh. This can be " "useful when you have a flat mesh that has a light behind it. If you need to " "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 "" -"如果为[code]true[/code],则åè½¬ç½‘æ ¼çš„èƒŒé¢æ¶ˆéšã€‚当您有一个åŽé¢æœ‰ç¯å…‰çš„å¹³é¢ç½‘æ ¼" -"时,这å¯èƒ½å¾ˆæœ‰ç”¨ã€‚如果需è¦åœ¨ç½‘æ ¼çš„ä¸¤ä¾§æŠ•å°„é˜´å½±ï¼Œè¯·å°†ç½‘æ ¼è®¾ç½®ä¸ºä½¿ç”¨åŒé¢é˜´å½±ï¼Œ" -"并使用[constant GeometryInstance3D.SHADOW_CASTING_SETTING_DOUBLE_SIDED]。" +"如果 [code]true[/code],则åè½¬ç½‘æ ¼çš„èƒŒé¢å‰”é™¤ã€‚å½“ä½ æœ‰ä¸€ä¸ªåŽé¢æœ‰ç¯çš„å¹³é¢ç½‘æ ¼" +"时,这会很有用。如果需è¦åœ¨ç½‘æ ¼çš„ä¸¤ä¾§æŠ•å°„é˜´å½±ï¼Œè¯·ä½¿ç”¨ [constant " +"GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED] å°†ç½‘æ ¼è®¾ç½®ä¸ºä½¿ç”¨åŒé¢é˜´" +"影。" #: doc/classes/Light.xml:76 msgid "Constant for accessing [member light_energy]." @@ -38548,82 +38887,73 @@ msgid "Constant for accessing [member light_specular]." msgstr "访问[member light_specular]的常数。" #: doc/classes/Light.xml:88 -#, fuzzy msgid "" "Constant for accessing [member OmniLight.omni_range] or [member SpotLight." "spot_range]." msgstr "" -"用于访问[member OmniLight3D.omni_range]或[member SpotLight3D.spot_range]的常" -"数。" +"用于访问 [member OmniLight.omni_range] 或 [member SpotLight.spot_range] 的常" +"é‡ã€‚" #: doc/classes/Light.xml:91 -#, fuzzy msgid "" "Constant for accessing [member OmniLight.omni_attenuation] or [member " "SpotLight.spot_attenuation]." msgstr "" -"访问[member OmniLight3D.omni_attenuation]或[member SpotLight3D." -"spot_attenuation]的常数。" +"用于访问 [member OmniLight.omni_attenuation] 或 [member SpotLight." +"spot_attenuation] 的常é‡ã€‚" #: doc/classes/Light.xml:94 -#, fuzzy msgid "Constant for accessing [member SpotLight.spot_angle]." -msgstr "访问[member SpotLight3D.spot_angle]的常数。" +msgstr "用于访问 [member SpotLight.spot_angle] 的常é‡ã€‚" #: doc/classes/Light.xml:97 -#, fuzzy msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]." -msgstr "访问[member SpotLight3D.spot_angle_Densation]的常数。" +msgstr "用于访问 [member SpotLight.spot_angle_attenuation] 的常é‡ã€‚" #: doc/classes/Light.xml:100 -#, fuzzy msgid "Constant for accessing [member shadow_contact]." -msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚" +msgstr "用于访问 [member shadow_contact] 的常é‡ã€‚" #: doc/classes/Light.xml:103 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight." "directional_shadow_max_distance]." msgstr "" -"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。" +"用于访问 [member DirectionalLight.directional_shadow_max_distance] 的常é‡ã€‚" #: doc/classes/Light.xml:106 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight.directional_shadow_split_1]." -msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。" +msgstr "用于访问 [member DirectionalLight.directional_shadow_split_1] 的常é‡ã€‚" #: doc/classes/Light.xml:109 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight.directional_shadow_split_2]." -msgstr "访问[member DirectionalLight3D.directional_shadow_split_2]的常数。" +msgstr "用于访问 [member DirectionalLight.directional_shadow_split_2] 的常é‡ã€‚" #: doc/classes/Light.xml:112 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight.directional_shadow_split_3]." -msgstr "访问[member DirectionalLight3D.directional_shadow_split_3]的常数。" +msgstr "用于访问 [member DirectionalLight.directional_shadow_split_3] 的常é‡ã€‚" #: doc/classes/Light.xml:115 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight." "directional_shadow_normal_bias]." msgstr "" -"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。" +"用于访问 [member DirectionalLight.directional_shadow_normal_bias] 的常é‡ã€‚" #: doc/classes/Light.xml:118 msgid "Constant for accessing [member shadow_bias]." msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚" #: doc/classes/Light.xml:121 -#, fuzzy msgid "" "Constant for accessing [member DirectionalLight." "directional_shadow_bias_split_scale]." -msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。" +msgstr "" +"用于访问 [member DirectionalLight.directional_shadow_bias_split_scale] 的常" +"é‡ã€‚" #: doc/classes/Light.xml:127 msgid "" @@ -38635,7 +38965,7 @@ msgstr "" #: doc/classes/Light.xml:131 msgid "Only indirect lighting will be baked (default)." -msgstr "" +msgstr "åªä¼šçƒ˜ç„™é—´æŽ¥ç…§æ˜Žï¼ˆé»˜è®¤ï¼‰ã€‚" #: doc/classes/Light.xml:134 msgid "" @@ -38643,6 +38973,8 @@ msgid "" "[b]Note:[/b] You should hide the light if you don't want it to appear twice " "(dynamic and baked)." msgstr "" +"直接光和间接光都将被烘焙。\n" +"[b]注æ„:[/b] å¦‚æžœä¸æƒ³è®©ç¯å…‰å‡ºçŽ°ä¸¤æ¬¡ï¼ˆåŠ¨æ€å’Œçƒ˜ç„™ï¼‰ï¼Œåˆ™åº”éšè—ç¯å…‰ã€‚" #: doc/classes/Light2D.xml:4 msgid "Casts light in a 2D environment." @@ -38663,7 +38995,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_lights_and_shadows." +"html" #: doc/classes/Light2D.xml:17 msgid "The Light2D's [Color]." @@ -38751,9 +39084,8 @@ msgstr "" "物æ‰ä¼šæŠ•射阴影。" #: doc/classes/Light2D.xml:74 -#, fuzzy msgid "[Texture] used for the Light2D's appearance." -msgstr "[Texture2D] 用于 Light2D 的外观。" +msgstr "用于Light2D外观的[Texture]。" #: doc/classes/Light2D.xml:77 msgid "The [code]texture[/code]'s scale factor." @@ -38791,11 +39123,10 @@ msgid "No filter applies to the shadow map. See [member shadow_filter]." msgstr "没有过滤器适用于阴影贴图。å‚阅[member shadow_filter]。" #: doc/classes/Light2D.xml:97 -#, fuzzy msgid "" "Percentage closer filtering (3 samples) applies to the shadow map. See " "[member shadow_filter]." -msgstr "百分比接近过滤(13ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" +msgstr "百分比接近过滤(3ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" #: doc/classes/Light2D.xml:100 msgid "" @@ -38804,18 +39135,16 @@ msgid "" msgstr "百分比接近过滤(5ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" #: doc/classes/Light2D.xml:103 -#, fuzzy msgid "" "Percentage closer filtering (7 samples) applies to the shadow map. See " "[member shadow_filter]." -msgstr "百分比接近过滤(5ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" +msgstr "百分比接近过滤(7ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" #: doc/classes/Light2D.xml:106 -#, fuzzy msgid "" "Percentage closer filtering (9 samples) applies to the shadow map. See " "[member shadow_filter]." -msgstr "百分比接近过滤(5ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" +msgstr "百分比接近过滤(9ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚å‚阅[member shadow_filter]。" #: doc/classes/Light2D.xml:109 msgid "" @@ -38861,6 +39190,11 @@ msgid "" "[member ProjectSettings.rendering/limits/buffers/" "canvas_polygon_index_buffer_size_kb]." msgstr "" +"在二维空间ä¸é€šè¿‡å‡ 个点的线。\n" +"[b]注æ„:[/b]默认情况下,Godot一次最多åªèƒ½ç»˜åˆ¶4,096个多边形点。è¦å¢žåŠ è¿™ä¸ªé™" +"åˆ¶ï¼Œè¯·æ‰“å¼€é¡¹ç›®è®¾ç½®ï¼Œå¢žåŠ [member ProjectSettings.rendering/limits/buffers/" +"canvas_polygon_buffer_size_kb]å’Œ[member ProjectSettings.rendering/limits/" +"buffers/canvas_polygon_index_buffer_size_kb]。" #: doc/classes/Line2D.xml:20 msgid "" @@ -38902,11 +39236,12 @@ msgid "" msgstr "用æä¾›çš„[code]position[/code]ä½ç½®è¦†ç›–索引[code]i[/code]处点的ä½ç½®ã€‚" #: doc/classes/Line2D.xml:61 -#, fuzzy msgid "" "If [code]true[/code], the line's border will be anti-aliased.\n" "[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased." -msgstr "如果为[code]true[/code],该直线的边界将应用å锯齿化。" +msgstr "" +"如果[code]true[/code],线æ¡çš„边界将抗锯齿。\n" +"[b]注æ„:[/b] Line2D在抗锯齿时ä¸ä¼šè¢«æ‰¹é‡åŠ é€Ÿã€‚" #: doc/classes/Line2D.xml:65 msgid "" @@ -38935,17 +39270,16 @@ msgid "The style for the points between the start and the end." msgstr "èµ·ç‚¹å’Œç»ˆç‚¹ä¹‹é—´ç‚¹çš„æ ·å¼ã€‚" #: doc/classes/Line2D.xml:80 -#, fuzzy msgid "" "The points that form the lines. The line is drawn between every point set in " "this array. Points are interpreted as local vectors." -msgstr "æž„æˆçº¿æ¡çš„点。这æ¡çº¿æ˜¯åœ¨è¿™ä¸ªæ•°ç»„䏿¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çš„。" +msgstr "æž„æˆçº¿æ¡çš„ç‚¹ã€‚åœ¨æ¤æ•°ç»„ä¸è®¾ç½®çš„æ¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çº¿ã€‚ç‚¹è¢«è§£é‡Šä¸ºå±€éƒ¨å‘é‡ã€‚" #: doc/classes/Line2D.xml:83 msgid "" "The smoothness of the rounded joints and caps. This is only used if a cap or " "joint is set as round." -msgstr "圆形接头和盖的平滑度。仅当盖或接头设置为圆形时æ‰ä½¿ç”¨æ¤é€‰é¡¹ã€‚" +msgstr "圆形接头和盖åçš„å¹³æ»‘åº¦ã€‚ä»…å½“ç›–åæˆ–接头设置为圆形时æ‰ä½¿ç”¨æ¤é€‰é¡¹ã€‚" #: doc/classes/Line2D.xml:86 msgid "" @@ -38988,7 +39322,7 @@ msgstr "" #: doc/classes/Line2D.xml:106 msgid "The line's joints will be bevelled/chamfered." -msgstr "线的接头将进行斜切/倒角。" +msgstr "线的接头将斜切/倒角。" #: doc/classes/Line2D.xml:109 msgid "The line's joints will be rounded." @@ -39028,7 +39362,6 @@ msgid "Control that provides single-line string editing." msgstr "该控件æä¾›å•行å—符串编辑。" #: doc/classes/LineEdit.xml:7 -#, fuzzy msgid "" "LineEdit provides a single-line string editor, used for text fields.\n" "It features many built-in shortcuts which will always be available " @@ -39057,30 +39390,27 @@ msgid "" "- Command + Right arrow: Like the End key, move the cursor to the end of the " "line" msgstr "" -"LineEditæä¾›äº†å•行å—ç¬¦ä¸²ç¼–è¾‘ï¼Œç”¨äºŽæ–‡æœ¬å—æ®µã€‚\n" -"它具有许多内置的快æ·é”®ï¼Œè¿™äº›å¿«æ·é”®æ€»æ˜¯å¯ç”¨ï¼Œæ³¨ï¼Œ[kbd]Ctrl[/kbd]åœ¨è¿™é‡Œæ˜ å°„åˆ°" -"MacOS上的[kbd]Cmd[/kbd]:\n" -"- [kbd]Ctrl + C[/kbd]:å¤åˆ¶\n" -"- [kbd]Ctrl + X[/kbd]:剪切\n" -"- [kbd]Ctrl + V[/kbd]或[kbd]Ctrl + Y[/kbd]:粘贴/\"拉动\"\n" -"- [kbd]Ctrl + Z[/kbd]:撤销\n" -"- [kbd]Ctrl + Shift + Z[/kbd]:é‡åš\n" -"- [kbd]Ctrl + U[/kbd]:åˆ é™¤ä»Žå…‰æ ‡ä½ç½®åˆ°è¡Œé¦–的文本\n" -"- [kbd]Ctrl + K[/kbd]:åˆ é™¤ä»Žå…‰æ ‡ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n" -"- [kbd]Ctrl + A[/kbd]:选择所有文本\n" -"- [kbd]Up Arrow[/kbd]/[kbd]down Arrow[/kbd]:å‘上/å‘下ç®å¤´å°†å…‰æ ‡ç§»åˆ°è¡Œé¦–/行" -"å°¾\n" -"在macOS上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨:\n" -"- [kbd]Ctrl + F[/kbd]:与[kbd]å³ç®å¤´[/kbd]相åŒï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå—符\n" -"- [kbd]Ctrl + B[/kbd]:与[kbd]å·¦ç®å¤´[/kbd]相åŒï¼Œå‘å·¦ç§»åŠ¨å…‰æ ‡ä¸€ä¸ªå—符\n" -"- [kbd]Ctrl + P[/kbd]:与[kbd]å‘上ç®å¤´[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°å‰ä¸€è¡Œ\n" -"- [kbd]Ctrl + N[/kbd]:与[kbd]å‘下ç®å¤´[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°ä¸‹ä¸€è¡Œ\n" -"- [kbd]Ctrl + D[/kbd]:与[kbd]Delete[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å³ä¾§çš„å—符\n" -"- [kbd]Ctrl+H[/kbd]:与[kbd]Backspace[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„å—符\n" -"- [kbd]Ctrl+A[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œé¦–\n" -"- [kbd]Ctrl+E[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾\n" -"- [kbd]Cmd + Left Arrow[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¯¥è¡Œçš„开头\n" -"- [kbd]Cmd + right Arrow[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾" +"LineEdit æä¾›äº†å•行å—ç¬¦ä¸²ç¼–è¾‘å™¨ï¼Œç”¨äºŽæ–‡æœ¬å—æ®µã€‚\n" +"它具有许多始终å¯ç”¨çš„å†…ç½®å¿«æ·æ–¹å¼ï¼ˆåœ¨è¿™é‡Œ [code]Ctrl[/code] æ˜ å°„åˆ° macOS 上的 " +"[code]Command[/code]):\n" +"- Ctrl + C:å¤åˆ¶\n" +"- Ctrl + X:剪切\n" +"- Ctrl + V 或 Ctrl + Y:粘贴/\"拖拽\"\n" +"- Ctrl + Z:撤消\n" +"- Ctrl + Shift + Z:é‡åš\n" +"- Ctrl + Uï¼šåˆ é™¤ä»Žå…‰æ ‡ä½ç½®åˆ°è¡Œé¦–的文本\n" +"- Ctrl + Kï¼šåˆ é™¤ä»Žå…‰æ ‡ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n" +"- Ctrl + A:选择所有文本\n" +"- Up/Down ç®å¤´: ï¼šå°†å…‰æ ‡ç§»åŠ¨åˆ°è¡Œçš„å¼€å¤´/结尾\n" +"在 macOS 上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨ï¼š\n" +"- Ctrl + F:åƒå³ç®å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå—符\n" +"- Ctrl + B:åƒå·¦ç®å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘左移动一个å—符\n" +"- Ctrl + P:åƒå‘上ç®å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡ç§»åŠ¨åˆ°ä¸Šä¸€è¡Œ\n" +"- Ctrl + N:åƒå‘下ç®å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡ç§»åŠ¨åˆ°ä¸‹ä¸€è¡Œ\n" +"- Ctrl + D:åƒDeleteé”®ä¸€æ ·ï¼Œåˆ é™¤å…‰æ ‡å³ä¾§çš„å—符\n" +"- Ctrl + H:åƒé€€æ ¼é”®ä¸€æ ·ï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„å—符\n" +"- Command + å·¦ç®å¤´ï¼šåƒ Home é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡ç§»åŠ¨åˆ°è¡Œé¦–\n" +"- Command + å³ç®å¤´ï¼šåƒ End é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡ç§»åŠ¨åˆ°è¡Œå°¾" #: doc/classes/LineEdit.xml:35 msgid "" @@ -39095,11 +39425,10 @@ msgid "Erases the [LineEdit]'s [member text]." msgstr "擦除 [LineEdit] çš„ [member text]文本 。" #: doc/classes/LineEdit.xml:47 -#, fuzzy msgid "" "Deletes one character at the cursor's current position (equivalent to " "pressing the [code]Delete[/code] key)." -msgstr "åˆ é™¤å…‰æ ‡å½“å‰ä½ç½®çš„一个å—符(相当于按[kbd]Delete[/kbd]输出键)。" +msgstr "åœ¨å…‰æ ‡çš„å½“å‰ä½ç½®åˆ 除一个å—符(相当于按[code]Delete[/code]键)。" #: doc/classes/LineEdit.xml:55 msgid "" @@ -39122,12 +39451,16 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回这个[LineEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[LineEdit]时显" +"示。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³éš" +"è—它或它的任何å节点,请使用其的 [member CanvasItem.visible] 属性。" #: doc/classes/LineEdit.xml:74 msgid "" "Returns the scroll offset due to [member caret_position], as a number of " "characters." -msgstr "" +msgstr "返回由[member caret_position]引起的滚动å移,作为数å—å—符串。" #: doc/classes/LineEdit.xml:81 msgid "Executes a given action as defined in the [enum MenuItems] enum." @@ -39224,6 +39557,21 @@ msgid "" "# `text_change_rejected` is emitted with \"bye\" as parameter.\n" "[/codeblock]" msgstr "" +"在[LineEdit]内å¯è¾“入的最大å—符é‡ã€‚如果[code]0[/code],则没有é™åˆ¶ã€‚\n" +"当定义了é™åˆ¶æ—¶ï¼Œè¶…过[member max_length]çš„å—符会被截æ–。这在设置最大长度时现有" +"çš„ [member text] 内容,或在[LineEdit]䏿’入的新文本,包括粘贴时å‘生。如果任何" +"输入的文本被截æ–,[signal text_change_rejected]ä¿¡å·å°†ä»¥è¢«æˆªæ–çš„åä¸²ä¸ºå‚æ•°å‘é€" +"出æ¥ã€‚\n" +"[b]例如:[/b]\n" +"[codeblock]\n" +"text = \"Hello world\"\n" +"max_length = 5\n" +"# `text` becomes \"Hello\".\n" +"max_length = 10\n" +"text += \" goodbye\"\n" +"# `text` becomes \"Hello good\".\n" +"# `text_change_rejected` is emitted with \"bye\" as parameter.\n" +"[/codeblock]" #: doc/classes/LineEdit.xml:147 msgid "" @@ -39294,6 +39642,8 @@ msgid "" "appended text is truncated to fit [member max_length], and the part that " "couldn't fit is passed as the [code]rejected_substring[/code] argument." msgstr "" +"å½“é™„åŠ çš„æ–‡æœ¬è¶…è¿‡äº†[member max_length]时触å‘ã€‚é™„åŠ çš„æ–‡æœ¬è¢«æˆªæ–以适应[member " +"max_length],ä¸èƒ½é€‚应的部分被作为[code]rejected_substring[/code]傿•°ä¼ 递。" #: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506 msgid "Emitted when the text changes." @@ -39446,13 +39796,14 @@ msgid "Simple button used to represent a link to some resource." msgstr "简å•的按钮,用于表示对æŸäº›èµ„æºçš„链接。" #: doc/classes/LinkButton.xml:7 -#, fuzzy msgid "" "This kind of button is primarily used when the interaction with the button " "causes a context change (like linking to a web page).\n" "See also [BaseButton] which contains common properties and methods " "associated with this node." -msgstr "è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽæŒ‰é’®çš„交互导致上下文更改(如链接到网页)时使用。" +msgstr "" +"è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽä¸ŽæŒ‰é’®çš„交互引起上下文å˜åŒ–时,如链接到网页。\n" +"å‚阅[BaseButton],它包å«äº†è¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚" #: doc/classes/LinkButton.xml:21 msgid "" @@ -39496,6 +39847,8 @@ msgid "" "text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"当[LinkButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬" +"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/LinkButton.xml:49 msgid "Text [Color] used when the [LinkButton] is being hovered." @@ -39514,15 +39867,13 @@ msgid "Overrides the location sounds are heard from." msgstr "覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚" #: doc/classes/Listener.xml:7 -#, fuzzy msgid "" "Once added to the scene tree and enabled using [method make_current], this " "node will override the location sounds are heard from. This can be used to " "listen from a location different from the [Camera]." msgstr "" -"ä¸€æ—¦æ·»åŠ åˆ°åœºæ™¯æ ‘å¹¶å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨" -"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n" -"[b]注æ„:[/b]æ¤èŠ‚ç‚¹è¿˜æ²¡æœ‰2D对ç‰é¡¹ã€‚" +"ä¸€æ—¦è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘å¹¶ä½¿ç”¨[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„ä½" +"置。这å¯ä»¥ç”¨æ¥ä»Ž[Camera]ä¸åŒçš„ä½ç½®è†å¬ã€‚" #: doc/classes/Listener.xml:15 msgid "Disables the listener to use the current camera's listener instead." @@ -39533,24 +39884,22 @@ msgid "Returns the listener's global orthonormalized [Transform]." msgstr "返回监å¬å™¨çš„全局æ£åˆ™åŒ–[Transform]。" #: doc/classes/Listener.xml:27 -#, fuzzy msgid "" "Returns [code]true[/code] if the listener was made current using [method " "make_current], [code]false[/code] otherwise.\n" "[b]Note:[/b] There may be more than one Listener marked as \"current\" in " "the scene tree, but only the one that was made current last will be used." msgstr "" -"如果使用[make_current]方法使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”" -"回[code]false[/code]。\n" -"[b]注æ„:[/b] åœ¨åœºæ™¯æ ‘ä¸å¯èƒ½æœ‰ä¸æ¢ä¸€ä¸ªListener3Dè¢«æ ‡è®°ä¸º \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽ" -"è¢«å˜æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚" +"如果使用[make_current]方法,使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œåˆ™è¿”回[code]true[/code],å¦" +"则返回[code]false[/code]。\n" +"[b]注æ„:[/b] åœ¨åœºæ™¯æ ‘ä¸å¯èƒ½æœ‰ä¸€ä¸ªä»¥ä¸Šçš„监å¬å™¨è¢«æ ‡è®°ä¸º \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽå˜" +"æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚" #: doc/classes/Listener.xml:34 msgid "Enables the listener. This will override the current camera's listener." msgstr "å¯ç”¨ç›‘å¬å™¨ã€‚这将覆盖当å‰ç›¸æœºçš„监å¬å™¨ã€‚" #: doc/classes/Listener2D.xml:7 -#, fuzzy msgid "" "Once added to the scene tree and enabled using [method make_current], this " "node will override the location sounds are heard from. Only one [Listener2D] " @@ -39560,20 +39909,21 @@ msgid "" "screen will be used as a hearing point for the audio. [Listener2D] needs to " "be inside [SceneTree] to function." msgstr "" -"ä¸€æ—¦æ·»åŠ åˆ°åœºæ™¯æ ‘å¹¶å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨" -"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n" -"[b]注æ„:[/b]æ¤èŠ‚ç‚¹è¿˜æ²¡æœ‰2D对ç‰é¡¹ã€‚" +"ä¸€æ—¦è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ï¼Œå¹¶ä½¿ç”¨[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„" +"ä½ç½®ã€‚åªæœ‰ä¸€ä¸ª[Listener2D]å¯ä»¥æ˜¯å½“å‰çš„。使用[method make_current]å°†ç¦ç”¨ä»¥å‰çš„" +"[Listener2D]。\n" +"如果在当å‰çš„[Viewport]䏿²¡æœ‰æ¿€æ´»çš„[Listener2D],å±å¹•ä¸å¿ƒå°†è¢«ç”¨ä½œéŸ³é¢‘çš„è†å¬" +"点。[Listener2D]需è¦åœ¨[SceneTree]内æ‰èƒ½å‘挥作用。" #: doc/classes/Listener2D.xml:16 msgid "" "Disables the [Listener2D]. If it's not set as current, this method will have " "no effect." -msgstr "" +msgstr "ç¦ç”¨[Listener2D]。如果未将其设置为当å‰ï¼Œæ¤æ–¹æ³•å°†æ— æ•ˆã€‚" #: doc/classes/Listener2D.xml:22 -#, fuzzy msgid "Returns [code]true[/code] if this [Listener2D] is currently active." -msgstr "如果该对ç‰ä½“当å‰å·²è¿žæŽ¥ï¼Œåˆ™è¿”回[code]true[/code]。" +msgstr "如果æ¤[Listener2D]当å‰å¤„于激活状æ€ï¼Œåˆ™è¿”回[code]true[/code]。" #: doc/classes/Listener2D.xml:28 msgid "" @@ -39583,13 +39933,15 @@ msgid "" "This method will have no effect if the [Listener2D] is not added to " "[SceneTree]." msgstr "" +"使[Listener2D]处于激活状æ€ï¼Œå°†å…¶è®¾ç½®ä¸ºå£°éŸ³çš„è†å¬ç‚¹ã€‚å¦‚æžœå·²ç»æœ‰å¦ä¸€ä¸ªæ¿€æ´»çš„" +"[Listener2D],它将被ç¦ç”¨ã€‚\n" +"如果[Listener2D]æœªæ·»åŠ åˆ°[SceneTree]ä¸ï¼Œæ¤æ–¹æ³•å°†æ— æ•ˆã€‚" #: doc/classes/MainLoop.xml:4 msgid "Abstract base class for the game's main loop." msgstr "游æˆä¸»å¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚" #: doc/classes/MainLoop.xml:7 -#, fuzzy msgid "" "[MainLoop] is the abstract base class for a Godot project's game loop. It is " "inherited by [SceneTree], which is the default game loop implementation used " @@ -39635,14 +39987,13 @@ msgid "" "[/codeblock]" msgstr "" "[MainLoop]是Godoté¡¹ç›®ä¸æ¸¸æˆå¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚å®ƒè¢«[SceneTree]继承,åŽè€…是Godot项" -"ç›®ä¸ä½¿ç”¨çš„默认游æˆå¾ªçŽ¯å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]åç±»æ¥ä»£æ›¿åœº" -"æ™¯æ ‘ä¸çš„实现。\n" +"ç›®ä¸ä½¿ç”¨çš„æ¸¸æˆå¾ªçŽ¯çš„é»˜è®¤å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]å类,而ä¸" +"æ˜¯åœºæ™¯æ ‘ã€‚\n" "在应用程åºå¯åŠ¨æ—¶ï¼Œå¿…é¡»å‘æ“作系统æä¾›ä¸€ä¸ª[MainLoop]实现;å¦åˆ™ï¼Œåº”用程åºå°†é€€" -"出。这将自动å‘生,并且会自动创建一个[SceneTree],除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»è¦çš„" -"[Script](例如用[code]godot -s my_loop.gd[/code]),并且它是一个[MainLoop]实" +"出。除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»[Script](例如:[code]godot -s my_loop.gd[/" +"code]),这将自动å‘生(并且创建一个[SceneTree]),并应该是一个[MainLoop]实" "现。\n" -"䏋颿˜¯ä¸€ä¸ªå®žçŽ°ç®€å•[MainLoop]的脚本例å。\n" -"[b]FIXME:[/b] 在DisplayServeræ‹†åˆ†å’Œè¾“å…¥é‡æž„åŽä¸å†æœ‰æ•ˆã€‚\n" +"䏋颿˜¯å®žçŽ°ç®€å•[MainLoop]的脚本例å:\n" "[codeblock]\n" "extends MainLoop\n" "\n" @@ -39662,9 +40013,9 @@ msgstr "" "func _input_event(event):\n" " # Record keys.\n" " if event is InputEventKey and event.pressed and !event.echo:\n" -" keys_typed.append(OS.get_keycode_string(event.keycode))\n" +" keys_typed.append(OS.get_scancode_string(event.scancode))\n" " # Quit on Escape press.\n" -" if event.keycode == KEY_ESCAPE:\n" +" if event.scancode == KEY_ESCAPE:\n" " quit = true\n" " # Quit on any mouse click.\n" " if event is InputEventMouseButton:\n" @@ -39677,14 +40028,13 @@ msgstr "" "[/codeblock]" #: doc/classes/MainLoop.xml:51 -#, fuzzy msgid "" "Called when files are dragged from the OS file manager and dropped in the " "game window. The arguments are a list of file paths and the identifier of " "the screen where the drag originated." msgstr "" -"当文件从æ“作系统的文件管ç†å™¨ä¸è¢«æ‹–到游æˆçª—å£ä¸æ—¶å‘å‡ºã€‚å‚æ•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列表" -"和拖动文件的å±å¹•æ ‡è¯†ç¬¦ã€‚" +"当文件从æ“作系统的文件管ç†å™¨ä¸è¢«æ‹–到游æˆçª—å£ä¸æ—¶è¢«è°ƒç”¨ã€‚傿•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列" +"表和拖动å±å¹•çš„æ ‡è¯†ç¬¦ã€‚" #: doc/classes/MainLoop.xml:57 msgid "Called before the program exits." @@ -39694,7 +40044,7 @@ msgstr "在程åºé€€å‡ºå‰è°ƒç”¨ã€‚" msgid "" "Called when the user performs an action in the system global menu (e.g. the " "Mac OS menu bar)." -msgstr "" +msgstr "当用户在系统全局èœå•(如Mac OSçš„èœå•æ ï¼‰ä¸æ‰§è¡ŒåŠ¨ä½œæ—¶è¢«è°ƒç”¨ã€‚" #: doc/classes/MainLoop.xml:72 msgid "" @@ -39715,16 +40065,17 @@ msgstr "在åˆå§‹åŒ–时调用一次。" #: doc/classes/MainLoop.xml:86 msgid "Called whenever an [InputEvent] is received by the main loop." -msgstr "" +msgstr "æ¯å½“主循环接收到[InputEvent]时,就会调用。" #: doc/classes/MainLoop.xml:93 msgid "" "Deprecated callback, does not do anything. Use [method _input_event] to " "parse text input. Will be removed in Godot 4.0." msgstr "" +"废弃的回调,ä¸åšä»»ä½•事情。使用[method _input_event]æ¥è§£æžæ–‡æœ¬è¾“入。在Godot " +"4.0ä¸ä¼šè¢«åˆ 除。" #: doc/classes/MainLoop.xml:100 -#, fuzzy msgid "" "Called each physics frame with the time since the last physics frame as " "argument ([code]delta[/code], in seconds). Equivalent to [method Node." @@ -39733,10 +40084,10 @@ msgid "" "ends the main loop, while [code]false[/code] lets it proceed to the next " "frame." msgstr "" -"在æ¯ä¸ªç‰©ç†å¸§ä¸è°ƒç”¨ï¼Œå‚数为自上一个物ç†å¸§ä»¥æ¥çš„æ—¶é—´ï¼ˆå•ä½ï¼šç§’)。相当于" -"[method Node._physics_process]。\n" -"如果实施,该方法必须返回一个布尔值。[code]true[/code] 结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ" -"[code]false[/code] 让它进入下一帧。" +"在æ¯ä¸ªç‰©ç†å¸§ä¸è°ƒç”¨ï¼Œå¹¶å°†è‡ªä¸Šä¸€ä¸ªç‰©ç†å¸§ä»¥æ¥çš„æ—¶é—´ä½œä¸ºå‚数,[code]delta[/" +"code],å•ä½ä¸ºç§’。相当于[method Node._physics_process]。\n" +"如果实现,该方法必须返回一个布尔值。[code]true[/code]结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ" +"[code]false[/code]让它进入下一帧。" #: doc/classes/MainLoop.xml:107 msgid "" @@ -39757,18 +40108,16 @@ msgid "" msgstr "ä¸åº”手动调用,而应覆盖[method _initialize]。在Godot 4.0ä¸ä¼šè¢«åˆ 除。" #: doc/classes/MainLoop.xml:127 -#, fuzzy msgid "" "Should not be called manually, override [method _input_event] instead. Will " "be removed in Godot 4.0." -msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0ä¸ä¼šè¢«åˆ 除。" +msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_event]。在Godot 4.0ä¸ä¼šè¢«åˆ 除。" #: doc/classes/MainLoop.xml:134 -#, fuzzy msgid "" "Should not be called manually, override [method _input_text] instead. Will " "be removed in Godot 4.0." -msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0ä¸ä¼šè¢«åˆ 除。" +msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_text]。在Godot 4.0ä¸ä¼šè¢«åˆ 除。" #: doc/classes/MainLoop.xml:141 msgid "" @@ -39797,32 +40146,29 @@ msgstr "" "在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚" #: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799 -#, fuzzy msgid "" "Notification received from the OS when the game window is focused.\n" "Implemented on all platforms." msgstr "" -"å½“é¼ æ ‡è¿›å…¥æ¸¸æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n" -"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚" +"当游æˆçª—å£èŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n" +"在所有平å°ä¸Šå®žçŽ°ã€‚" #: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803 -#, fuzzy msgid "" "Notification received from the OS when the game window is unfocused.\n" "Implemented on all platforms." msgstr "" -"å½“é¼ æ ‡è¿›å…¥æ¸¸æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n" -"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚" +"当游æˆçª—壿œªèŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n" +"在所有平å°ä¸Šå®žçŽ°ã€‚" #: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807 -#, fuzzy msgid "" "Notification received from the OS when a quit request is sent (e.g. closing " "the window with a \"Close\" button or Alt+F4).\n" "Implemented on desktop platforms." msgstr "" -"当å‘é€å…³é—请求时从æ“作系统收到的通知(例如用 \"å…³é— \"按钮或[kbd]Alt + F4[/" -"kbd]å…³é—窗å£ï¼‰ã€‚\n" +"å‘出退出请求时,从æ“作系统收到的通知(例如用 \"å…³é—\" 按钮或Alt+F4å…³é—窗" +"å£ï¼‰ã€‚\n" "在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚" #: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811 @@ -39836,15 +40182,14 @@ msgstr "" "安å“å¹³å°ç‰¹ä¾›ã€‚" #: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815 -#, fuzzy msgid "" "Notification received from the OS when an unfocus request is sent (e.g. " "another OS window wants to take the focus).\n" "No supported platforms currently send this notification." msgstr "" -"当å‘é€å…³é—请求时从æ“作系统收到的通知(例如用 \"å…³é— \"按钮或[kbd]Alt + F4[/" -"kbd]å…³é—窗å£ï¼‰ã€‚\n" -"在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚" +"当喿¶ˆç„¦ç‚¹çš„请求被å‘逿—¶ï¼Œä»Žæ“作系统收到的通知(例如,å¦ä¸€ä¸ªæ“ä½œç³»ç»Ÿçª—å£æƒ³è¦" +"得到焦点)。\n" +"ç›®å‰æ²¡æœ‰æ”¯æŒçš„å¹³å°å‘é€è¿™ä¸ªé€šçŸ¥ã€‚" #: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819 msgid "" @@ -39895,21 +40240,19 @@ msgstr "" "特定于macOSå¹³å°ã€‚" #: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838 -#, fuzzy msgid "" "Notification received from the OS when the app is resumed.\n" "Specific to the Android platform." msgstr "" -"应用æ¢å¤æ—¶ä»Žæ“作系统收到的通知。\n" +"æ¢å¤åº”用时从æ“作系统收到的通知。\n" "特定于安å“å¹³å°ã€‚" #: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842 -#, fuzzy msgid "" "Notification received from the OS when the app is paused.\n" "Specific to the Android platform." msgstr "" -"åº”ç”¨ç¨‹åºæš‚åœæ—¶ä»Žæ“作系统收到的通知。\n" +"æš‚åœåº”用时从æ“作系统收到的通知。\n" "特定于安å“å¹³å°ã€‚" #: doc/classes/MarginContainer.xml:4 @@ -39917,7 +40260,6 @@ msgid "Simple margin container." msgstr "简å•è¾¹è·å®¹å™¨ã€‚" #: doc/classes/MarginContainer.xml:7 -#, fuzzy msgid "" "Adds a top, left, bottom, and right margin to all [Control] nodes that are " "direct children of the container. To control the [MarginContainer]'s margin, " @@ -39935,16 +40277,17 @@ msgid "" "[/codeblock]" msgstr "" "为所有作为容器的直接å节点的[Control]èŠ‚ç‚¹æ·»åŠ é¡¶éƒ¨ã€å·¦ä¾§ã€åº•部和å³ä¾§çš„è¾¹è·ã€‚è¦" -"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code]主题属" +"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code] 主题属" "性。\n" "[b]注æ„:[/b]è¦å°å¿ƒï¼Œ[Control]çš„margin值与常é‡margin值ä¸åŒã€‚å¦‚æžœä½ æƒ³é€šè¿‡ä»£ç " -"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œä½ 应该使用下é¢çš„例å。\n" -"[codeeblock]\n" +"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œåº”该使用下é¢çš„例å:\n" +"[codeblock]\n" +"# 这个代ç 示例å‡å®šå½“å‰è„šæœ¬æ‰©å±•è‡ªMarginContainer。\n" "var margin_value = 100\n" -"set(\"custom_constants/margin_top\", margin_value)\n" -"set(\"custom_constants/margin_left\", margin_value)\n" -"set(\"custom_constants/margin_bottom\", margin_value)\n" -"set(\"custom_constants/margin_right\", margin_value)\n" +"add_constant_override(\"margin_top\", margin_value)\n" +"add_constant_override(\"margin_left\", margin_value)\n" +"add_constant_override(\"margin_bottom\", margin_value)\n" +"add_constant_override(\"margin_right\", margin_value)\n" "[/codeblock]" #: doc/classes/MarginContainer.xml:26 @@ -39984,12 +40327,11 @@ msgid "Provides data transformation and encoding utility functions." msgstr "æä¾›æ•°æ®è½¬æ¢å’Œç¼–ç 的实用功能。" #: doc/classes/Marshalls.xml:16 -#, fuzzy msgid "" "Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string " "[code]base64_str[/code]." msgstr "" -"返回对应于Base64ç¼–ç çš„å—符串[code]base64_str[/code]的解ç [PackedByteArray]。" +"返回对应于Base64ç¼–ç å—符串[code]base64_str[/code]的解ç çš„[PoolByteArray]。" #: doc/classes/Marshalls.xml:23 msgid "" @@ -40013,9 +40355,8 @@ msgstr "" "ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚" #: doc/classes/Marshalls.xml:39 -#, fuzzy msgid "Returns a Base64-encoded string of a given [PoolByteArray]." -msgstr "返回给定[PackedByteArray]çš„Base64ç¼–ç çš„å—符串。" +msgstr "返回给定[PoolByteArray]çš„Base64ç¼–ç çš„å—符串。" #: doc/classes/Marshalls.xml:46 msgid "" @@ -40037,19 +40378,17 @@ msgid "Abstract base [Resource] for coloring and shading geometry." msgstr "ç”¨äºŽä¸ºå‡ ä½•ä½“ä¸Šè‰²(Coloring)å’Œç€è‰²(Shading)çš„[Resource]抽象å类。" #: doc/classes/Material.xml:7 -#, fuzzy msgid "" "Material is a base [Resource] used for coloring and shading geometry. All " "materials inherit from it and almost all [VisualInstance] derived nodes " "carry a Material. A few flags and parameters are shared between all material " "types and are configured here." msgstr "" -"æè´¨æ˜¯ä¸€ä¸ªåŸºç¡€[Resource]ï¼Œç”¨äºŽç»™å‡ ä½•ä½“ä¸Šè‰²(Coloring)å’Œç€è‰²(Shading)。所有的æ" -"è´¨éƒ½ç»§æ‰¿è‡ªå®ƒï¼Œå‡ ä¹Žæ‰€æœ‰çš„[VisualInstance3D]派生节点都带有一个æè´¨ã€‚æœ‰å‡ ä¸ªæ ‡å¿—" -"å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±äº«çš„,并在这里é…置。" +"æè´¨æ˜¯åŸºæœ¬[Resource]ï¼Œç”¨äºŽå‡ ä½•ä½“ç€è‰²å™¨å’Œä¸Šè‰²ã€‚所有的æè´¨éƒ½ç»§æ‰¿è‡ªå®ƒï¼Œå‡ 乎所有" +"çš„[VisualInstance]派生节点都带有æè´¨ã€‚æœ‰å‡ ä¸ªæ ‡å¿—å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±" +"享的,并在这里进行é…置。" #: doc/classes/Material.xml:17 -#, fuzzy msgid "" "Sets the [Material] to be used for the next pass. This renders the object " "again using a different material.\n" @@ -40057,11 +40396,10 @@ msgid "" "with type \"Spatial\"." msgstr "" "设置下一次使用的[Material]。这将使用ä¸åŒçš„æè´¨å†æ¬¡æ¸²æŸ“对象。\n" -"[b]注æ„:[/b]åªé€‚用于[StandardMaterial3D]å’Œ[ShaderMaterial]çš„ \"Spatial \"ç±»" +"[b]注æ„:[/b] è¿™åªé€‚用于[SpatialMaterial]å’Œ[ShaderMaterial]çš„ \"Spatial\"ç±»" "型。" #: doc/classes/Material.xml:21 -#, fuzzy msgid "" "Sets the render priority for transparent objects in 3D scenes. Higher " "priority objects will be sorted in front of lower priority objects.\n" @@ -40070,10 +40408,10 @@ msgid "" "This is because opaque objects are not sorted, while transparent objects are " "sorted from back to front (subject to priority)." msgstr "" -"设置3D场景ä¸é€æ˜Žç‰©ä½“的渲染优先级。高优先级的物体将被排åºåœ¨ä½Žä¼˜å…ˆçº§çš„物体å‰" +"设置3D场景ä¸é€æ˜Žç‰©ä½“的渲染优先级。优先级高的物体将被排åºåœ¨ä¼˜å…ˆçº§ä½Žçš„物体å‰" "é¢ã€‚\n" -"[b]注æ„:[/b]è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“的排" -"åºæ–¹å¼ã€‚è¿™æ˜¯å› ä¸ºä¸é€æ˜Žç‰©ä½“ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žç‰©ä½“是从åŽå¾€å‰æŽ’åºçš„(å–决于优先" +"[b]注æ„:[/b] è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“çš„" +"æŽ’åºæ–¹å¼ã€‚è¿™æ˜¯å› ä¸ºä¸é€æ˜Žå¯¹è±¡ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žå¯¹è±¡åˆ™ä»ŽåŽå¾€å‰æŽ’åºï¼ˆå–决于优先" "级)。" #: doc/classes/Material.xml:27 @@ -40089,7 +40427,6 @@ msgid "Special button that brings up a [PopupMenu] when clicked." msgstr "特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。" #: doc/classes/MenuButton.xml:7 -#, fuzzy msgid "" "Special button that brings up a [PopupMenu] when clicked.\n" "New items can be created inside this [PopupMenu] using [code]get_popup()." @@ -40100,11 +40437,12 @@ msgid "" "See also [BaseButton] which contains common properties and methods " "associated with this node." msgstr "" -"特殊按钮,点击åŽä¼šå‡ºçŽ°ä¸€ä¸ª[PopupMenu]。\n" -"使用[code]get_popup().add_item(\"My Item Name\")[/code]å¯ä»¥åœ¨è¿™ä¸ª[PopupMenu]" -"ä¸åˆ›å»ºæ–°é¡¹ã€‚ä½ ä¹Ÿå¯ä»¥ç›´æŽ¥ä»Žç¼–辑器ä¸åˆ›å»ºå®ƒä»¬ã€‚è¦åšåˆ°è¿™ä¸€ç‚¹ï¼Œé€‰æ‹©[MenuButton]节" -"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸ï¼Œç‚¹å‡»[b]Items[/b],然åŽåœ¨å¼¹å‡ºçš„窗å£ä¸ç‚¹å‡»" -"[b]Add[/b]ã€‚ä½ å°†èƒ½å¤Ÿèµ‹äºˆæ¯ä¸ªé¡¹æ–°çš„属性。" +"特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。\n" +"å¯ä»¥ä½¿ç”¨[code]get_popup().add_item(\"My Item Name\")[/code]在这个[PopupMenu]" +"ä¸åˆ›å»ºæ–°é¡¹ç›®ã€‚ä½ ä¹Ÿå¯ä»¥ç›´æŽ¥ä»Žç¼–辑器ä¸åˆ›å»ºå®ƒä»¬ã€‚è¦åšåˆ°è¿™ç‚¹ï¼Œé€‰æ‹©[MenuButton]节" +"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸ï¼Œç‚¹å‡»[b]Items[/b],然åŽç‚¹å‡»å¼¹å‡ºçª—å£ä¸çš„" +"[b]Add[/b]ã€‚ä½ å°†èƒ½å¤Ÿèµ‹äºˆæ¯ä¸ªé¡¹ç›®æ–°çš„属性。\n" +"å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚" #: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86 msgid "" @@ -40113,6 +40451,9 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回这个按钮ä¸åŒ…å«çš„[PopupMenu]。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³éš" +"è—它或它的任何å节点,请使用其的[member CanvasItem.visible]属性。" #: doc/classes/MenuButton.xml:25 msgid "" @@ -40130,9 +40471,8 @@ msgstr "" "code]çš„å¦ä¸€ä¸ª[MenuButton]上方时,它将关é—当å‰çš„[MenuButton]并打开å¦ä¸€ä¸ªã€‚" #: doc/classes/MenuButton.xml:41 -#, fuzzy msgid "Emitted when [PopupMenu] of this MenuButton is about to show." -msgstr "当这个MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶å‘出。" +msgstr "当æ¤MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶è§¦å‘。" #: doc/classes/MenuButton.xml:49 msgid "[StyleBox] used when the [MenuButton] is disabled." @@ -40165,6 +40505,8 @@ msgid "" "text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"当[MenuButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬" +"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/MenuButton.xml:67 msgid "Text [Color] used when the [MenuButton] is being hovered." @@ -40215,6 +40557,12 @@ 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 "" +"ä»Žç½‘æ ¼ä¸è®¡ç®—出 [ConvexPolygonShape] 。\n" +"如果 [code]clean[/code] 是 [code]true[/code] (默认),é‡å¤çš„和内部的顶点会被" +"è‡ªåŠ¨ç§»é™¤ã€‚ä½ å¯ä»¥æŠŠå®ƒè®¾ä¸º [code]false[/code] æ¥ä½¿è¿™ä¸ªè¿‡ç¨‹æ›´å¿«ï¼Œå¦‚æžœä¸éœ€è¦çš„" +"è¯ã€‚\n" +"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ¥ç®€åŒ–å‡ ä½•ä½“ä»¥å‡å°‘顶点" +"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。" #: doc/classes/Mesh.xml:30 msgid "" @@ -40227,25 +40575,23 @@ msgstr "" "[b]Note:[/b] 这个方法实际上ååºè¿”回顶点(例如输入顺时针,返回逆时针)。" #: doc/classes/Mesh.xml:37 -#, fuzzy msgid "Calculate a [ConcavePolygonShape] from the mesh." -msgstr "ä»Žè¯¥ç½‘æ ¼ä¸è®¡ç®—出一个[ConcavePolygonShape3D]凹多边形。" +msgstr "ä»Žç½‘æ ¼ä¸è®¡ç®—出[ConcavePolygonShape]。" #: doc/classes/Mesh.xml:43 msgid "Generate a [TriangleMesh] from the mesh." msgstr "ä»Žç½‘æ ¼ç”Ÿæˆ[TriangleMesh]。" #: doc/classes/Mesh.xml:49 -#, fuzzy msgid "" "Returns the smallest [AABB] enclosing this mesh in local space. Not affected " "by [code]custom_aabb[/code]. See also [method VisualInstance." "get_transformed_aabb].\n" "[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]." msgstr "" -"返回能够包å«è¯¥ç½‘æ ¼çš„æœ€å°[AABB]碰撞盒。它ä¸å—[code]custom_aabb[/code]属性影" -"å“。\n" -"[b]Note:[/b] 这个方法åªä¸º[ArrayMesh]å’Œ[PrimitiveMesh]实现。" +"返回局部空间ä¸åŒ…å›´è¿™ä¸ªç½‘æ ¼çš„æœ€å°çš„[AABB]。ä¸å—[code]custom_aabb[/code]的影" +"å“。å‚阅 [method VisualInstance.get_transformed_aabb]。\n" +"[b]注æ„:[/b]è¿™åªå¯¹[ArrayMesh]å’Œ[PrimitiveMesh]实现。" #: doc/classes/Mesh.xml:56 msgid "" @@ -40286,6 +40632,8 @@ msgid "" "Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides " "[member BakedLightmap.default_texels_per_unit]." msgstr "" +"设置æç¤ºï¼Œç”¨äºŽ[BakedLightmap]ä¸çš„光照贴图分辨率。é‡å†™[member BakedLightmap." +"default_texels_per_unit]。" #: doc/classes/Mesh.xml:102 msgid "Render array as points (one vertex equals one point)." @@ -40300,9 +40648,8 @@ msgid "Render array as line strip." msgstr "将顶点组渲染为线æ¡ã€‚" #: doc/classes/Mesh.xml:111 -#, fuzzy msgid "Render array as line loop (like line strip, but closed)." -msgstr "将顶点组渲染为线æ¡ã€‚" +msgstr "将数组渲染æˆçº¿çŠ¶çŽ¯ï¼ˆåƒçº¿æ¡ï¼Œä½†æ˜¯å°é—的)。" #: doc/classes/Mesh.xml:114 msgid "Render array as triangles (every three vertices a triangle is created)." @@ -40313,9 +40660,8 @@ msgid "Render array as triangle strips." msgstr "将顶点组渲染为三角形线框。" #: doc/classes/Mesh.xml:120 -#, fuzzy msgid "Render array as triangle fans." -msgstr "将顶点组渲染为三角形线框。" +msgstr "将数组渲染æˆä¸‰è§’形扇形。" #: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363 msgid "Blend shapes are normalized." @@ -40368,12 +40714,11 @@ msgstr "ç½‘æ ¼ç»„ä½¿ç”¨ç´¢å¼•ã€‚" msgid "" "Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum " "values. Do not use." -msgstr "" +msgstr "内部用于计算其他[code]ARRAY_COMPRESS_*[/code]枚举值。ä¸è¦ä½¿ç”¨ã€‚" #: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300 -#, fuzzy msgid "Flag used to mark a compressed (half float) vertex array." -msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。" +msgstr "ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰é¡¶ç‚¹æ•°ç»„çš„æ ‡å¿—ã€‚" #: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303 msgid "Flag used to mark a compressed (half float) normal array." @@ -40398,14 +40743,12 @@ msgid "" msgstr "æ›¾ç”¨äºŽæ ‡è®°ç¬¬äºŒå¥—UVåæ ‡çš„压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UVåæ ‡æ•°ç»„çš„Flag。" #: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318 -#, fuzzy msgid "Flag used to mark a compressed bone array." -msgstr "æ›¾ç”¨äºŽæ ‡è®°åŽ‹ç¼©ç´¢å¼•æ•°ç»„çš„Flag。" +msgstr "ç”¨äºŽæ ‡è®°åŽ‹ç¼©éª¨éª¼æ•°ç»„çš„æ ‡å¿—ã€‚" #: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321 -#, fuzzy msgid "Flag used to mark a compressed (half float) weight array." -msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。" +msgstr "ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰æƒé‡æ•°ç»„çš„æ ‡å¿—ã€‚" #: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324 msgid "Flag used to mark a compressed index array." @@ -40416,18 +40759,16 @@ msgid "Flag used to mark that the array contains 2D vertices." msgstr "æ›¾ç”¨äºŽæ ‡è®°åŒ…å«2D顶点的数组的Flag。" #: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330 -#, fuzzy msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit." -msgstr "æ›¾ç”¨äºŽæ ‡è®°åŒ…å«2D顶点的数组的Flag。" +msgstr "ç”¨äºŽæ ‡è®°æ•°ç»„ä½¿ç”¨16ä½éª¨éª¼è€Œä¸æ˜¯8ä½çš„æ ‡å¿—。" #: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333 msgid "" "Flag used to mark that the array uses an octahedral representation of normal " "and tangent vectors rather than cartesian." -msgstr "" +msgstr "æ ‡å¿—ç”¨äºŽæ ‡è®°æ•°ç»„ä½¿ç”¨æ³•çº¿å’Œåˆ‡çº¿å‘é‡çš„å…«é¢è¡¨ç¤ºæ³•ï¼Œè€Œä¸æ˜¯ç¬›å¡å°”å¼ã€‚" #: doc/classes/Mesh.xml:195 -#, fuzzy msgid "" "Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant " "ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant " @@ -40435,9 +40776,11 @@ msgid "" "ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant " "ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly." msgstr "" -"曾用于快速设置 flags [constant ARRAY_COMPRESS_NORMAL], [constant " -"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant " -"ARRAY_COMPRESS_TEX_UV] å’Œ [constant ARRAY_COMPRESS_TEX_UV2] 。" +"ç”¨äºŽå¿«é€Ÿè®¾ç½®æ ‡å¿—[constant ARRAY_COMPRESS_VERTEX], [constant " +"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant " +"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant " +"ARRAY_COMPRESS_TEX_UV2] , [constant ARRAY_COMPRESS_WEIGHTS], å’Œ[constant " +"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] 。" #: doc/classes/Mesh.xml:198 msgid "Array of vertices." @@ -40480,7 +40823,6 @@ msgid "Helper tool to access and edit [Mesh] data." msgstr "用于帮助编辑和使用 [Mesh] ç½‘æ ¼æ•°æ®çš„工具。" #: doc/classes/MeshDataTool.xml:7 -#, fuzzy msgid "" "MeshDataTool provides access to individual vertices in a [Mesh]. It allows " "users to read and edit vertex data of meshes. It also creates an array of " @@ -40514,25 +40856,33 @@ msgid "" "OpenGL/Face-culling]winding order[/url] for front faces of triangle " "primitive modes." msgstr "" -"ç½‘æ ¼æ•°æ®å·¥å…·(MeshDataTool) æä¾›äº†å¯¹[Mesh]ä¸å•个顶点的访问。它å…许用户读å–和编" -"è¾‘ç½‘æ ¼çš„é¡¶ç‚¹æ•°æ®ã€‚它还创建了一个é¢å’Œè¾¹çš„æ•°ç»„。\n" -"è¦ä½¿ç”¨MeshDataTool,使用[method create_from_surface] æ¥åŠ è½½ä¸€ä¸ªMeshã€‚å½“ä½ ç»“æŸ" -"对数æ®çš„编辑åŽï¼Œä½¿ç”¨[method commit to surface] å°†æ•°æ®æäº¤åˆ°ä¸€ä¸ªç½‘æ ¼ä¸ã€‚\n" -"䏋颿˜¯ä¸€ä¸ªç”¨ä¾‹ï¼š\n" +"MeshDataToolæä¾›å¯¹[Mesh]ä¸å•个顶点的访问。它å…许用户读å–å’Œç¼–è¾‘ç½‘æ ¼çš„é¡¶ç‚¹æ•°" +"æ®ã€‚还å¯ä»¥åˆ›å»ºé¢å’Œè¾¹çš„æ•°ç»„。\n" +"è¦ä½¿ç”¨MeshDataTool,请使用[method create_from_surface]åŠ è½½ç½‘æ ¼ã€‚å½“å®Œæˆç¼–辑数" +"æ®åŽï¼Œç”¨[method commit_to_surface]å°†æ•°æ®æäº¤ç»™Mesh。\n" +"䏋颿˜¯å¦‚何使用MeshDataTool的例å。\n" "[codeblock]\n" +"var mesh = ArrayMesh.new()\n" +"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()." +"get_mesh_arrays())\n" "var mdt = MeshDataTool.new()\n" "mdt.create_from_surface(mesh, 0)\n" "for i in range(mdt.get_vertex_count()):\n" " var vertex = mdt.get_vertex(i)\n" -" ...\n" +" # 在这个例åä¸ï¼Œæˆ‘们将Mesh扩展了一个å•å…ƒï¼Œè¿™æ ·å°±ä¼šäº§ç”Ÿåˆ†ç¦»çš„é¢ï¼Œå› 为它是" +"å¹³é¢é˜´å½±ã€‚\n" +" vertex += mdt.get_vertex_normal(i)\n" +" # ä¿å˜ä½ 的改动。\n" " mdt.set_vertex(i, vertex)\n" "mesh.surface_remove(0)\n" "mdt.commit_to_surface(mesh)\n" +"var mi = MeshInstance.new()\n" +"mi.mesh = mesh\n" +"add_child(mi)\n" "[/codeblock]\n" -"è‹¥è¦è¿›è¡Œç¨‹åºå‡ 何生æˆï¼Œå‚阅[ArrayMesh],[ImmediateGeometry3D]å’Œ" -"[SurfaceTool]。\n" -"[b]Note: [/b] Godot使用顺时针 [url=https://learnopengl.com/Advanced-OpenGL/" -"Face-culling]winding order[/url]顺åºä¸ºä¸‰è§’形的默认å‰é¢ã€‚" +"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[SurfaceTool]çš„ç¨‹åºæ€§å‡ 何体生æˆã€‚\n" +"[b]注æ„:[/b] Godot对三角形原始模å¼çš„å‰ç«¯é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://" +"learnopengl.com/Advanced-OpenGL/Face-culling]ç¼ ç»•é¡ºåº[/url]。" #: doc/classes/MeshDataTool.xml:36 msgid "Clears all data currently in MeshDataTool." @@ -40719,7 +41069,6 @@ msgid "Node that instances meshes into a scenario." msgstr "ç½‘æ ¼å®žä¾‹ä¸Žåœºæ™¯ç›¸ç»“åˆçš„节点。" #: doc/classes/MeshInstance.xml:7 -#, fuzzy msgid "" "MeshInstance is a node that takes a [Mesh] resource and adds it to the " "current scenario by creating an instance of it. This is the class most often " @@ -40728,10 +41077,10 @@ msgid "" "[Mesh] has to be instanced more than thousands of times at close proximity, " "consider using a [MultiMesh] in a [MultiMeshInstance] instead." msgstr "" -"MeshInstance3D是一个节点,它获å–一个[Mesh]资æºï¼Œå¹¶é€šè¿‡åˆ›å»ºå®ƒçš„å®žä¾‹å°†å…¶æ·»åŠ åˆ°" -"当å‰åœºæ™¯ä¸ã€‚这是最常用的渲染3Då‡ ä½•çš„ç±»ï¼Œå¯ä»¥ç”¨æ¥åœ¨è®¸å¤šåœ°æ–¹å®žä¾‹ä¸€ä¸ª[Mesh]。这" -"å…许é‡ç”¨å‡ 何图形,å¯ä»¥èŠ‚çœèµ„æºã€‚当一个[Mesh]需è¦è¢«å®žä¾‹åŒ–ä¸Šåƒæ¬¡ä»¥ä¸Šæ—¶ï¼Œå¯ä»¥è€ƒ" -"虑在[MultiMeshInstance3d]ä¸ä½¿ç”¨[MultiMesh]。" +"MeshInstance是一个节点,它获å–[Mesh]资æºå¹¶åˆ›å»ºä¸€ä¸ªå®žä¾‹ï¼Œå°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯" +"ä¸ã€‚è¿™æ˜¯æœ€å¸¸è¢«ç”¨æ¥æ¸²æŸ“3Då‡ ä½•ä½“çš„ç±»ï¼Œè¿™å¯ä»¥åœ¨å¾ˆå¤šåœ°æ–¹ä½¿ç”¨[Mesh]实例,它å…许é‡" +"å¤ä½¿ç”¨å‡ 何体并节çœèµ„æºã€‚当[Mesh]å¿…é¡»åœ¨å¾ˆè¿‘çš„åœ°æ–¹è¢«å®žä¾‹åŒ–è¶…è¿‡æ•°åƒæ¬¡æ—¶ï¼Œå¯ä»¥è€ƒ" +"虑在[MultiMeshInstance]ä¸ä½¿ç”¨[MultiMesh]æ¥ä»£æ›¿ã€‚" #: doc/classes/MeshInstance.xml:21 msgid "" @@ -40744,38 +41093,41 @@ 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 "" +"这个助手创建[StaticBody]åèŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰ä»Žç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—çš„" +"[ConvexPolygonShape]碰撞形状。其主è¦ç”¨äºŽæµ‹è¯•。\n" +"如果[code]clean[/code]是[code]true[/code](默认),é‡å¤çš„顶点和内部顶点会被自" +"动移除。å¯ä»¥æŠŠå®ƒè®¾ç½®ä¸º[code]false[/code],以便在ä¸éœ€è¦çš„æƒ…况下使这个过程更" +"快。\n" +"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ¥ç®€åŒ–å‡ ä½•ä½“ä»¥å‡å°‘顶点" +"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。" #: doc/classes/MeshInstance.xml:29 -#, fuzzy msgid "" "This helper creates a [MeshInstance] child node with gizmos at every vertex " "calculated from the mesh geometry. It's mainly used for testing." msgstr "" -"这个帮助类创建了一个[MeshInstance3D]å节点,在æ¯ä¸ªé¡¶ç‚¹ä¸Šéƒ½æœ‰ä»Žç½‘æ ¼å‡ ä½•è®¡ç®—å‡º" -"æ¥çš„辅助线框。它主è¦ç”¨äºŽæµ‹è¯•。" +"这个辅助工具创建[MeshInstance]å节点,在æ¯ä¸ªé¡¶ç‚¹éƒ½æœ‰æ ¹æ®ç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—çš„è¾…" +"助线框。其主è¦ç”¨äºŽæµ‹è¯•。" #: doc/classes/MeshInstance.xml:35 -#, fuzzy msgid "" "This helper creates a [StaticBody] child node with multiple " "[ConvexPolygonShape] collision shapes calculated from the mesh geometry via " "convex decomposition. It's mainly used for testing." msgstr "" -"这个帮助类创建一个[StaticBody3D]åèŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹ä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„" -"[ConvexPolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。" +"这个助手创建[StaticBody]å节点,该节点具有多个[ConvexPolygonShape]碰撞形状," +"这些碰撞形状是通过凸é¢åˆ†è§£ä»Žç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„。其主è¦ç”¨äºŽæµ‹è¯•。" #: doc/classes/MeshInstance.xml:41 -#, fuzzy msgid "" "This helper creates a [StaticBody] child node with a [ConcavePolygonShape] " "collision shape calculated from the mesh geometry. It's mainly used for " "testing." msgstr "" -"这个助手创建一个[StaticBody3D]åèŠ‚ç‚¹ï¼Œä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„" -"[ConcavePolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。" +"这个助手创建[StaticBody]åèŠ‚ç‚¹ï¼Œå…¶ç¢°æ’žå½¢çŠ¶æ˜¯ç”±ç½‘æ ¼çš„å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„" +"[ConcavePolygonShape],其主è¦ç”¨äºŽæµ‹è¯•。" #: doc/classes/MeshInstance.xml:48 -#, fuzzy msgid "" "Returns the [Material] that will be used by the [Mesh] when drawing. This " "can return the [member GeometryInstance.material_override], the surface " @@ -40783,33 +41135,30 @@ msgid "" "[Material] defined in the [Mesh]. For example, if [member GeometryInstance." "material_override] is used, all surfaces will return the override material." msgstr "" -"返回将在绘制时被[Mesh]使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance3D." -"material_override],é¢ä¼šè¦†ç›–在[MeshInstance3D]ä¸å®šä¹‰çš„[Material],或者在" -"[Mesh]ä¸å®šä¹‰çš„表é¢[Material]。例如,如果使用[member GeometryInstance3D." -"Material_override]时,所有表é¢å°†è¿”回覆盖åŽçš„æè´¨ã€‚" +"返回[Mesh]绘制时使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance." +"material_override],这个[MeshInstance]ä¸å®šä¹‰çš„表é¢è¦†ç›–[Material],或者[Mesh]" +"ä¸å®šä¹‰çš„表é¢[Material]。例如,如果使用[member GeometryInstance." +"material_override],所有的表é¢éƒ½ä¼šè¿”回覆盖的æè´¨ã€‚" #: doc/classes/MeshInstance.xml:55 -#, fuzzy msgid "Returns the [Material] for a surface of the [Mesh] resource." -msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。" +msgstr "返回[Mesh]资æºè¡¨é¢çš„[Material]。" #: doc/classes/MeshInstance.xml:61 msgid "Returns the number of surface materials." msgstr "è¿”å›žè¡¨é¢æè´¨çš„æ•°é‡ã€‚" #: doc/classes/MeshInstance.xml:69 -#, fuzzy msgid "Sets the [Material] for a surface of the [Mesh] resource." -msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。" +msgstr "为[Mesh]资æºçš„表é¢è®¾ç½®[Material]。" #: doc/classes/MeshInstance.xml:75 msgid "The [Mesh] resource for the instance." msgstr "该实例的[Mesh]资æºã€‚" #: doc/classes/MeshInstance.xml:78 -#, fuzzy msgid "[NodePath] to the [Skeleton] associated with the instance." -msgstr "通å‘与该实例关è”çš„[Skeleton3D]çš„[NodePath]。" +msgstr "与实例相关è”[NodePath]çš„[Skeleton]。" #: doc/classes/MeshInstance.xml:81 msgid "Sets the skin to be used by this instance." @@ -40824,25 +41173,28 @@ msgid "" "software_skinning_fallback] for details about how software skinning is " "enabled." msgstr "" +"如果[code]true[/code],当使用软件蒙皮时,法线会被转æ¢ã€‚当ä¸éœ€è¦æ³•线时,设置为" +"[code]false[/code]以获得更好的性能。\n" +"关于如何å¯ç”¨è½¯ä»¶è’™çš®çš„细节,å‚阅[member ProjectSettings.rendering/quality/" +"skinning/software_skinning_fallback]。" #: doc/classes/MeshInstance2D.xml:4 msgid "Node used for displaying a [Mesh] in 2D." msgstr "用于在2D䏿˜¾ç¤º[Mesh]的节点。" #: doc/classes/MeshInstance2D.xml:7 -#, fuzzy msgid "" "Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " "[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " "to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." msgstr "" -"用于在2D䏿˜¾ç¤º[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸çš„工具从现有的[Sprite2D]æž„" -"建。选择“Sprite2Dâ€ï¼Œç„¶åŽâ€œConvert to Mesh2Dâ€ï¼Œåœ¨å¼¹å‡ºçª—å£ä¸é€‰æ‹©è®¾ç½®ï¼Œç„¶åŽ" -"按“Create Mesh2Dâ€ã€‚" +"用于在2D䏿˜¾ç¤º[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ 上的工具从现有的[Sprite]æž„" +"建。选择 \"Sprite\",然åŽé€‰æ‹© \"转æ¢ä¸ºMesh2D\",在弹出的窗å£ä¸é€‰æ‹©è®¾ç½®å¹¶æŒ‰ä¸‹ " +"\"创建Mesh2D\"。" #: doc/classes/MeshInstance2D.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_meshes.html" #: doc/classes/MeshInstance2D.xml:16 msgid "The [Mesh] that will be drawn by the [MeshInstance2D]." @@ -40862,13 +41214,12 @@ msgstr "" "一页[/url],以获得æµè¡Œå¼•æ“ŽæœŸæœ›çš„æ ‡å‡†æ³•å‘å›¾åæ ‡çš„æ¯”较。" #: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23 -#, fuzzy msgid "" "The [Texture] that will be used if using the default [CanvasItemMaterial]. " "Can be accessed as [code]TEXTURE[/code] in CanvasItem shader." msgstr "" -"如果使用默认的[CanvasItemMaterial], 本[Texture2D]将被使用。å¯ä»¥åœ¨CanvasItem" -"ç€è‰²å™¨ä¸è®¿é—®[code]TEXTURE[/code]。" +"如果使用默认的[CanvasItemMaterial],就会使用[Texture]。å¯ä»¥åœ¨CanvasItemç€è‰²å™¨" +"ä¸ä½œä¸º[code]TEXTURE[/code]访问。" #: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29 msgid "Emitted when the [member texture] is changed." @@ -40912,9 +41263,8 @@ msgid "Returns the item's mesh." msgstr "返回该 item çš„ç½‘æ ¼æ¨¡åž‹ã€‚" #: doc/classes/MeshLibrary.xml:52 -#, fuzzy msgid "Returns the transform applied to the item's mesh." -msgstr "è¿”å›žåº”ç”¨äºŽè¯¥é¡¹å¯¼èˆªç½‘æ ¼çš„è½¬æ¢ã€‚" +msgstr "è¿”å›žåº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚" #: doc/classes/MeshLibrary.xml:59 msgid "Returns the item's name." @@ -40929,7 +41279,6 @@ msgid "Returns the transform applied to the item's navigation mesh." msgstr "è¿”å›žåº”ç”¨äºŽè¯¥é¡¹å¯¼èˆªç½‘æ ¼çš„è½¬æ¢ã€‚" #: doc/classes/MeshLibrary.xml:80 -#, fuzzy msgid "" "When running in the editor, returns a generated item preview (a 3D rendering " "in isometric perspective). When used in a running project, returns the " @@ -40937,18 +41286,17 @@ msgid "" "set_item_preview]. Returns an empty [Texture] if no preview was manually set " "in a running project." msgstr "" -"在编辑器ä¸è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(ç‰è·é€è§†çš„3D渲染)。当在一个æ£åœ¨è¿è¡Œçš„项" -"ç›®ä¸ä½¿ç”¨æ—¶ï¼Œè¿”回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]进行设" -"置。如果在è¿è¡Œçš„é¡¹ç›®ä¸æ²¡æœ‰æ‰‹åŠ¨è®¾ç½®é¢„è§ˆï¼Œåˆ™è¿”å›žä¸€ä¸ªç©ºçš„[Texture2D]。" +"当在编辑器ä¸è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(ç‰è·é€è§†çš„3D渲染)。当在è¿è¡Œçš„项目ä¸" +"使用时,返回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]æ¥è®¾ç½®ã€‚如果" +"在è¿è¡Œçš„é¡¹ç›®ä¸æ²¡æœ‰æ‰‹åŠ¨è®¾ç½®é¢„è§ˆï¼Œè¿”å›žç©ºçš„[Texture]。" #: doc/classes/MeshLibrary.xml:87 -#, fuzzy msgid "" "Returns an item's collision shapes.\n" "The array consists of each [Shape] followed by its [Transform]." msgstr "" "返回项目的碰撞形状。\n" -"数组由[Shape3D]和它的[Transform]组æˆã€‚" +"这个数组由æ¯ä¸ª[Shape]和它的[Transform]组æˆã€‚" #: doc/classes/MeshLibrary.xml:94 msgid "Gets an unused ID for a new item." @@ -40963,9 +41311,8 @@ msgid "Sets the item's mesh." msgstr "è®¾ç½®è¯¥é¡¹çš„ç½‘æ ¼ã€‚" #: doc/classes/MeshLibrary.xml:117 -#, fuzzy msgid "Sets the transform to apply to the item's mesh." -msgstr "设置转æ¢åº”ç”¨äºŽè¯¥é¡¹çš„å¯¼èˆªç½‘æ ¼ã€‚" +msgstr "设置è¦åº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚" #: doc/classes/MeshLibrary.xml:125 msgid "" @@ -40989,16 +41336,15 @@ msgid "Sets a texture to use as the item's preview icon in the editor." msgstr "在编辑器ä¸è®¾ç½®è¦ç”¨ä½œè¯¥é¡¹é¢„è§ˆå›¾æ ‡çš„çº¹ç†ã€‚" #: doc/classes/MeshLibrary.xml:158 -#, fuzzy msgid "" "Sets an item's collision shapes.\n" "The array should consist of [Shape] objects, each followed by a [Transform] " "that will be applied to it. For shapes that should not have a transform, use " "[constant Transform.IDENTITY]." msgstr "" -"设置该项的碰撞形状。\n" -"数组应该由[Shape3D]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡åŽé¢éƒ½æœ‰ä¸€ä¸ª[Transform],它将被应用到该" -"Shape3D。对于ä¸åº”è¯¥æœ‰å˜æ¢çš„形状,使用 [constant Transform.IDENTITY]。" +"设置项目的碰撞形状。\n" +"数组应由[Shape]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡ä¹‹åŽéƒ½æœ‰åº”用于它的[Transform]。对于ä¸åº”有å˜" +"æ¢çš„形状,使用[constant Transform.IDENTITY]。" #: doc/classes/MeshTexture.xml:4 msgid "Simple texture that uses a mesh to draw itself." @@ -41029,7 +41375,6 @@ msgid "Generic mobile VR implementation." msgstr "通用移动VR实现。" #: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7 -#, fuzzy msgid "" "This is a generic mobile VR implementation where you need to provide details " "about the phone and HMD used. It does not rely on any existing framework. " @@ -41045,16 +41390,16 @@ msgid "" " get_viewport().arvr = true\n" "[/codeblock]" msgstr "" -"这是一个通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰‹æœºå’Œä½¿ç”¨çš„HMD的详细信æ¯ã€‚它ä¸ä¾èµ–于" -"任何现有的框架。这是我们拥有的最基础的接å£ã€‚ä¸ºäº†è¾¾åˆ°æœ€ä½³æ•ˆæžœï¼Œä½ éœ€è¦ä¸€éƒ¨å¸¦æœ‰" -"é™€èžºä»ªå’ŒåŠ é€Ÿè®¡çš„æ‰‹æœºã€‚\n" -"注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œæ‘„åƒå¤´ä¹Ÿä¼šå‡è®¾è€³æœºåœ¨1.85ç±³çš„é«˜åº¦ã€‚ä½ å¯ä»¥é€šè¿‡è®¾ç½®" -"[member eye_height]æ¥æ”¹å˜å®ƒã€‚\n" -"åˆå§‹åŒ–该接å£çš„æ–¹æ³•如下:\n" +"这是通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰€ä½¿ç”¨çš„æ‰‹æœºå’ŒHMD的细节。它ä¸ä¾èµ–于任何现" +"有的框架。这是我们拥有的最基本的接å£ã€‚ä¸ºäº†è¾¾åˆ°æœ€å¥½çš„æ•ˆæžœï¼Œä½ éœ€è¦ä¸€ä¸ªæœ‰é™€èžºä»ª" +"å’ŒåŠ é€Ÿå™¨çš„æ‰‹æœºã€‚\n" +"请注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œç›¸æœºä¹Ÿä¼šå‡å®šè€³æœºå¤„于1.85ç±³çš„é«˜åº¦ã€‚ä½ å¯ä»¥é€šè¿‡è®¾ç½®" +"[member eye_height]æ¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚\n" +"ä½ å¯ä»¥æŒ‰ä»¥ä¸‹æ–¹å¼åˆå§‹åŒ–这个接å£:\n" "[codeblock]\n" -"var interface = XRServer.find_interface(\"Native mobile\")\n" +"var interface = ARVRServer.find_interface(\"Native mobile\")\n" "if interface and interface.initialize():\n" -" get_viewport().xr = true\n" +" get_viewport().arvr = true\n" "[/codeblock]" #: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22 @@ -41068,11 +41413,10 @@ msgid "The width of the display in centimeters." msgstr "显示器的宽度,以厘米为å•ä½ã€‚" #: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28 -#, fuzzy msgid "" "The height at which the camera is placed in relation to the ground (i.e. " "[ARVROrigin] node)." -msgstr "ç›¸æœºç›¸å¯¹äºŽåœ°é¢æ”¾ç½®çš„高度(å³[XROrigin3D]节点)。" +msgstr "æ‘„åƒæœºç›¸å¯¹äºŽåœ°é¢æ‰€å¤„的高度,å³[ARVROrigin]节点。" #: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31 msgid "" @@ -41105,7 +41449,6 @@ msgid "Provides high-performance mesh instancing." msgstr "æä¾›é«˜æ€§èƒ½çš„ç½‘æ ¼å®žä¾‹åŒ–ã€‚" #: doc/classes/MultiMesh.xml:7 -#, fuzzy msgid "" "MultiMesh provides low-level mesh instancing. Drawing thousands of " "[MeshInstance] nodes can be slow, since each object is submitted to the GPU " @@ -41118,20 +41461,20 @@ msgid "" "Since instances may have any behavior, the AABB used for visibility must be " "provided by the user." msgstr "" -"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„ç½‘æ ¼å®žä¾‹åŒ–åŠŸèƒ½ã€‚ç»˜åˆ¶æˆåƒä¸Šä¸‡çš„[MeshInstance3D]节点å¯èƒ½" -"ä¼šå¾ˆæ…¢ï¼Œå› ä¸ºæ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n" +"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„ç½‘æ ¼å®žä¾‹åŒ–åŠŸèƒ½ã€‚ç»˜åˆ¶æ•°ä»¥åƒè®¡çš„[MeshInstance]节点å¯èƒ½ä¼š" +"å¾ˆæ…¢ï¼Œå› ä¸ºæ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n" "MultiMeshè¦å¿«å¾—å¤šï¼Œå› ä¸ºå®ƒå¯ä»¥é€šè¿‡ä¸€æ¬¡ç»˜åˆ¶è°ƒç”¨æ¥ç»˜åˆ¶æˆåƒä¸Šä¸‡çš„实例,从而å‡å°‘" "API的开销。\n" -"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› 为æ¯ä¸€ä¸ªå®žä¾‹éƒ½ä¼šè¢«æ¸²æŸ“(它" -"们在空间上被索引为一整个对象)。\n" -"由于实例å¯ä»¥æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚" +"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› 为æ¯ä¸€ä¸ªå®žä¾‹æ€»æ˜¯ä¼šè¢«æ¸²æŸ“" +"(它们在空间上被索引为整个对象)。\n" +"由于实例å¯èƒ½å…·æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚" #: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/" "animating_thousands_of_fish.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/" "animating_thousands_of_fish.html" #: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13 @@ -41139,14 +41482,16 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/" +"using_multimesh.html" #: doc/classes/MultiMesh.xml:20 msgid "" "Returns the visibility axis-aligned bounding box in local space. See also " "[method VisualInstance.get_transformed_aabb]." msgstr "" +"返回局部空间ä¸å¯è§æ€§è½´å¯¹é½çš„边界框。å‚阅[method VisualInstance." +"get_transformed_aabb]。" #: doc/classes/MultiMesh.xml:27 msgid "Gets a specific instance's color." @@ -41176,9 +41521,15 @@ msgid "" "(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/" "code] is stored as 4 floats." msgstr "" +"一次性设置所有与实例相关的数æ®ã€‚这在从ç£ç›˜åŠ è½½æ•°æ®æˆ–从GDNativeå‡†å¤‡æ•°æ®æ—¶ç‰¹åˆ«" +"有用。\n" +"所有的数æ®éƒ½è¢«æ‰“包在一个大的浮点数数组ä¸ã€‚数组å¯èƒ½çœ‹èµ·æ¥åƒè¿™æ ·ã€‚实例1çš„å˜æ¢ï¼Œ" +"实例1的颜色数æ®ï¼Œå®žä¾‹1的自定义数æ®ï¼Œå®žä¾‹2çš„å˜æ¢ï¼Œå®žä¾‹2的颜色数æ®ï¼Œç‰ç‰ã€‚\n" +"[Transform]å˜å‚¨ä¸º12浮点数,[Transform2D]å˜å‚¨ä¸º8浮点数,[code]COLOR_8BIT[/" +"code] / [code]CUSTOM_DATA_8BIT[/code]å˜å‚¨ä¸º1浮点数(原为4å—节)," +"[code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/code] å˜å‚¨ä¸º4浮点数。" #: doc/classes/MultiMesh.xml:65 -#, fuzzy msgid "" "Sets the color of a specific instance by [i]multiplying[/i] the mesh's " "existing vertex colors.\n" @@ -41186,21 +41537,19 @@ msgid "" "[code]null[/code] on the [MultiMesh] and [member SpatialMaterial." "vertex_color_use_as_albedo] is [code]true[/code] on the material." msgstr "" -"设置一个特定实例的颜色。\n" -"为了使颜色生效,确ä¿[MultiMesh]上的[member use_colors]是[code]true[/code],æ" -"质上的[member BaseMaterial3D.vertex_color_use_as_albedo] 是[code]true[/" -"code]。" +"通过[i]乘以[/i]ç½‘æ ¼çš„çŽ°æœ‰é¡¶ç‚¹é¢œè‰²æ¥è®¾ç½®ç‰¹å®šå®žä¾‹çš„颜色。\n" +"为了使颜色生效,请确ä¿[MultiMesh]上的[member color_format]䏿˜¯[code]null[/" +"code],并且[member SpatialMaterial.vertex_color_use_as_albedo]上的æè´¨æ˜¯" +"[code]true[/code]。" #: doc/classes/MultiMesh.xml:74 -#, fuzzy msgid "" "Sets custom data for a specific instance. Although [Color] is used, it is " "just a container for 4 floating point numbers. The format of the number can " "change depending on the [enum CustomDataFormat] used." msgstr "" -"为一个特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数" -"的容器。\n" -"为了使用自定义数æ®ï¼Œç¡®ä¿[member use_custom_data]是[code]true[/code]。" +"为特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数的容" +"器。数å—çš„æ ¼å¼å¯ä»¥æ ¹æ®ä½¿ç”¨çš„[enum CustomDataFormat]æ¥æ”¹å˜ã€‚" #: doc/classes/MultiMesh.xml:82 msgid "Sets the [Transform] for a specific instance." @@ -41212,7 +41561,7 @@ msgstr "为特定实例设置 [Transform2D]。" #: doc/classes/MultiMesh.xml:96 msgid "Format of colors in color array that gets passed to shader." -msgstr "" +msgstr "ä¼ é€’ç»™ç€è‰²å™¨çš„颜色数组ä¸çš„é¢œè‰²æ ¼å¼ã€‚" #: doc/classes/MultiMesh.xml:99 msgid "Format of custom data in custom data array that gets passed to shader." @@ -41298,46 +41647,42 @@ msgid "Node that instances a [MultiMesh]." msgstr "实例化 [MultiMesh] 的节点。" #: doc/classes/MultiMeshInstance.xml:7 -#, fuzzy msgid "" "[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s " "based on a [MultiMesh] resource.\n" "This is useful to optimize the rendering of a high amount of instances of a " "given mesh (for example trees in a forest or grass strands)." msgstr "" -"[MultiMeshInstance3D] 是基于 [MultiMesh] 资æºå®žä¾‹åŒ– [GeometryInstance3D] 的专" -"用节点。\n" -"è¿™å¯¹äºŽä¼˜åŒ–ç»™å®šç½‘æ ¼çš„å¤§é‡å®žä¾‹ï¼ˆä¾‹å¦‚森林ä¸çš„æ ‘木或è‰ä¸›ï¼‰çš„æ¸²æŸ“很有用。" +"[MultiMeshInstance]是特有的节点,用于基于[MultiMesh]资æºçš„[GeometryInstance]" +"的实例。\n" +"è¿™å¯¹äºŽä¼˜åŒ–ç»™å®šç½‘æ ¼çš„å¤§é‡å®žä¾‹çš„æ¸²æŸ“是éžå¸¸æœ‰ç”¨çš„(例如,森林ä¸çš„æ ‘木或è‰ä¸›ï¼‰ã€‚" #: doc/classes/MultiMeshInstance.xml:12 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/" +"using_multi_mesh_instance.html" #: doc/classes/MultiMeshInstance.xml:19 -#, fuzzy msgid "" "The [MultiMesh] resource that will be used and shared among all instances of " "the [MultiMeshInstance]." -msgstr "" -"将在 [MultiMeshInstance3D] 的所有实例之间使用和共享的 [MultiMesh] 资æºã€‚" +msgstr "在[MultiMeshInstance]的所有实例ä¸ä½¿ç”¨å’Œå…±äº«çš„[MultiMesh]资æºã€‚" #: doc/classes/MultiMeshInstance2D.xml:4 msgid "Node that instances a [MultiMesh] in 2D." msgstr "在 2D ä¸å®žä¾‹åŒ– [MultiMesh] 的节点。" #: doc/classes/MultiMeshInstance2D.xml:7 -#, fuzzy msgid "" "[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] " "resource in 2D.\n" "Usage is the same as [MultiMeshInstance]." msgstr "" -"[MultiMeshInstance2D] 是一个专门用于在 2D ä¸å®žä¾‹åŒ– [MultiMesh] 资æºçš„节点。\n" -"用法与[MultiMeshInstance3D]相åŒã€‚" +"[MultiMeshInstance2D]是特有的节点,用于实例化2Dçš„[MultiMesh]资æºã€‚\n" +"使用方法与[MultiMeshInstance]相åŒã€‚" #: doc/classes/MultiMeshInstance2D.xml:16 msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]." @@ -41348,7 +41693,6 @@ msgid "High-level multiplayer API." msgstr "高级多人游æˆAPI。" #: doc/classes/MultiplayerAPI.xml:7 -#, fuzzy msgid "" "This class implements most of the logic behind the high-level multiplayer " "API. See also [NetworkedMultiplayerPeer].\n" @@ -41361,11 +41705,13 @@ msgid "" "detail and isn't meant to be used by non-Godot servers. It may change " "without notice." msgstr "" -"这个类实现了高层多人游æˆAPI背åŽçš„大部分逻辑。\n" -"默认情况下,[SceneTree]æœ‰ä¸€ä¸ªå¯¹è¯¥ç±»çš„å¼•ç”¨ï¼Œç”¨äºŽåœ¨æ•´ä¸ªåœºæ™¯ä¸æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½" -"(å³RPC/RSET)。\n" -"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥è¦†ç›–特定节点使用的多人游æˆ" -"API实例,有效地å…许在åŒä¸€åœºæ™¯ä¸åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚" +"该类实现了高阶多人游æˆAPI背åŽçš„大部分逻辑。å‚阅[NetworkedMultiplayerPeer]。\n" +"默认情况下,[SceneTree]æœ‰å¯¹è¯¥ç±»çš„å¼•ç”¨ï¼Œç”¨äºŽåœ¨æ•´ä¸ªåœºæ™¯ä¸æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½ï¼ˆå³" +"RPC/RSET)。\n" +"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥é‡å†™ç‰¹å®šèŠ‚ç‚¹ä½¿ç”¨çš„å¤šäººæ¸¸æˆ" +"API实例,从而有效地å…许在åŒä¸€åœºæ™¯ä¸åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚\n" +"[b]注æ„:[/b] 高阶的多人游æˆAPIåè®®å®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éžGodotæœåŠ¡å™¨ä½¿" +"用。它å¯èƒ½ä¼šæ”¹å˜ï¼Œä¸åšå¦è¡Œé€šçŸ¥ã€‚" #: doc/classes/MultiplayerAPI.xml:18 msgid "" @@ -41433,7 +41779,6 @@ msgstr "" "å³å‘所有对ç‰ä½“广æ’。" #: doc/classes/MultiplayerAPI.xml:71 -#, fuzzy msgid "" "If [code]true[/code] (or if the [member network_peer] has [member PacketPeer." "allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will " @@ -41442,8 +41787,9 @@ msgid "" "Do not use this option if the serialized object comes from untrusted sources " "to avoid potential security threats such as remote code execution." msgstr "" -"如果[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç 和解" -"ç 。\n" +"如果[code]true[/code],或者如果[member network_peer]çš„[member PacketPeer." +"allow_object_decoding]设置为[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期" +"间的对象进行编ç 和解ç 。\n" "[b]è¦å‘Šï¼š[/b] ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç 。如果åºåˆ—化的对象æ¥è‡ªä¸å—" "ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚" @@ -41472,7 +41818,6 @@ msgstr "" "连接。" #: doc/classes/MultiplayerAPI.xml:81 -#, fuzzy msgid "" "The root node to use for RPCs. Instead of an absolute path, a relative path " "will be used to find the node upon which the RPC should be executed.\n" @@ -41480,10 +41825,9 @@ msgid "" "managed by different MultiplayerAPI, allowing for example to run both client " "and server in the same scene." msgstr "" -"设置用于 RPC çš„åŸºæœ¬æ ¹èŠ‚ç‚¹ã€‚å°†ä½¿ç”¨ç›¸å¯¹è·¯å¾„è€Œä¸æ˜¯ç»å¯¹è·¯å¾„æ¥æŸ¥æ‰¾åº”在其上执行 " -"RPC 的节点。\n" -"这有效地å…è®¸åœºæ™¯æ ‘çš„ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„ MultiplayerAPI 管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€åœºæ™¯" -"ä¸è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚" +"用于RPCçš„æ ¹èŠ‚ç‚¹ã€‚ä¸ä½¿ç”¨ç»å¯¹è·¯å¾„,而是使用相对路径æ¥å¯»æ‰¾åº”该执行RPC的节点。\n" +"这有效地å…è®¸åœºæ™¯æ ‘çš„ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„MultiplayerAPI管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€ä¸ªåœºæ™¯" +"ä¸åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚" #: doc/classes/MultiplayerAPI.xml:88 msgid "" @@ -41585,13 +41929,12 @@ msgstr "" "å—æ¥è‡ªèŠ‚ç‚¹çš„ç½‘ç»œä¸»ç«™çš„è°ƒç”¨æˆ–å±žæ€§æ›´æ”¹ï¼Œè§[method Node.set_network_master]。" #: doc/classes/MultiplayerAPI.xml:135 -#, fuzzy msgid "" "[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the " "[code]slave[/code] keyword." msgstr "" -"行为类似于 [constant RPC_MODE_PUPPET],但也会使调用或属性在本地改å˜ã€‚类似于 " -"[code]puppetsync[/code] 关键å—。" +"[i]已废弃。[/i] 使用[constant RPC_MODE_PUPPET]代替。类似于[code]slave[/code]" +"关键å—。" #: doc/classes/MultiplayerAPI.xml:138 msgid "" @@ -41602,13 +41945,12 @@ msgstr "" "[code]remoteesync[/code]关键å—。" #: doc/classes/MultiplayerAPI.xml:141 -#, fuzzy msgid "" "[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to " "the [code]sync[/code] keyword." msgstr "" -"行为类似于[constant RPC_MODE_REMOTE],但也会使调用或属性在本地改å˜ã€‚类似于" -"[code]remoteesync[/code]关键å—。" +"[i]已废弃。[/i] 使用[constant RPC_MODE_REMOTESYNC]代替。类似于[code]sync[/" +"code]关键å—。" #: doc/classes/MultiplayerAPI.xml:144 msgid "" @@ -41647,8 +41989,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/" +"using_multiple_threads.html" #: doc/classes/Mutex.xml:16 msgid "" @@ -41660,14 +42002,15 @@ msgstr "" "[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº’æ–¥é”的所有æƒï¼Œè¯¥å‡½æ•°å°†æ— 阻塞地返回。" #: doc/classes/Mutex.xml:23 -#, fuzzy msgid "" "Tries locking this [Mutex], but does not block. Returns [constant OK] on " "success, [constant ERR_BUSY] otherwise.\n" "[b]Note:[/b] This function returns [constant OK] if the thread already has " "ownership of the mutex." msgstr "" -"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。" +"试图é”定æ¤[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant " +"ERR_BUSY]。\n" +"[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº†è¯¥Mutex的所有æƒï¼Œè¯¥å‡½æ•°è¿”回[constant OK]。" #: doc/classes/Mutex.xml:30 msgid "" @@ -41713,7 +42056,6 @@ msgstr "" "å—符串。" #: modules/gdnative/doc_classes/NativeScript.xml:40 -#, fuzzy msgid "" "Constructs a new object of the base type with a script of this type already " "attached.\n" @@ -41721,8 +42063,8 @@ msgid "" "passed to the native constructor function. This will change with in a future " "API extension." msgstr "" -"æž„å»ºä¸€ä¸ªåŸºæœ¬ç±»åž‹çš„æ–°å¯¹è±¡ï¼Œå¹¶é™„åŠ ä¸€ä¸ªè¯¥ç±»åž‹çš„è„šæœ¬ã€‚\n" -"[i]注æ„[/i]ã€‚ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°éƒ½å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’ç»™æœ¬åœ°æž„é€ å‡½æ•°ã€‚è¿™å°†" +"æž„å»ºåŸºç¡€ç±»åž‹çš„æ–°å¯¹è±¡ï¼Œå¹¶é™„åŠ æ¤ç±»åž‹çš„脚本。\n" +"[b]注æ„:[/b] ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’ç»™å±€éƒ¨æž„é€ å‡½æ•°ã€‚è¿™å°†" "在未æ¥çš„APIæ‰©å±•ä¸æ”¹å˜ã€‚" #: doc/classes/Navigation.xml:4 @@ -41730,7 +42072,6 @@ msgid "Mesh-based navigation and pathfinding node." msgstr "åŸºäºŽç½‘æ ¼çš„å¯¼èˆªå’Œå¯»è·¯èŠ‚ç‚¹ã€‚" #: doc/classes/Navigation.xml:7 -#, fuzzy msgid "" "Provides navigation and pathfinding within a collection of " "[NavigationMesh]es. By default, these will be automatically collected from " @@ -41742,19 +42083,21 @@ msgid "" "not always return optimal paths as expected. These issues will be fixed in " "Godot 4.0." msgstr "" -"在[NavigationMesh]的集åˆä¸æä¾›å¯¼èˆªå’Œå¯»è·¯ã€‚这将会从å节点[NavigationRegion3D]" -"ä¸è¢«è‡ªåŠ¨æ”¶é›†ã€‚é™¤äº†åŸºæœ¬çš„å¯»è·¯ï¼Œè¿™ä¸ªç±»è¿˜å¸®åŠ©å¯¼èˆªä»£ç†ä¸Žå¯¼èˆªä¸Šçš„ç½‘æ ¼å¯¹é½ã€‚" +"在[NavigationMesh]的集åˆä¸æä¾›å¯¼èˆªå’Œå¯»è·¯åŠŸèƒ½ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œè¿™äº›å°†è‡ªåŠ¨ä»Žå" +"[NavigationMeshInstance]èŠ‚ç‚¹ä¸æ”¶é›†ï¼Œä¹Ÿå¯ä»¥é€šè¿‡[method navmesh_add]峿—¶æ·»åŠ ã€‚" +"除了基本的寻路之外,这个类还能帮助导航代ç†ä¸Žå…¶æ‰€å¯¼èˆªçš„ç½‘æ ¼å¯¹é½ã€‚\n" +"[b]注æ„:[/b] ç›®å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„æœŸçš„é‚£æ ·è¿”å›žæœ€ä½³" +"路径。这些问题将在Godot 4.0ä¸å¾—到解决。" #: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10 msgid "https://godotengine.org/asset-library/asset/124" msgstr "https://godotengine.org/asset-library/asset/124" #: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18 -#, fuzzy msgid "" "Returns the navigation point closest to the point given. Points are in local " "coordinate space." -msgstr "è¿”å›žæŒ‡å®šåæ ‡çš„图集或自动图å—ä¸ï¼Œå图å—的导航多边形。" +msgstr "返回最接近给定点的导航点。点ä½äºŽå±€éƒ¨åæ ‡ç©ºé—´ã€‚" #: doc/classes/Navigation.xml:25 msgid "" @@ -41788,7 +42131,6 @@ msgstr "" "å¯¼èˆªç½‘æ ¼ä¹‹é—´çš„äº¤ç‚¹ã€‚å¦‚æžœæ‰¾åˆ°å¤šä¸ªäº¤ç‚¹ï¼Œåˆ™è¿”å›žæœ€æŽ¥è¿‘çº¿æ®µèµ·ç‚¹çš„äº¤ç‚¹ã€‚" #: doc/classes/Navigation.xml:50 -#, fuzzy msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -41797,9 +42139,11 @@ msgid "" "[b]Note:[/b] This method has known issues and will often return non-optimal " "paths. These issues will be fixed in Godot 4.0." msgstr "" -"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸ã€‚如果[code]optimize[/code] 为 " -"[code]true[/code](默认值),则在路径计算ä¸è€ƒè™‘与æ¯ä¸ª[NavigationMesh]相关è”的代" -"ç†å±žæ€§(åŠå¾„ã€é«˜åº¦ç‰),å¦åˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚" +"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸ã€‚如果[code]optimize[/code]是" +"[code]true[/code](默认),与æ¯ä¸ª[NavigationMesh]相关的代ç†å±žæ€§ï¼ˆåŠå¾„ã€é«˜åº¦" +"ç‰ï¼‰åœ¨è·¯å¾„计算ä¸è¢«è€ƒè™‘,å¦åˆ™å…¶è¢«å¿½ç•¥ã€‚\n" +"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在" +"Godot 4.0ä¸å¾—到修æ£ã€‚" #: doc/classes/Navigation.xml:60 msgid "" @@ -41813,14 +42157,12 @@ msgstr "" "çš„ [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。" #: doc/classes/Navigation.xml:67 -#, fuzzy msgid "Removes the [NavigationMesh] with the given ID." -msgstr "返回指定å称的动画节点。" +msgstr "移除具有指定IDçš„[NavigationMesh]。" #: doc/classes/Navigation.xml:75 -#, fuzzy msgid "Sets the transform applied to the [NavigationMesh] with the given ID." -msgstr "è¿”å›žåº”ç”¨äºŽè¯¥é¡¹å¯¼èˆªç½‘æ ¼çš„è½¬æ¢ã€‚" +msgstr "设置应用于具有指定IDçš„[NavigationMesh]çš„å˜æ¢ã€‚" #: doc/classes/Navigation.xml:81 msgid "" @@ -41835,7 +42177,6 @@ msgid "2D navigation and pathfinding node." msgstr "2D导航和寻路节点。" #: doc/classes/Navigation2D.xml:7 -#, fuzzy msgid "" "Navigation2D provides navigation and pathfinding within a 2D area, specified " "as a collection of [NavigationPolygon] resources. By default, these are " @@ -41845,8 +42186,11 @@ msgid "" "not always return optimal paths as expected. These issues will be fixed in " "Godot 4.0." msgstr "" -"Navigation2D在一个2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集" -"åˆã€‚这些资æºè¢«è‡ªåŠ¨ä»Žå[NavigationRegion2D]èŠ‚ç‚¹ä¸æ”¶é›†ã€‚" +"Navigation2D在2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集åˆã€‚默" +"认情况下,这些资æºè‡ªåŠ¨ä»Žå[NavigationPolygonInstance]èŠ‚ç‚¹ä¸æ”¶é›†ï¼Œä½†å…¶ä¹Ÿå¯ä»¥é€š" +"过[method navpoly_add]峿—¶æ·»åŠ ã€‚\n" +"[b]注æ„:[/b] 当å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„æœŸçš„é‚£æ ·è¿”å›žæœ€ä½³" +"的路径。这些问题将在Godot 4.0ä¸å¾—到解决。" #: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27 msgid "https://godotengine.org/asset-library/asset/117" @@ -41865,7 +42209,6 @@ msgstr "" "给定的所有者(如果çœç•¥ [code]owner[/code] 傿•°ï¼Œåˆ™è¿”回 [code]null[/code])。" #: doc/classes/Navigation2D.xml:34 -#, fuzzy msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the path " @@ -41873,8 +42216,10 @@ msgid "" "[b]Note:[/b] This method has known issues and will often return non-optimal " "paths. These issues will be fixed in Godot 4.0." msgstr "" -"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸ã€‚如果[code]optimize[/code]为" -"[code]true[/code](默认),则路径将通过åˆå¹¶è·¯å¾„段æ¥å¹³æ»‘。" +"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸ã€‚如果[code]optimize[/code]为" +"[code]true[/code](默认值),路径将尽å¯èƒ½åœ°åˆå¹¶è·¯å¾„段,从而平滑。\n" +"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在" +"Godot 4.0ä¸å¾—到解决。" #: doc/classes/Navigation2D.xml:44 msgid "" @@ -41888,15 +42233,13 @@ msgstr "" "çš„ [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。" #: doc/classes/Navigation2D.xml:51 -#, fuzzy msgid "Removes the [NavigationPolygon] with the given ID." -msgstr "返回图å—的导航多边形。" +msgstr "移除具有指定IDçš„[NavigationPolygon]。" #: doc/classes/Navigation2D.xml:59 -#, fuzzy msgid "" "Sets the transform applied to the [NavigationPolygon] with the given ID." -msgstr "è¿”å›žåº”ç”¨äºŽè¯¥é¡¹å¯¼èˆªç½‘æ ¼çš„è½¬æ¢ã€‚" +msgstr "设置应用于具有指定IDçš„[NavigationPolygon]çš„å˜æ¢ã€‚" #: doc/classes/NavigationMesh.xml:4 msgid "A mesh to approximate the walkable areas and obstacles." @@ -41918,10 +42261,9 @@ msgid "" msgstr "使用调用[method get_vertices]å¾—åˆ°çš„é¡¶ç‚¹çš„ç´¢å¼•æ·»åŠ ä¸€ä¸ªå¤šè¾¹å½¢ã€‚" #: doc/classes/NavigationMesh.xml:23 -#, fuzzy msgid "" "Clears the array of polygons, but it doesn't clear the array of vertices." -msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。" +msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除顶点数组。" #: doc/classes/NavigationMesh.xml:30 msgid "" @@ -41930,30 +42272,26 @@ msgid "" msgstr "é€šè¿‡æ ¹æ® [Mesh] 设置顶点和索引æ¥åˆå§‹åŒ–å¯¼èˆªç½‘æ ¼ã€‚" #: doc/classes/NavigationMesh.xml:37 -#, fuzzy msgid "" "Returns whether the specified [code]bit[/code] of the [member geometry/" "collision_mask] is set." -msgstr "如果指定碰撞é®ç½©bitä½è¢«è®¾ç½®ï¼Œè¿”回[code]true[/code]。" +msgstr "返回[member geometry/collision_mask]的指定[code]bit[/code]是å¦è¢«è®¾ç½®ã€‚" #: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81 -#, fuzzy msgid "" "Returns a [PoolIntArray] containing the indices of the vertices of a created " "polygon." -msgstr "返回一个[PackedInt32Array],其ä¸åŒ…å«ä¸€ä¸ªåˆ›å»ºå¤šè¾¹å½¢çš„顶点的索引。" +msgstr "返回包å«åˆ›å»ºçš„多边形顶点索引的[PoolIntArray]。" #: doc/classes/NavigationMesh.xml:50 -#, fuzzy msgid "Returns the number of polygons in the navigation mesh." -msgstr "返回动画ä¸çš„帧数。" +msgstr "è¿”å›žå¯¼èˆªç½‘æ ¼ä¸çš„多边形数é‡ã€‚" #: doc/classes/NavigationMesh.xml:56 -#, fuzzy msgid "" "Returns a [PoolVector3Array] containing all the vertices being used to " "create the polygons." -msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。" +msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector3Array]。" #: doc/classes/NavigationMesh.xml:64 msgid "" @@ -41993,9 +42331,8 @@ msgstr "" "[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„[member cell/height]çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml:86 -#, fuzzy msgid "The maximum slope that is considered walkable, in degrees." -msgstr "一个 Agent 能移动的最大速度。" +msgstr "认为å¯è¡Œèµ°çš„æœ€å¤§å¡åº¦ï¼Œå•使˜¯åº¦ã€‚" #: doc/classes/NavigationMesh.xml:89 msgid "" @@ -42008,9 +42345,8 @@ msgstr "" "[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml:93 -#, fuzzy msgid "The Y axis cell size to use for fields." -msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚" +msgstr "ç”¨äºŽå—æ®µYè½´å•元的尺寸。" #: doc/classes/NavigationMesh.xml:96 msgid "The XZ plane cell size to use for fields." @@ -42051,9 +42387,8 @@ msgstr "" "è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºä¸å¯è¡Œèµ°ã€‚" #: doc/classes/NavigationMesh.xml:115 -#, fuzzy msgid "If [code]true[/code], marks spans that are ledges as non-walkable." -msgstr "如果[code]true[/code],则å¯ç”¨ä¼ 递弿Œ‰åŽ‹ã€‚" +msgstr "如果[code]true[/code]ï¼Œæ ‡è®°è¾¹ç¼˜é—´çš„è·¨åº¦ä¸ºä¸å¯è¡Œèµ°ã€‚" #: doc/classes/NavigationMesh.xml:118 msgid "" @@ -42074,18 +42409,16 @@ msgstr "" "PARSED_GEOMETRY_STATIC_COLLIDERS]或[constant PARSED_GEOMETRY_BOTH]æ—¶æ‰ä½¿ç”¨ã€‚" #: doc/classes/NavigationMesh.xml:125 -#, fuzzy msgid "" "Determines which type of nodes will be parsed as geometry. See [enum " "ParsedGeometryType] for possible values." -msgstr "设置关节类型。有关å¯èƒ½çš„值,请å‚阅[enum JointType]。" +msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ 何图形。å‚阅[enum ParsedGeometryType]。" #: doc/classes/NavigationMesh.xml:128 -#, fuzzy msgid "" "The source of the geometry used when baking. See [enum SourceGeometryMode] " "for possible values." -msgstr "背景模å¼ã€‚请å‚阅[enum BGMode]了解å¯èƒ½çš„值。" +msgstr "çƒ˜ç„™æ—¶ä½¿ç”¨çš„å‡ ä½•ä½“çš„æºã€‚å‚阅[enum SourceGeometryMode]。" #: doc/classes/NavigationMesh.xml:131 msgid "" @@ -42128,11 +42461,10 @@ msgstr "" "将把å•å…ƒæ ¼çš„æ•°é‡è®¾ä¸º64。" #: doc/classes/NavigationMesh.xml:146 -#, fuzzy msgid "" "Partitioning algorithm for creating the navigation mesh polys. See [enum " "SamplePartitionType] for possible values." -msgstr "图å—åŽŸç‚¹çš„åæ ‡ã€‚有关å¯èƒ½çš„值,å‚阅[enum TileOrigin]。" +msgstr "åˆ›å»ºå¯¼èˆªç½‘æ ¼polyså•元的分割算法。å‚阅[enum SamplePartitionType]。" #: doc/classes/NavigationMesh.xml:151 msgid "" @@ -42154,9 +42486,8 @@ msgid "" msgstr "层分区。用于具有ä¸å°åž‹ç“·ç –çš„å¹³é“ºå¯¼èˆªç½‘æ ¼çš„ä¸é”™é€‰æ‹©ã€‚" #: doc/classes/NavigationMesh.xml:160 -#, fuzzy msgid "Represents the size of the [enum SamplePartitionType] enum." -msgstr "表示[enum PortType]枚举的大å°ã€‚" +msgstr "表示[enum SamplePartitionType]枚举的大å°ã€‚" #: doc/classes/NavigationMesh.xml:163 msgid "" @@ -42182,9 +42513,8 @@ msgstr "" "PARSED_GEOMETRY_STATIC_COLLIDERS]." #: doc/classes/NavigationMesh.xml:172 -#, fuzzy msgid "Represents the size of the [enum ParsedGeometryType] enum." -msgstr "表示[enum PortType]枚举的大å°ã€‚" +msgstr "表示[enum ParsedGeometryType]枚举的大å°ã€‚" #: doc/classes/NavigationMesh.xml:175 msgid "" @@ -42208,14 +42538,12 @@ msgstr "" "定。" #: doc/classes/NavigationMesh.xml:184 -#, fuzzy msgid "Represents the size of the [enum SourceGeometryMode] enum." -msgstr "代表[enum ShaderMode]枚举的大å°ã€‚" +msgstr "表示[enum SourceGeometryMode]枚举的大å°ã€‚" #: doc/classes/NavigationMeshInstance.xml:4 -#, fuzzy msgid "Node that instances navigation meshes into a scenario." -msgstr "ç½‘æ ¼å®žä¾‹ä¸Žåœºæ™¯ç›¸ç»“åˆçš„节点。" +msgstr "å°†å¯¼èˆªç½‘æ ¼å®žä¾‹åŒ–ä¸ºåœºæ™¯çš„èŠ‚ç‚¹ã€‚" #: doc/classes/NavigationMeshInstance.xml:7 msgid "" @@ -42226,14 +42554,12 @@ msgstr "" "ä¾‹å°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯ä¸ã€‚" #: doc/classes/NavigationMeshInstance.xml:15 -#, fuzzy msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]." -msgstr "如果 [code]true[/code] 时,[AnimationTree] 将执行逻辑处ç†ã€‚" +msgstr "如果[code]true[/code]ï¼Œå¯¼èˆªç½‘æ ¼å°†ç”±[Navigation]使用。" #: doc/classes/NavigationMeshInstance.xml:18 -#, fuzzy msgid "The [NavigationMesh] resource for the instance." -msgstr "该实例的[Mesh]资æºã€‚" +msgstr "实例的[NavigationMesh]资æºã€‚" #: doc/classes/NavigationPolygon.xml:4 msgid "" @@ -42261,55 +42587,52 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" msgstr "" -"åˆ›å»ºå¤šè¾¹å½¢æœ‰ä¸¤ç§æ–¹æ³•。è¦ä¹ˆä½¿ç”¨[method add_outline]方法,è¦ä¹ˆä½¿ç”¨[method " -"add_polygon]方法。\n" -"使用[method add_outline]:\n" +"æœ‰ä¸¤ç§æ–¹æ³•æ¥åˆ›å»ºå¤šè¾¹å½¢ã€‚[method add_outline]或[method add_polygon]方法。\n" +"使用[method add_outline]方法:\n" "[codeblock]\n" "var polygon = NavigationPolygon.new()\n" -"var outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " +"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.add_outline(outline)\n" "polygon.make_polygons_from_outlines()\n" -"$NavigationRegion2D.navpoly = polygon\n" +"$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]\n" -"使用[method add_polygon] 和顶点数组的索引:\n" +"使用[method add_polygon]和顶点数组的索引:\n" "[codeblock]\n" "var polygon = NavigationPolygon.new()\n" -"var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), " -"Vector2(50, 50), Vector2(50, 0)])\n" +"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " +"50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PackedInt32Array(0, 3, 1)\n" +"var indices = PoolIntArray(0, 3, 1)\n" "polygon.add_polygon(indices)\n" -"$NavigationRegion2D.navpoly = polygon\n" +"$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" #: doc/classes/NavigationPolygon.xml:34 -#, fuzzy msgid "" "Appends a [PoolVector2Array] that contains the vertices of an outline to the " "internal array that contains all the outlines. You have to call [method " "make_polygons_from_outlines] in order for this array to be converted to " "polygons that the engine will use." msgstr "" -"将包å«è½®å»“顶点的[PackedVector2Array]è¿½åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“çš„å†…éƒ¨æ•°ç»„ã€‚ä½ å¿…é¡»è°ƒç”¨" -"[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使用的多边形。" +"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组ä¸ã€‚ä½ å¿…é¡»è°ƒç”¨" +"[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨çš„多边形。" #: doc/classes/NavigationPolygon.xml:42 -#, fuzzy msgid "" "Adds a [PoolVector2Array] that contains the vertices of an outline to the " "internal array that contains all the outlines at a fixed position. You have " "to call [method make_polygons_from_outlines] in order for this array to be " "converted to polygons that the engine will use." msgstr "" -"将包å«è½®å»“顶点的[PackedVector2Array]æ·»åŠ åˆ°åŒ…å«å›ºå®šä½ç½®çš„æ‰€æœ‰è½®å»“的内部数组" -"ä¸ã€‚ä½ å¿…é¡»è°ƒç”¨[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使" -"用的多边形。" +"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°å†…éƒ¨æ•°ç»„ä¸ï¼Œè¯¥æ•°ç»„åŒ…å«æ‰€æœ‰å›ºå®šä½ç½®çš„" +"è½®å»“ã€‚ä½ å¿…é¡»è°ƒç”¨[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨" +"的多边形。" #: doc/classes/NavigationPolygon.xml:55 msgid "" @@ -42324,11 +42647,10 @@ msgid "" msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。" #: doc/classes/NavigationPolygon.xml:68 -#, fuzzy msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." -msgstr "返回一个[PackedVector2Array],包å«åœ¨ç¼–辑器或脚本ä¸åˆ›å»ºçš„轮廓的顶点。" +msgstr "返回[PoolVector2Array],包å«åœ¨ç¼–è¾‘å™¨ä¸æˆ–通过脚本创建的轮廓的顶点。" #: doc/classes/NavigationPolygon.xml:74 msgid "" @@ -42340,11 +42662,10 @@ msgid "Returns the count of all polygons." msgstr "返回多边形的数é‡ã€‚" #: doc/classes/NavigationPolygon.xml:93 -#, fuzzy msgid "" "Returns a [PoolVector2Array] containing all the vertices being used to " "create the polygons." -msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。" +msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector2Array]。" #: doc/classes/NavigationPolygon.xml:99 msgid "Creates polygons from the outlines added in the editor or by script." @@ -42399,7 +42720,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/networking/" "high_level_multiplayer.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/networking/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/" "high_level_multiplayer.html" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13 @@ -42470,7 +42791,7 @@ msgid "" msgstr "" "创建æœåŠ¡å™¨ï¼Œé€šè¿‡[code]port[/code]监å¬è¿žæŽ¥ã€‚该端å£éœ€è¦æ˜¯ä¸€ä¸ªå¯ç”¨çš„ã€æœªä½¿ç”¨çš„端" "å£ï¼Œåœ¨0到65535之间。注æ„,低于1024çš„ç«¯å£æ˜¯ç‰¹æƒç«¯å£ï¼Œæ ¹æ®å¹³å°çš„ä¸åŒå¯èƒ½éœ€è¦æ" -"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[方法set_bind_ip]。默认IP是通é…符" +"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[method set_bind_ip]。默认IP是通é…符" "[code]\"*\"[/code]ï¼Œå®ƒç›‘å¬æ‰€æœ‰å¯ç”¨çš„æŽ¥å£ã€‚[code]max_clients[/code]是å…è®¸åŒæ—¶" "进行的最大客户数,å¯ä»¥ä½¿ç”¨ä»»ä½•æ•°å—,最高å¯è¾¾4095,尽管å¯å®žçŽ°çš„åŒæ—¶è¿›è¡Œçš„客户" "æ•°å¯èƒ½è¦ä½Žå¾—多,并且å–å†³äºŽåº”ç”¨ã€‚å…³äºŽå¸¦å®½å‚æ•°çš„其他细节,è§[method " @@ -42652,7 +42973,6 @@ msgstr "" "channel_count]。" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139 -#, fuzzy msgid "" "When enabled, the client or server created by this peer, will use " "[PacketPeerDTLS] instead of raw UDP sockets for communicating with the " @@ -42664,20 +42984,21 @@ msgid "" "dtls_verify] option, and configure the certificate accordingly via [method " "set_dtls_certificate]." msgstr "" -"当å¯ç”¨æ—¶ï¼Œç”±è¿™ä¸ªå¯¹ç‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]è€Œä¸æ˜¯åŽŸå§‹çš„" -"UDPå¥—æŽ¥å—æ¥ä¸Žè¿œç¨‹å¯¹ç‰ä½“通信。这将使通信使用DTLSåŠ å¯†ï¼Œä½†ä»£ä»·æ˜¯æ›´é«˜çš„èµ„æºä½¿ç”¨å’Œ" -"潜在的更大的包大å°ã€‚\n" -"注æ„:在创建DTLSæœåŠ¡å™¨æ—¶ï¼Œè¯·ç¡®ä¿é€šè¿‡[method set_dtls_key]å’Œ[method " -"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,请查看[member " -"dtls_verify]选项,并通过[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚" +"å¯ç”¨åŽï¼Œç”±è¯¥å¯¹ç‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]ï¼Œè€Œä¸æ˜¯åŽŸå§‹UDP套" +"接å—与远程对ç‰ä½“进行通信。通信使用DTLSåŠ å¯†ï¼Œä»£ä»·æ˜¯æ›´é«˜çš„èµ„æºå 用和å¯èƒ½æ›´å¤§çš„" +"æ•°æ®åŒ…。\n" +"[b]注æ„:[/b] 当创建DTLSæœåŠ¡å™¨æ—¶ï¼Œç¡®ä¿ç”¨[method set_dtls_key]å’Œ[method " +"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,查看[member " +"dtls_verify]选项,用[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145 -#, fuzzy msgid "" "No compression. This uses the most bandwidth, but has the upside of " "requiring the fewest CPU resources. This option may also be used to make " "network debugging using tools like Wireshark easier." -msgstr "ä¸åŽ‹ç¼©ã€‚è¿™å°†ä½¿ç”¨æœ€å¤šçš„å¸¦å®½ï¼Œä½†æœ‰ä¸€ä¸ªå¥½å¤„ï¼Œé‚£å°±æ˜¯éœ€è¦æœ€å°‘çš„CPU资æºã€‚" +msgstr "" +"æ— åŽ‹ç¼©ã€‚è¿™ä½¿ç”¨æœ€å¤šçš„å¸¦å®½ï¼Œä½†å…·æœ‰å 用最少 CPU 资æºçš„好处。这个选项å¯ä»¥ç”¨äºŽ" +"Wiresharkç‰å·¥å…·ä½¿ç”¨ï¼Œæ›´å®¹æ˜“进行网络调试。" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148 msgid "" @@ -42697,7 +43018,6 @@ msgstr "" "比,该选项使用的CPUèµ„æºæ›´å°‘,但使用的带宽更多。" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154 -#, fuzzy msgid "" "[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less " "bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using " @@ -42705,8 +43025,9 @@ msgid "" "packets smaller than 4 KB. Therefore, it's recommended to use other " "compression algorithms in most cases." msgstr "" -"[url = https://www.zlib.net/] Zlib压缩[/ url]。与[constant COMPRESS_FASTLZ]相" -"比,这个选项以使用更多CPU资æºä¸ºä»£ä»·ï¼Œæ¢å–更少的带宽å 用。" +"[url=https://www.zlib.net/]Zlib[/url]压缩。与 [constant COMPRESS_FASTLZ] 相" +"比,这个选项使用较少的带宽,但代价是使用更多的 CPU 资æºã€‚请注æ„,这ç§ç®—法对å°" +"于4KB的数æ®åŒ…䏿˜¯å¾ˆæœ‰æ•ˆã€‚å› æ¤ï¼Œå»ºè®®åœ¨å¤§å¤šæ•°æƒ…况下使用其他压缩算法。" #: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157 msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression." @@ -42890,22 +43211,18 @@ msgstr "" "ç´ ã€‚" #: doc/classes/NinePatchRect.xml:30 -#, fuzzy msgid "" "The stretch mode to use for horizontal stretching/tiling. See [enum " "NinePatchRect.AxisStretchMode] for possible values." msgstr "" -"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum " -"AxisStretchMode]。" +"水平拉伸/平铺时使用的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。" #: doc/classes/NinePatchRect.xml:33 -#, fuzzy msgid "" "The stretch mode to use for vertical stretching/tiling. See [enum " "NinePatchRect.AxisStretchMode] for possible values." msgstr "" -"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum " -"AxisStretchMode]。" +"用于垂直拉伸/平铺的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。" #: doc/classes/NinePatchRect.xml:36 msgid "" @@ -42923,34 +43240,31 @@ msgstr "" "å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" #: doc/classes/NinePatchRect.xml:43 -#, fuzzy msgid "" "The width of the 9-slice's left column. A margin of 16 means the 9-slice's " "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 "" -"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„é«˜åº¦ã€‚ä½ å¯ä»¥" -"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" +"9-切片的左列宽度。边è·ä¸º16æ„味ç€9切片的左角和侧é¢å°†æœ‰16åƒç´ çš„å®½åº¦ã€‚ä½ å¯ä»¥å•独" +"设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" #: doc/classes/NinePatchRect.xml:46 -#, fuzzy msgid "" "The width of the 9-slice's right column. A margin of 16 means the 9-slice's " "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 "" -"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„é«˜åº¦ã€‚ä½ å¯ä»¥" -"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" +"9-切片的å³åˆ—宽度。边è·ä¸º16æ„味ç€9切片的å³è§’和侧é¢å°†æœ‰16åƒç´ çš„å®½åº¦ã€‚ä½ å¯ä»¥å•独" +"设置所有4个边è·å€¼ï¼Œä»¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" #: doc/classes/NinePatchRect.xml:49 -#, fuzzy msgid "" "The height of the 9-slice's top row. A margin of 16 means the 9-slice's top " "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 "" -"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„é«˜åº¦ã€‚ä½ å¯ä»¥" -"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" +"9切片的顶行的高度。边è·ä¸º16æ„味ç€9切片的顶角和侧é¢å°†æœ‰16åƒç´ çš„é«˜åº¦ã€‚ä½ å¯ä»¥å•" +"独设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚" #: doc/classes/NinePatchRect.xml:52 msgid "" @@ -42972,11 +43286,10 @@ msgid "Emitted when the node's texture changes." msgstr "当节点的纹ç†å‘生å˜åŒ–时触å‘。" #: doc/classes/NinePatchRect.xml:67 -#, fuzzy msgid "" "Stretches the center texture across the NinePatchRect. This may cause the " "texture to be distorted." -msgstr "沿直线拉伸纹ç†ã€‚导入ç¦ç”¨[b]é‡å¤[/b]的纹ç†ä»¥èŽ·å¾—æœ€ä½³æ•ˆæžœã€‚" +msgstr "å°†ä¸é—´çº¹ç†æ‹‰ä¼¸åˆ°9切片矩形。这å¯èƒ½ä¼šå¯¼è‡´çº¹ç†å¤±çœŸã€‚" #: doc/classes/NinePatchRect.xml:70 msgid "" @@ -43071,53 +43384,54 @@ 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 "" -"节点是Godot的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„åèŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排列。" -"一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为åèŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟å§å¦¹ï¼Œå³è¯¥èŠ‚ç‚¹" -"的直接å节点,应该有唯一的åå—。\n" -"ä¸€ä¸ªèŠ‚ç‚¹æ ‘è¢«ç§°ä¸º[i]场景[/i]。场景å¯ä»¥è¢«ä¿å˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景" -"ä¸ã€‚这使得Godoté¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n" -"[b]Scene tree:[/b] [SceneTree]åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸" -"时,它将收到[constant NOTIFICATION_ENTER_TREE]通知,并触å‘å…¶[method " -"_enter_tree]回调。å节点总是在其父节点[i]之åŽ[/i]è¢«æ·»åŠ ï¼Œå³çˆ¶èŠ‚ç‚¹çš„[method " -"_enter_tree]回调将在其å节点的之å‰è¢«è§¦å‘。\n" -"ä¸€æ—¦æ‰€æœ‰çš„èŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸ï¼Œå®ƒä»¬å°±ä¼šæ”¶åˆ°[constant NOTIFICATION_READY]通" -"知,其å„自的[method _ready]回调被触å‘。对于节点组,[method _ready]回调是按相" -"å的顺åºè°ƒç”¨çš„,从å节点开始,å‘上移动到父节点。\n" -"è¿™æ„味ç€ï¼Œå½“æŠŠä¸€ä¸ªèŠ‚ç‚¹æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸æ—¶ï¼Œå°†ä½¿ç”¨ä¸‹é¢çš„顺åºè¿›è¡Œå›žè°ƒã€‚父节点的" -"[method _enter_tree],å节点的[method _enter_tree],å节点的[method _ready]," -"æœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„[method _ready],å³å¯¹æ•´ä¸ªåœºæ™¯æ ‘进行递归。\n" -"[b]Processing:[/b] 节点å¯ä»¥é‡å†™ \"处ç†\" 状æ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šæ”¶åˆ°å›žè°ƒï¼Œè¦" -"求它们进行处ç†ï¼Œå³åšä¸€äº›äº‹æƒ…。普通处ç†å°½å¯èƒ½å¿«åœ°å‘生,回调[method _process]," -"用[method set_process]切æ¢ï¼Œå–å†³äºŽå¸§é€ŸçŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´[i]delta[/i](å•ä½ï¼š" -"ç§’ï¼‰ä½œä¸ºå‚æ•°ä¼ 递。物ç†å¤„ç†æ¯ç§’å‘生固定次数(默认为60),回调[method " -"_physics_process],用[method set_physics_process]切æ¢ï¼Œå¯¹ç‰©ç†å¼•擎相关的代ç 很" -"有用。\n" -"节点也å¯ä»¥å¤„ç†è¾“å…¥äº‹ä»¶ã€‚å½“å‡ºçŽ°æ—¶ï¼Œç¨‹åºæ”¶åˆ°çš„æ¯ä¸ªè¾“å…¥è€Œè°ƒç”¨[method _input]函" -"数。在许多情况下,这å¯èƒ½æ˜¯å¤šä½™çš„,除éžç”¨äºŽç®€å•的项目,而[method " -"_unhandled_input]函数å¯èƒ½æ˜¯é¦–选;当输入事件没有被其他节点(通常是GUI[Control]" -"èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œå®ƒè¢«è°ƒç”¨ï¼Œç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶ä¸ºå®ƒå‡†å¤‡çš„äº‹ä»¶ã€‚\n" -"为了跟踪场景的层次结构,特别在将场景实例化到其他场景时,å¯ä»¥ç”¨[member owner]" -"属性为节点设置一个 \"所有者\"。这å¯ä»¥è·Ÿè¸ªè°å®žä¾‹åŒ–了什么。这在编写编辑器和工具" -"æ—¶éžå¸¸æœ‰ç”¨ã€‚\n" -"当一个节点被[method Object.free]或[method queue_free]释放时,它也将释放它的所" -"有å节点。\n" -"[b]Groups:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥åˆ›å»ºæ¯”如\"敌人" -"\" 或 \"坿”¶é›†ç‰©\" è¿™æ ·çš„ç»„ï¼Œè¿™å–å†³äºŽä½ çš„æ¸¸æˆã€‚å‚阅[method add_to_group], " -"[method is_in_group] å’Œ [method remove_from_group]。然åŽä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„ä¸çš„" -"所有节点,对它们进行è¿ä»£ï¼Œç”šè‡³é€šè¿‡[SceneTree]ä¸çš„æ–¹æ³•调用组内方法。\n" -"[b]Networking with nodes:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅" -"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的RPC(远程过程调用)系统在网络" -"上进行通信。通过调用[method rpc]的方法å,它将在本地和所有连接的对ç‰ä½“ä¸è¢«è°ƒ" -"用(对ç‰ä½“=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ°RPC调用,Godot将使" -"用它的[NodePath]ï¼ˆç¡®ä¿æ‰€æœ‰å¯¹ç‰ä½“上的节点å称相åŒï¼‰ã€‚å¦å¤–,请å‚阅高级网络教程" -"和相应的演示。" +"节点是 Godot 的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„åèŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排" +"列。一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为åèŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟节点(å³è¯¥" +"节点的直接å节点)的åå—唯一。\n" +"èŠ‚ç‚¹æ ‘è¢«ç§°ä¸º[i]场景[/i]。场景å¯ä»¥è¢«ä¿å˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景ä¸ã€‚è¿™" +"使得 Godot é¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n" +"[b]åœºæ™¯æ ‘ï¼š[/b] [SceneTree] åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸æ—¶ï¼Œ" +"它将收到 [constant NOTIFICATION_ENTER_TREE] 通知,并触å‘å…¶ [method " +"_enter_tree] 回调。å节点总是在其父节点[i]之åŽ[/i]è¢«æ·»åŠ ï¼Œå³çˆ¶èŠ‚ç‚¹çš„ [method " +"_enter_tree] 回调将在其å节点的之å‰è¢«è§¦å‘。\n" +"ä¸€æ—¦æ‰€æœ‰çš„èŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸ï¼Œå®ƒä»¬å°±ä¼šæ”¶åˆ° [constant NOTIFICATION_READY] 通" +"知,其å„自的 [method _ready] 回调被触å‘。对于一组节点,[method _ready] 回调是" +"按相å的顺åºè°ƒç”¨çš„,从å节点开始,å‘上移动到父节点。\n" +"è¿™æ„味ç€ï¼Œå½“æŠŠä¸€ä¸ªèŠ‚ç‚¹æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸æ—¶ï¼Œå°†ä½¿ç”¨ä¸‹é¢çš„顺åºè¿›è¡Œå›žè°ƒï¼šçˆ¶èŠ‚ç‚¹çš„ " +"[method _enter_tree]ã€å节点的 [method _enter_tree]ã€å节点的 [method " +"_ready]ï¼Œæœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„ [method _ready]ï¼ˆå¯¹æ•´ä¸ªåœºæ™¯æ ‘è¿›è¡Œé€’å½’ï¼‰ã€‚\n" +"[b]处ç†ï¼š[/b] 节点å¯ä»¥è¦†ç›–“处ç†â€çжæ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šéƒ½æ”¶åˆ°å›žè°ƒï¼Œè¦æ±‚它们" +"进行处ç†ï¼ˆåšä¸€äº›äº‹æƒ…)。普通处ç†ï¼ˆå›žè°ƒ [method _process],å¯ä»¥ä½¿ç”¨ [method " +"set_process] 开关)会尽å¯èƒ½å¿«åœ°å‘生,并且å–å†³äºŽå¸§çŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´ [i]delta[/" +"i](å•ä½ä¸ºç§’ï¼‰ä¼šä½œä¸ºå‚æ•°ä¼ 入。物ç†å¤„ç†ï¼ˆå›žè°ƒ [method _physics_process],å¯ä»¥" +"使用 [method set_physics_process] 开关)æ¯ç§’å‘生固定次数(默认为 60),对物ç†" +"引擎相关的代ç 很有用。\n" +"节点也å¯ä»¥å¤„ç†è¾“入事件。å˜åœ¨ [method _input] å‡½æ•°æ—¶ï¼Œç¨‹åºæ¯æ”¶åˆ°ä¸€æ¬¡è¾“入都会去" +"è°ƒç”¨å®ƒã€‚åœ¨è®¸å¤šæƒ…å†µä¸‹ï¼Œè¿™ä¹ˆåšæ˜¯å¤§æå°ç”¨äº†ï¼ˆé™¤éžæ˜¯ç”¨äºŽç®€å•的项目),用 [method " +"_unhandled_input] 函数å¯èƒ½æ›´åˆé€‚;当输入事件没有被其他节点(通常是 GUI " +"[Control] èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œæ‰ä¼šè°ƒç”¨è¿™ä¸ªå‡½æ•°ï¼Œå¯ä»¥ç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶åˆ°å®ƒè¯¥æ”¶åˆ°çš„äº‹" +"件。\n" +"为了记录场景的层次结构(尤其是在将场景实例化到其他场景时)å¯ä»¥ç”¨ [member " +"owner] 属性为节点设置一个“所有者â€ã€‚它记录的是è°å®žä¾‹åŒ–了什么。这在编写编辑器和" +"工具时éžå¸¸æœ‰ç”¨ã€‚\n" +"最åŽï¼Œå½“一个节点被 [method Object.free] 或 [method queue_free] 释放时,它也将" +"释放它的所有å节点。\n" +"[b]分组:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥æ ¹æ®è‡ªå·±æ¸¸æˆçš„需" +"è¦æ¥åˆ›å»ºç±»ä¼¼â€œæ•Œäººâ€æˆ–“收集å“â€è¿™æ ·çš„组。å‚阅 [method add_to_group]ã€[method " +"is_in_group] å’Œ [method remove_from_group]ã€‚åŠ å…¥ç»„åŽï¼Œä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„ä¸çš„æ‰€" +"有节点,对它们进行è¿ä»£ï¼Œç”šè‡³é€šè¿‡ [SceneTree] ä¸çš„æ–¹æ³•调用组内方法。\n" +"[b]节点的网络编程:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅 " +"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的 RPC(远程过程调用)系统在网" +"络上进行通信。在调用 [method rpc] æ—¶ä¼ å…¥æ–¹æ³•å,将在本地和所有已连接的对ç‰ä½“" +"ä¸è°ƒç”¨å¯¹åº”的方法(对ç‰ä½“=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ° " +"RPC 调用,Godot 将使用它的 [NodePath]ï¼ˆè¯·ç¡®ä¿æ‰€æœ‰å¯¹ç‰ä½“上的节点å称相åŒï¼‰ã€‚å¦" +"外,请å‚阅高级网络教程和相应的演示。" #: doc/classes/Node.xml:20 msgid "" "https://docs.godotengine.org/en/3.4/getting_started/step_by_step/" "scenes_and_nodes.html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/" "scenes_and_nodes.html" #: doc/classes/Node.xml:21 @@ -43171,7 +43485,6 @@ msgstr "" "å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è¦å‘Šæ—¶ï¼Œè°ƒç”¨[method update_configuration_warning]。" #: doc/classes/Node.xml:50 -#, fuzzy msgid "" "Called when there is an input event. The input event propagates up through " "the node tree until a node consumes it.\n" @@ -43186,18 +43499,17 @@ msgid "" "[b]Note:[/b] This method is only called if the node is present in the scene " "tree (i.e. if it's not orphan)." msgstr "" -"å½“æœ‰ä¸€ä¸ªè¾“å…¥äº‹ä»¶æ—¶è¢«è°ƒç”¨ã€‚è¾“å…¥äº‹ä»¶é€šè¿‡èŠ‚ç‚¹æ ‘å‘ä¸Šä¼ æ’,直到一个节点处ç†å®ƒã€‚\n" -"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完æˆï¼Œå¹¶ä¸”å¯" -"以用[method set_process_input]æ¥åˆ‡æ¢ã€‚\n" -"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method Viewport." +"å½“æœ‰è¾“å…¥äº‹ä»¶æ—¶è¢«è°ƒç”¨ã€‚è¾“å…¥äº‹ä»¶é€šè¿‡èŠ‚ç‚¹æ ‘å‘ä¸Šä¼ æ’,直到一个节点消耗它。\n" +"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨" +"[method set_process_input]æ¥åˆ‡æ¢ã€‚\n" +"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree." "set_input_as_handled]。\n" "对于游æˆè¾“入,[method _unhandled_input]å’Œ[method _unhandled_key_input]通常更" "适åˆï¼Œå› 为它们å…许GUI首先拦截事件。\n" "[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它" -"䏿˜¯å¤å„¿ï¼‰ã€‚" +"éž\"å¤å„¿\")。" #: doc/classes/Node.xml:61 -#, fuzzy msgid "" "Called during the physics processing step of the main loop. Physics " "processing means that the frame rate is synced to the physics, i.e. the " @@ -43211,17 +43523,16 @@ msgid "" "[b]Note:[/b] This method is only called if the node is present in the scene " "tree (i.e. if it's not orphan)." msgstr "" -"在主循环的物ç†å¤„ç†æ¥éª¤ä¸è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ¥ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œ" -"[code]delta[/code]å˜é‡åº”该是æ’定的。\n" -"åªæœ‰åœ¨ç‰©ç†å¤„ç†è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œ" -"并且å¯ä»¥é€šè¿‡[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n" -"对应于[方法Object._notification]ä¸çš„[constant NOTIFICATION_PHYSICS_PROCESS]通" -"知。\n" +"在主循环的物ç†å¤„ç†æ¥éª¤ä¸è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ¥ï¼Œå³[code]delta[/" +"code]å˜é‡åº”该是常é‡ã€‚[code]delta[/code]çš„å•使˜¯ç§’。\n" +"åªæœ‰å½“物ç†å¤„ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨" +"[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n" +"对应于[method Object._notification]ä¸çš„[constant " +"NOTIFICATION_PHYSICS_PROCESS]通知。\n" "[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它" -"䏿˜¯å¤å„¿ï¼‰ã€‚" +"䏿˜¯\"å¤å„¿\")。" #: doc/classes/Node.xml:71 -#, fuzzy msgid "" "Called during the processing step of the main loop. Processing happens at " "every frame and as fast as possible, so the [code]delta[/code] time since " @@ -43234,13 +43545,13 @@ msgid "" "tree (i.e. if it's not orphan)." msgstr "" "åœ¨ä¸»å¾ªçŽ¯çš„å¤„ç†æ¥éª¤ä¸è¢«è°ƒç”¨ã€‚处ç†å‘生在æ¯ä¸€å¸§ï¼Œå¹¶ä¸”å°½å¯èƒ½å¿«ï¼Œæ‰€ä»¥ä»Žä¸Šä¸€å¸§å¼€å§‹" -"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。\n" -"åªæœ‰åœ¨å¤„ç†è¿‡ç¨‹è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,就会自动完æˆï¼Œå¯" -"以用[method set_process]æ¥åˆ‡æ¢ã€‚\n" -"对应于 [method Object._notification] ä¸çš„ [constant NOTIFICATION_PROCESS] 通" +"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。[code]delta[/code]çš„å•使˜¯ç§’。\n" +"åªæœ‰åœ¨å¯ç”¨å¤„ç†çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œä¼šè‡ªåŠ¨è¿›è¡Œå¤„ç†ï¼Œå¯ä»¥ç”¨" +"[method set_process]æ¥åˆ‡æ¢ã€‚\n" +"对应于[method Object._notification]ä¸çš„[constant NOTIFICATION_PROCESS]通" "知。\n" -"[b]注æ„:[/b] åªæœ‰å½“节点å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè°ƒç”¨è¿™ä¸ªæ–¹æ³•(å³å¦‚æžœå®ƒä¸æ˜¯å¤" -"儿)。" +"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它" +"䏿˜¯\"å¤å„¿\")。" #: doc/classes/Node.xml:80 msgid "" @@ -43263,14 +43574,13 @@ msgstr "" "åœ¨ä¹‹åŽæ”¶åˆ°å°±ç»ªé€šçŸ¥ã€‚\n" "对应于[method Object._notification]ä¸çš„[constant NOTIFICATION_READY]通知。也" "请å‚阅å˜é‡çš„[code]onready[/code]关键å—。\n" -"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[方法Object._init]。也请å‚阅[方法" -"_enter_tree]。\n" +"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[method Object._init]。也请å‚阅" +"[method _enter_tree]。\n" "[b]注æ„:[/b] [method _ready] 对于æ¯ä¸ªèŠ‚ç‚¹åªèƒ½è°ƒç”¨ä¸€æ¬¡ã€‚åœ¨ä»Žåœºæ™¯æ ‘ä¸åˆ 除一个" "èŠ‚ç‚¹å¹¶å†æ¬¡æ·»åŠ åŽï¼Œ[code]_ready[/code]å°†ä¸ä¼šè¢«ç¬¬äºŒæ¬¡è°ƒç”¨ã€‚è¿™å¯ä»¥é€šè¿‡è¯·æ±‚冿¬¡è°ƒ" -"用[方法 request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。" +"用[method request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。" #: doc/classes/Node.xml:90 -#, fuzzy msgid "" "Called when an [InputEvent] hasn't been consumed by [method _input] or any " "GUI. The input event propagates up through the node tree until a node " @@ -43286,19 +43596,18 @@ msgid "" "[b]Note:[/b] This method is only called if the node is present in the scene " "tree (i.e. if it's not orphan)." msgstr "" -"当[InputEvent]还没有被[method _input]或任何GUIå¤„ç†æ—¶è°ƒç”¨ã€‚è¾“å…¥äº‹ä»¶é€šè¿‡èŠ‚ç‚¹æ ‘" -"å‘ä¸Šä¼ æ’,直到一个节点处ç†å®ƒã€‚\n" -"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡è½½ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ" +"当[InputEvent]还未被[method _input]或任何GUIæ¶ˆè€—æ—¶è°ƒç”¨ã€‚è¾“å…¥äº‹ä»¶é€šè¿‡èŠ‚ç‚¹æ ‘å‘" +"ä¸Šä¼ æ’,直到一个节点消耗它。\n" +"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ" "æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_input]æ¥åˆ‡æ¢ã€‚\n" -"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method Viewport." +"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree." "set_input_as_handled]。\n" "对于游æˆè¾“入,这和[method _unhandled_key_input]通常比[method _input]更适åˆï¼Œ" "å› ä¸ºå®ƒä»¬å…许GUI首先拦截事件。\n" -"[b]注æ„:[/b]è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它ä¸" -"是å¤å„¿ï¼‰ã€‚" +"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它" +"䏿˜¯\"å¤å„¿\")。" #: doc/classes/Node.xml:101 -#, fuzzy msgid "" "Called when an [InputEventKey] hasn't been consumed by [method _input] or " "any GUI. The input event propagates up through the node tree until a node " @@ -43314,19 +43623,18 @@ msgid "" "[b]Note:[/b] This method is only called if the node is present in the scene " "tree (i.e. if it's not orphan)." msgstr "" -"当[InputEventKey]没有被[method _input]或任何GUIå¤„ç†æ—¶è¢«è°ƒç”¨ã€‚输入事件通过节点" -"æ ‘å‘ä¸Šä¼ æ’,直到一个节点处ç†å®ƒã€‚\n" -"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完" +"当[InputEventKey]没有被[method _input]或任何GUI消耗时被调用。输入事件通过节点" +"æ ‘å‘ä¸Šä¼ æ’,直到一个节点消耗它。\n" +"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ" "æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_key_input]æ¥åˆ‡æ¢ã€‚\n" -"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method Viewport." +"è¦æ¶ˆè€—输入事件并阻æ¢å®ƒè¿›ä¸€æ¥ä¼ æ’到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree." "set_input_as_handled]。\n" "对于游æˆè¾“入,这和[method _unhandled_input]通常比[method _input]更适åˆï¼Œå› 为" "它们å…许GUI首先拦截事件。\n" "[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å˜åœ¨äºŽåœºæ™¯æ ‘䏿—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它" -"䏿˜¯å¤å„¿ï¼‰ã€‚" +"䏿˜¯\"å¤å„¿\")。" #: doc/classes/Node.xml:113 -#, fuzzy msgid "" "Adds a child node. Nodes can have any number of children, but every child " "must have a unique name. Child nodes are automatically deleted when the " @@ -43352,30 +43660,26 @@ msgid "" "owner], the newly added [Node] will not be visible in the scene tree, though " "it will be visible in the 2D/3D view." msgstr "" -"æ·»åŠ ä¸€ä¸ªå节点。节点å¯ä»¥æœ‰ä»»ä½•æ•°é‡çš„å节点,但是æ¯ä¸ªå节点必须有一个唯一的å" -"å—ã€‚å½“çˆ¶èŠ‚ç‚¹è¢«åˆ é™¤æ—¶ï¼ŒåèŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ 除其最上é¢çš„" -"èŠ‚ç‚¹è€Œè¢«åˆ é™¤ã€‚\n" +"æ·»åŠ å节点。节点å¯ä»¥æœ‰ä»»æ„æ•°é‡çš„å节点,但是æ¯ä¸ªå节点必须有唯一的åå—。当父" +"èŠ‚ç‚¹è¢«åˆ é™¤æ—¶ï¼ŒåèŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ 除其最上é¢çš„节点而被" +"åˆ é™¤ã€‚\n" "如果[code]legible_unique_name[/code]是[code]true[/code],å节点将有一个基于被" -"实例化的节点的åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n" -"[b]注æ„:[/b] 如果åèŠ‚ç‚¹å·²ç»æœ‰ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œè¿™ä¸ªå‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method " -"remove_child]将节点从其当å‰çš„父节点ä¸ç§»é™¤ã€‚比如说:\n" +"实例化的节点的åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。\n" +"[b]注æ„:[/b] 如果åèŠ‚ç‚¹å·²ç»æœ‰çˆ¶èŠ‚ç‚¹ï¼Œè¯¥å‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method " +"remove_child]将节点从其当å‰çš„父节点ä¸ç§»é™¤ã€‚如:\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" -"å¦‚æžœä½ éœ€è¦å°†åèŠ‚ç‚¹æ·»åŠ åˆ°åèŠ‚ç‚¹åˆ—è¡¨ä¸æŸä¸ªç‰¹å®šèŠ‚ç‚¹çš„ä¸‹é¢ï¼Œè¯·ä½¿ç”¨[method " -"add_sibling]è€Œä¸æ˜¯è¿™ä¸ªæ–¹æ³•。\n" -"[b]注æ„:[/b] å¦‚æžœä½ å¸Œæœ›ä¸€ä¸ªå节点被æŒä¹…化到[PackedScene]ä¸ï¼Œé™¤äº†è°ƒç”¨[method " -"add_child]å¤–ï¼Œä½ å¿…é¡»è®¾ç½®[member owner]。这通常适用于[url=https://godot." -"readthedocs.io/zh_CN/latest/tutorials/misc/running_code_in_the_editor.html]å·¥" -"具脚本[/url]å’Œ[url=https://godot.readthedocs.io/zh_CN/latest/tutorials/" -"plugins/editor/index.html]编辑器æ’ä»¶[/url]。如果调用[method add_child]而ä¸è®¾" -"ç½®[member owner]ï¼Œæ–°æ·»åŠ çš„[Node]åœ¨åœºæ™¯æ ‘ä¸æ˜¯ä¸å¯è§çš„,尽管它在2D/3Dè§†å›¾ä¸æ˜¯å¯" -"è§çš„。" +"[b]注æ„:[/b] å¦‚æžœä½ æƒ³è®©ä¸€ä¸ªå节点被æŒä¹…化到[PackedScene]ä¸ï¼Œé™¤äº†è°ƒç”¨[method " +"add_child]外,还必须设置[member owner]。这通常与[url=https://godot." +"readthedocs.io/en/3.2/tutorials/misc/running_code_in_the_editor.html]工具脚本" +"[/url]å’Œ[url=https://godot.readthedocs.io/en/latest/tutorials/plugins/editor/" +"index.html]编辑器æ’ä»¶[/url]有关。如果调用[method add_child]而ä¸è®¾ç½®[member " +"owner]ï¼Œæ–°æ·»åŠ çš„[Node]åœ¨åœºæ™¯æ ‘ä¸æ˜¯ä¸å¯è§çš„,尽管它在2D/3D视图ä¸å¯è§ã€‚" #: doc/classes/Node.xml:130 -#, fuzzy msgid "" "Adds [code]child_node[/code] as a child. The child is placed below the given " "[code]node[/code] in the list of children.\n" @@ -43383,15 +43687,12 @@ msgid "" "will have a human-readable name based on the name of the node being " "instanced instead of its type." msgstr "" -"在当å‰çš„èŠ‚ç‚¹çˆ¶èŠ‚ç‚¹ä¸Šæ·»åŠ ä¸€ä¸ª[code]兄弟å§å¦¹[/code]节点,与该节点处于åŒä¸€çº§åˆ«ï¼Œ" -"就在其下方。\n" +"æ·»åŠ [code]child_node[/code]作为å节点。该å节点在å节点列表ä¸è¢«ç½®äºŽç»™å®šçš„" +"[code]node[/code]之下。\n" "如果[code]legible_unique_name[/code]是[code]true[/code],å节点将有一个基于被" -"实例化的节点åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n" -"å¦‚æžœä½ ä¸éœ€è¦åèŠ‚ç‚¹è¢«æ·»åŠ åˆ°å节点列表ä¸çš„特定节点下é¢ï¼Œè¯·ä½¿ç”¨[method " -"add_child]代替这个方法。" +"实例化的节点åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。" #: doc/classes/Node.xml:139 -#, fuzzy msgid "" "Adds the node to a group. Groups are helpers to name and organize a subset " "of nodes, for example \"enemies\" or \"collectables\". A node can be in any " @@ -43404,12 +43705,14 @@ msgid "" "guaranteed. The order of node groups should not be relied upon as it can " "vary across project runs." msgstr "" -"å°†èŠ‚ç‚¹æ·»åŠ åˆ°ä¸€ä¸ªç»„ä¸ã€‚组是命å和组织节点å集的辅助工具,例如 \"敌人 \"或 \"å¯" -"收集物\"。一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组ä¸ã€‚节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组ä¸ï¼Œ" -"ä½†æ˜¯åœ¨å®ƒä»¬è¿›å…¥åœºæ™¯æ ‘ï¼ˆè§[method is_inside_tree])之å‰ä¸ä¼šè¢«æ·»åŠ ã€‚å‚阅æè¿°ä¸çš„" -"注释,以åŠ[SceneTree]ä¸çš„组方法。\n" +"å°†èŠ‚ç‚¹æ·»åŠ åˆ°ä¸€ä¸ªç»„ä¸ã€‚组是命å和组织节点å集的辅助工具,例如 \"敌人\" 或 \"å¯" +"收集物\"ç‰ã€‚一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组ä¸ã€‚节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组" +"ä¸ï¼Œä½†æ˜¯åœ¨å®ƒä»¬è¿›å…¥åœºæ™¯æ ‘之å‰ä¸ä¼šè¢«æ·»åŠ ï¼Œå‚阅[method is_inside_tree]。å‚阅æè¿°" +"ä¸çš„æ³¨é‡Šï¼Œä»¥åŠ[SceneTree]ä¸çš„分组方法。\n" "当把节点打包到[PackedScene]å¹¶ä¿å˜åˆ°æ–‡ä»¶æ—¶ï¼Œä¼šä½¿ç”¨[code]persistent[/code]选" -"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å˜å‚¨ã€‚" +"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å˜å‚¨ã€‚\n" +"[b]注æ„:[/b]ç”±äºŽæ€§èƒ½åŽŸå› ï¼ŒèŠ‚ç‚¹ç»„çš„é¡ºåº[i]ä¸[/i]能ä¿è¯ã€‚å› äº›èŠ‚ç‚¹ç»„çš„é¡ºåºä¸åº”" +"该被ä¾èµ–ï¼Œå› ä¸ºå®ƒå¯èƒ½åœ¨ä¸åŒçš„项目è¿è¡Œä¸å˜åŒ–。" #: doc/classes/Node.xml:147 msgid "" @@ -43438,7 +43741,6 @@ msgstr "" "本。" #: doc/classes/Node.xml:165 -#, fuzzy msgid "" "Finds a descendant of this node whose name matches [code]mask[/code] as in " "[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches " @@ -43454,15 +43756,17 @@ msgid "" "consider using [method get_node] instead. To avoid using [method find_node] " "too often, consider caching the node reference into a variable." msgstr "" -"找到这个节点的å节点,其å称与[method String.match]ä¸çš„[code]mask[/code]相匹" -"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个å—符,[code]\"?\"[/code]匹" -"é…除[code]\".\"[/code]以外的任何å•个å—符)。\n" -"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n" +"查找该节点的å级,其å称与[method String.match]ä¸çš„[code]mask[/code]相匹é…," +"区分大å°å†™ï¼Œä»¥[code]\"*\"[/code]匹é…零或多个å—符,[code]\"?\"[/code]匹é…除" +"[code]\".\"[/code]以外的任何å•å—符。\n" +"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n" "如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节" -"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› 为这些场景没有所有者。" +"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› 为这些场景没有所有者。\n" +"[b]注æ„:[/b]由于这个方法会é历节点的所有å级,它是获得å¦ä¸€ä¸ªèŠ‚ç‚¹çš„å¼•ç”¨çš„æœ€æ…¢" +"的方法。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨" +"[method find_node],å¯ä»¥è€ƒè™‘将节点引用缓å˜åˆ°ä¸€ä¸ªå˜é‡ä¸ã€‚" #: doc/classes/Node.xml:175 -#, fuzzy msgid "" "Finds the first parent of the current node whose name matches [code]mask[/" "code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/" @@ -43475,12 +43779,13 @@ msgid "" "[method get_node] instead. To avoid using [method find_parent] too often, " "consider caching the node reference into a variable." msgstr "" -"找到这个节点的å节点,其å称与[method String.match]ä¸çš„[code]mask[/code]相匹" -"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个å—符,[code]\"?\"[/code]匹" -"é…除[code]\".\"[/code]以外的任何å•个å—符)。\n" -"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n" -"如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节" -"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› 为这些场景没有所有者。" +"查找当å‰èŠ‚ç‚¹çš„ç¬¬ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]ä¸çš„[code]mask[/" +"code]相匹é…,区分大å°å†™ï¼Œå…¶[code]\"*\"[/code]匹é…零或多个å—符,[code]\"?\"[/" +"code]匹é…任何å•个å—符,除了[code]\".\"[/code]。\n" +"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n" +"[b]注æ„:[/b]ç”±äºŽè¿™ä¸ªæ–¹æ³•åœ¨åœºæ™¯æ ‘ä¸å‘ä¸Šè¡Œèµ°ï¼Œåœ¨å¤§åž‹çš„ã€æ·±åº¦åµŒå¥—çš„åœºæ™¯æ ‘ä¸å¯èƒ½" +"会很慢。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨" +"[method find_parent],考虑将节点引用缓å˜åˆ°ä¸€ä¸ªå˜é‡ä¸ã€‚" #: doc/classes/Node.xml:184 msgid "" @@ -43488,8 +43793,8 @@ 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 "" -"按索引返回一个å节点(è§[方法get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一个节" -"点的所有å节点。\n" +"按索引返回一个å节点(è§[method get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一" +"个节点的所有å节点。\n" "è¦é€šè¿‡ä¸€ä¸ªå节点的åå—访问它,请使用[method get_node]。" #: doc/classes/Node.xml:191 @@ -43645,16 +43950,15 @@ msgstr "" "场景ä¸ï¼Œå¦åˆ™å‡½æ•°å°†å¤±è´¥ã€‚" #: doc/classes/Node.xml:288 -#, fuzzy msgid "" "Returns the time elapsed (in seconds) since the last physics-bound frame " "(see [method _physics_process]). This is always a constant value in physics " "processing unless the frames per second is changed via [member Engine." "iterations_per_second]." msgstr "" -"返回从最åŽä¸€ä¸ªç‰©ç†ç»‘定帧开始ç»è¿‡çš„æ—¶é—´(å‚阅[method _physics_process])。这在物" -"ç†å¤„ç†ä¸æ€»æ˜¯ä¸€ä¸ªå¸¸é‡ï¼Œé™¤éžæ¯ç§’帧数通过[member Engine.iterations_per_second]被" -"改å˜ã€‚" +"返回自上次物ç†ç»‘å®šå¸§ä»¥æ¥æ‰€ç»è¿‡çš„æ—¶é—´ï¼ˆå•ä½ä¸ºç§’),å‚阅 [method " +"_physics_process]。在物ç†å¤„ç†ä¸ï¼Œè¿™å§‹ç»ˆæ˜¯ä¸€ä¸ªå¸¸æ•°ï¼Œé™¤éžé€šè¿‡ [member Engine." +"iterations_per_second] æ”¹å˜æ¯ç§’的帧数。" #: doc/classes/Node.xml:294 msgid "" @@ -43700,7 +44004,7 @@ msgid "" msgstr "" "如果[NodePath]指å‘一个有效的节点,并且它的åå称指å‘一个有效的资æºï¼Œä¾‹å¦‚" "[code]Area2D/CollisionShape2D:shape[/code],则返回[code]true[/code]。具有éž" -"[资æº]类型的属性(例如节点或基本数å¦ç±»åž‹)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚" +"[Resource]类型的属性(例如节点或基本数å¦ç±»åž‹)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚" #: doc/classes/Node.xml:339 msgid "" @@ -43781,16 +44085,16 @@ msgid "" "Returns [code]true[/code] if the node is processing unhandled input (see " "[method set_process_unhandled_input])." msgstr "" -"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回" -"[code]true[/code]。" +"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则" +"返回[code]true[/code]。" #: doc/classes/Node.xml:413 msgid "" "Returns [code]true[/code] if the node is processing unhandled key input (see " "[method set_process_unhandled_key_input])." msgstr "" -"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[方法set_process_unhandled_key_input])," -"则返回[code]true[/code]。" +"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[method " +"set_process_unhandled_key_input]),则返回[code]true[/code]。" #: doc/classes/Node.xml:421 msgid "" @@ -43836,7 +44140,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Node.xml:448 -#, fuzzy msgid "" "Similar to [method print_tree], this prints the tree to stdout. This version " "displays a more graphical representation similar to what is displayed in the " @@ -43851,15 +44154,15 @@ msgid "" " â”–â•´Camera2D\n" "[/codeblock]" msgstr "" -"类似于[method print_tree]ï¼Œå®ƒå°†æ ‘æ‰“å°åˆ°æ ‡å‡†è¾“出。这个版本显示了一个更图形化的" -"è¡¨ç¤ºï¼Œç±»ä¼¼äºŽåœ¨åœºæ™¯æ£€æŸ¥å™¨ä¸æ˜¾ç¤ºçš„ã€‚å®ƒå¯¹æ£€æŸ¥è¾ƒå¤§çš„æ ‘å¾ˆæœ‰ç”¨ã€‚\n" -"[b]示例输出:[/b]\n" +"类似于[method print_tree]ï¼Œå®ƒå°†æ ‘æ‰“å°åˆ°æ ‡å‡†è¾“出。这个版本显示更多的图形,类似" +"äºŽåœ¨åœºæ™¯æ£€æŸ¥å™¨ä¸æ˜¾ç¤ºçš„å†…å®¹ã€‚å®ƒå¯¹äºŽæ£€æŸ¥è¾ƒå¤§çš„æ ‘å¾ˆæœ‰ç”¨ã€‚\n" +"[b]输出示例:[/b]\n" "[codeblock]\n" " â”–â•´TheGame\n" " â” â•´Menu\n" " ┃ â” â•´Label\n" " ┃ â”–â•´Camera2D\n" -" â”–-SplashScreen\n" +" â”–â•´SplashScreen\n" " â”–â•´Camera2D\n" "[/codeblock]" @@ -43886,7 +44189,6 @@ msgstr "" "å节点。" #: doc/classes/Node.xml:479 -#, fuzzy msgid "" "Queues a node for deletion at the end of the current frame. When deleted, " "all of its child nodes will be deleted as well. This method ensures it's " @@ -43900,11 +44202,13 @@ msgid "" "or access its properties." msgstr "" "在当å‰å¸§ç»“æŸæ—¶æŽ’é˜Ÿåˆ é™¤ä¸€ä¸ªèŠ‚ç‚¹ã€‚å½“åˆ é™¤æ—¶ï¼Œå…¶æ‰€æœ‰çš„åèŠ‚ç‚¹ä¹Ÿå°†è¢«åˆ é™¤ã€‚è¿™ä¸ªæ–¹æ³•" -"ç¡®ä¿åˆ 除节点是安全的,与[method Object.free]相å。使用 [method Object." -"is_queued_for_deletion] æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§ç»“æŸæ—¶è¢«åˆ 除。" +"ç¡®ä¿åˆ 除节点是安全的,与[method Object.free]相å。使用[method Object." +"is_queued_for_deletion]æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§æœ«è¢«åˆ 除。\n" +"[b]é‡è¦ï¼š[/b] å¦‚æžœä½ æœ‰å˜é‡æŒ‡å‘节点,一旦节点被释放,它将[i]ä¸ä¼š[/i] 被分é…到" +"[code]null[/code]。相å,它将指å‘一个[i]å…ˆå‰è¢«é‡Šæ”¾çš„实例[/i]ï¼Œä½ åº”è¯¥åœ¨å°è¯•è°ƒ" +"用其方法或访问其属性之å‰ç”¨[method @GDScript.is_instance_valid]æ¥éªŒè¯å®ƒã€‚" #: doc/classes/Node.xml:486 -#, fuzzy msgid "" "Moves this node to the bottom of parent node's children hierarchy. This is " "often useful in GUIs ([Control] nodes), because their order of drawing " @@ -43914,9 +44218,9 @@ msgid "" "siblings." msgstr "" "å°†æ¤èŠ‚ç‚¹ç§»åˆ°çˆ¶èŠ‚ç‚¹çš„å节点层次的底部。这在GUI([Control]节点)ä¸é€šå¸¸å¾ˆæœ‰ç”¨ï¼Œ" -"å› ä¸ºå®ƒä»¬çš„ç»˜åˆ¶é¡ºåºå–å†³äºŽå®ƒä»¬åœ¨æ ‘ä¸çš„顺åºï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œå®ƒä»¬åœ¨èŠ‚ç‚¹åˆ—è¡¨ä¸è¶Šé å‰ï¼Œ" -"它们就被绘制得越高。使用[code]raise[/code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å®ƒçš„兄弟å§å¦¹" -"之上。" +"å› ä¸ºå®ƒä»¬çš„ç»˜åˆ¶é¡ºåºå–å†³äºŽå®ƒä»¬åœ¨æ ‘ä¸çš„顺åºã€‚最上é¢çš„节点首先被绘制出æ¥ï¼Œç„¶åŽåœ¨" +"å±‚æ¬¡ç»“æž„ä¸æœ€ä¸Šé¢çš„节点下é¢çš„æ‰€æœ‰åŒçº§è¢«ä¾æ¬¡ç»˜åˆ¶åœ¨å®ƒçš„上é¢ã€‚使用[code]raise[/" +"code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å…¶åŒçº§çš„上é¢ã€‚" #: doc/classes/Node.xml:492 msgid "" @@ -44114,14 +44418,13 @@ msgid "" "if [method _physics_process] is overridden. Any calls to this before [method " "_ready] will be ignored." msgstr "" -"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¦ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通" -"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ›´æ”¹å…¶å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€" -"个[常é‡NOTIFICATION_PHYSICS_PROCESS](如果å˜åœ¨ï¼Œ[method _physics_process]回调" -"将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍå¯ç”¨ã€‚在[method " -"_ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" +"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¤„ç†ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通常" +"是60FPS,å‚阅[member Engine.iterations_per_second]æ¥æ›´æ”¹è¯¥å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€" +"个[constant NOTIFICATION_PHYSICS_PROCESS](如果å˜åœ¨ï¼Œ[method " +"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ" +"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" #: doc/classes/Node.xml:631 -#, fuzzy msgid "" "Enables or disables internal physics for this node. Internal physics " "processing happens in isolation from the normal [method _physics_process] " @@ -44134,11 +44437,13 @@ msgid "" "behavior. Script access to this internal logic is provided for specific " "advanced uses, but is unsafe and not supported." msgstr "" -"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¸§ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通" -"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ”¹å˜å®ƒçš„值)时间间隔收到" -"一个[constant NOTIFICATION_PHYSICS_PROCESS](如果å˜åœ¨ï¼Œ[method " -"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ" -"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" +"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨ç‰©ç†ã€‚内部物ç†å¤„ç†ä¸Žæ£å¸¸çš„[method _physics_process]调用" +"隔离进行,并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹æš‚åœæˆ–物ç†å¤„ç†å› 脚" +"本而ç¦ç”¨ï¼ˆ[method set_physics_process])。仅适用于用于æ“纵内置节点行为的高级" +"用途。\n" +"[b]è¦å‘Š:[/b] 内置节点ä¾é å†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œæ‰€ä»¥ä»Žä½ çš„ä»£ç 䏿”¹å˜è¿™ä¸ªå€¼" +"å¯èƒ½ä¼šå¯¼è‡´æ„外的行为。为特定的高级用途æä¾›äº†å¯¹æ¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨" +"䏔䏿”¯æŒã€‚" #: doc/classes/Node.xml:639 msgid "" @@ -44163,7 +44468,6 @@ msgstr "" "写,则自动å¯ç”¨ã€‚任何在[method _ready]之å‰å¯¹å®ƒçš„调用都将被忽略。" #: doc/classes/Node.xml:653 -#, fuzzy msgid "" "Enables or disabled internal processing for this node. Internal processing " "happens in isolation from the normal [method _process] calls and is used by " @@ -44175,10 +44479,12 @@ msgid "" "behavior. Script access to this internal logic is provided for specific " "advanced uses, but is unsafe and not supported." msgstr "" -"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†å‘生在与æ£å¸¸çš„[method _process]调用隔离的" -"情况下,并被一些节点内部使用,以ä¿è¯æ£å¸¸è¿è¡Œã€‚å³ä½¿èŠ‚ç‚¹è¢«æš‚åœæˆ–process函数被脚" -"本ç¦ç”¨ï¼ˆ[method set_process]),其内部处ç†ä»ä¼šè¿›è¡Œã€‚åªå¯¹é«˜çº§ç”¨é€”有用,å¯ä»¥æ“" -"纵内置节点的行为。" +"å¯ç”¨æˆ–ç¦ç”¨æ¤èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†ä¸Žæ£å¸¸çš„ [method _process] 调用隔离进行," +"并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹å·²æš‚åœæˆ–处ç†å› 脚本而ç¦ç”¨" +"([method set_process])。仅适用于æ“纵内置节点行为的高级用途。\n" +"[b]è¦å‘Šï¼š[/b] 内置节点ä¾èµ–äºŽå†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œå› æ¤æ›´æ”¹ä»£ç ä¸çš„这个值" +"å¯èƒ½ä¼šå¯¼è‡´æ„外行为。为特定的高级用途æä¾›äº†å¯¹æ¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨ä¸”" +"䏿”¯æŒã€‚" #: doc/classes/Node.xml:661 msgid "" @@ -44188,8 +44494,8 @@ msgid "" "is overridden. Any calls to this before [method _ready] will be ignored." msgstr "" "å¯ç”¨æœªå¤„ç†çš„输入处ç†ã€‚这对GUI控件æ¥è¯´æ˜¯ä¸éœ€è¦çš„! å®ƒä½¿èŠ‚ç‚¹èƒ½å¤ŸæŽ¥æ”¶æ‰€æœ‰ä»¥å‰æ²¡æœ‰" -"处ç†çš„输入(通常是由[控制]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œåˆ™è‡ª" -"动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" +"处ç†çš„输入(通常是由[Control]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œ" +"则自动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" #: doc/classes/Node.xml:668 msgid "" @@ -44242,7 +44548,6 @@ msgstr "" "默认的SceneTreeï¼ˆå¦‚æžœåœ¨æ ‘å†…ï¼‰ã€‚" #: doc/classes/Node.xml:697 -#, fuzzy msgid "" "The name of the node. This name is unique among the siblings (other child " "nodes from the same parent). When set to an existing name, the node will be " @@ -44251,8 +44556,11 @@ msgid "" "character, which is reserved for unique names when using [method add_child]. " "When setting the name manually, any [code]@[/code] will be removed." msgstr "" -"节点的å称。这个åå—在兄弟å§å¦¹ä¸æ˜¯å”¯ä¸€çš„(æ¥è‡ªåŒä¸€ä¸ªçˆ¶èŠ‚ç‚¹çš„å…¶ä»–å节点)。当" -"设置为现有å称时,节点将被自动é‡å‘½å。" +"节点的å称。æ¤å称在兄弟节点(æ¥è‡ªåŒä¸€çˆ¶èŠ‚ç‚¹çš„å…¶ä»–åèŠ‚ç‚¹ï¼‰ä¸æ˜¯å”¯ä¸€çš„。当设置" +"为现有å称时,节点将自动é‡å‘½å。\n" +"[b]注æ„:[/b] 自动生æˆçš„åç§°å¯èƒ½åŒ…å« [code]@[/code] å—符,在使用 [method " +"add_child] æ—¶ä¿ç•™è¯¥å—符用于唯一å称。手动设置åç§°æ—¶ï¼Œå°†åˆ é™¤ä»»ä½• [code]@[/" +"code]。" #: doc/classes/Node.xml:701 msgid "" @@ -44335,14 +44643,14 @@ msgid "" "Notification received every frame when the physics process flag is set (see " "[method set_physics_process])." msgstr "" -"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[方法" +"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[method " "set_physics_process])。" #: doc/classes/Node.xml:760 msgid "" "Notification received every frame when the process flag is set (see [method " "set_process])." -msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法set_process])。" +msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method set_process])。" #: doc/classes/Node.xml:763 msgid "" @@ -44379,7 +44687,7 @@ msgid "" "Notification received every frame when the internal process flag is set (see " "[method set_process_internal])." msgstr "" -"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法" +"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method " "set_process_internal])。" #: doc/classes/Node.xml:785 @@ -44387,7 +44695,7 @@ msgid "" "Notification received every frame when the internal physics process flag is " "set (see [method set_physics_process_internal])." msgstr "" -"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法" +"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[method " "set_physics_process_internal])。" #: doc/classes/Node.xml:788 @@ -44434,7 +44742,7 @@ msgid "" "instance changes too." msgstr "" "使用实例化进行å¤åˆ¶ã€‚\n" -"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒè”ç³»ï¼Œå› æ¤å½“原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。" +"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒé“¾æŽ¥ï¼Œå› æ¤å½“原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。" #: doc/classes/Node2D.xml:4 msgid "" @@ -44588,20 +44896,21 @@ msgstr "" "点的Z索引是2,它的父节点的有效Z索引是3,那么这个节点的有效Z索引将是2+3=5。" #: doc/classes/Node2D.xml:130 -#, fuzzy msgid "" "Z index. Controls the order in which the nodes render. A node with a higher " "Z index will display in front of others. Must be between [constant " "VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer." "CANVAS_ITEM_Z_MAX] (inclusive)." -msgstr "Z索引。控制节点的渲染顺åºã€‚具有较高Z指数的节点将显示在其他节点的å‰é¢ã€‚" +msgstr "" +"Z 索引。控制节点呈现的顺åºã€‚具有较高 Z 索引的节点将显示在其他节点之å‰ã€‚必须介" +"于 [constant VisualServer.CANVAS_ITEM_Z_MIN] å’Œ [constant VisualServer." +"CANVAS_ITEM_Z_MAX] 之间(å«ï¼‰ã€‚" #: doc/classes/NodePath.xml:4 msgid "Pre-parsed scene tree path." msgstr "预先解æžçš„åœºæ™¯æ ‘è·¯å¾„ã€‚" #: doc/classes/NodePath.xml:7 -#, fuzzy msgid "" "A pre-parsed relative or absolute path in a scene tree, for use with [method " "Node.get_node] and similar functions. It can reference a node, a resource " @@ -44635,29 +44944,32 @@ msgid "" "when moving, renaming or deleting a node in the scene tree, but they are " "never updated at runtime." msgstr "" -"åœºæ™¯æ ‘ä¸é¢„先解æžçš„相对或ç»å¯¹è·¯å¾„,用于[method Node.get_node]和类似函数。它å¯" -"以引用一个节点,一个节点ä¸çš„资æºï¼Œæˆ–者一个节点或资æºçš„属性。例如," -"[code]\"Path2D/PathFollow2D/Sprite2D:texture:size\"[/code]将引用å为" -"[code]\"Sprite2D\"[/code]的节点上的[code]texture[/code]资æºçš„[code]size[/" -"code]属性,该节点是路径ä¸å…¶ä»–指定节点的å节点。\n" -"ä½ é€šå¸¸åªéœ€å°†ä¸€ä¸ªå—ç¬¦ä¸²ä¼ é€’ç»™[method Node.get_node],它就会被自动转æ¢ï¼Œä½†ä½ å¶" -"尔也会想用[NodePath]或å—é¢è¯æ³•[code]@\"path\"[/code]æå‰è§£æžä¸€ä¸ªè·¯å¾„。导出" -"[NodePath]å˜é‡ä¼šåœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸ç»™ä½ 一个节点选择部件,这通常很有用。\n" -"一个[NodePath]是由一个斜线分隔的节点å称列表(åƒä¸€ä¸ªæ–‡ä»¶ç³»ç»Ÿè·¯å¾„)和一个å¯é€‰" -"的冒å·åˆ†éš”çš„ \"ååç§° \"列表组æˆçš„,它å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n" -"NodePaths的一些例å包括如下。\n" -"[codeblock]\n" -"# No leading slash means it is relative to the current node.\n" -"@\"A\" # Immediate child A\n" -"@\"A/B\" # A's child B\n" -"@\".\" # The current node.\n" -"@\"..\" # The parent node.\n" -"@\"../C\" # A sibling node C.\n" -"# A leading slash means it is absolute from the SceneTree.\n" -"@\"/root\" # Equivalent to get_tree().get_root().\n" -"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n" -"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n" -"[/codeblock]" +"åœºæ™¯æ ‘ä¸é¢„先解æžçš„相对或ç»å¯¹è·¯å¾„,用于 [method Node.get_node] 和类似函数。它" +"å¯ä»¥å¼•用节点ã€èŠ‚ç‚¹å†…çš„èµ„æºæˆ–节点或资æºçš„属性。例如,[code]\"Path2D/" +"PathFollow2D/Sprite:texture:size\"[/code] 将引用å为 [code]\"Sprite\"[/code] " +"节点上的纹ç†èµ„æº [code]texture[/code] 的尺寸 [code]size[/code] 属性,该节点是" +"路径ä¸å…¶ä»–命å节点的一个å节点。\n" +"您通常åªéœ€å°†ä¸€ä¸ªå—ç¬¦ä¸²ä¼ é€’ç»™ [method Node.get_node] 并且它会自动转æ¢ï¼Œä½†æ‚¨å¯" +"能å¶å°”希望使用 [NodePath] 或文å—è¯æ³• [code]@\"path\"[/code] æå‰è§£æžè·¯å¾„。导" +"出 [NodePath] å˜é‡å°†åœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸ä¸ºæ‚¨æä¾›ä¸€ä¸ªèŠ‚ç‚¹é€‰æ‹©å°éƒ¨ä»¶ï¼Œè¿™é€šå¸¸å¾ˆ" +"有用。\n" +"[NodePath] 由斜线分隔的节点å称列表(如文件系统路径)和å¯é€‰çš„冒å·åˆ†éš”的“åå" +"ç§°â€åˆ—表组æˆï¼Œè¿™äº›â€œååç§°â€å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n" +"NodePath 的一些示例包括:\n" +"[codeblock]\n" +"# 没有å‰å¯¼æ–œæ 表示它是相对于当å‰èŠ‚ç‚¹çš„ã€‚\n" +"@\"A\" # 直接获得å节点 A\n" +"@\"A/B\" # A çš„å节点 B\n" +"@\".\" # 当å‰èŠ‚ç‚¹ã€‚\n" +"@\"..\" # 父节点。\n" +"@\"../C\" # 兄弟节点 C.\n" +"# å‰å¯¼æ–œæ 表示它是æ¥è‡ªåœºæ™¯æ ‘çš„ç»å¯¹è·¯å¾„。\n" +"@\"/root\" # ç‰ä»·äºŽ get_tree().get_root()。\n" +"@\"/root/Main\" # å¦‚æžœä½ çš„ä¸»åœºæ™¯çš„æ ¹èŠ‚ç‚¹è¢«å‘½å为“Mainâ€ã€‚\n" +"@\"/root/MyAutoload\" # å¦‚æžœä½ æœ‰ä¸€ä¸ªè‡ªåŠ¨åŠ è½½çš„èŠ‚ç‚¹æˆ–åœºæ™¯ã€‚\n" +"[/codeblock]\n" +"[b]注æ„:[/b] 在编辑器ä¸ï¼Œ[NodePath] å±žæ€§åœ¨åœºæ™¯æ ‘ä¸ç§»åЍã€é‡å‘½åæˆ–åˆ é™¤èŠ‚ç‚¹æ—¶ä¼š" +"自动更新,但它们ä¸ä¼šåœ¨è¿è¡Œæ—¶æ›´æ–°ã€‚" #: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41 #: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10 @@ -44666,7 +44978,6 @@ msgid "https://godotengine.org/asset-library/asset/520" msgstr "https://godotengine.org/asset-library/asset/520" #: doc/classes/NodePath.xml:33 -#, fuzzy msgid "" "Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:" "texture:size\"[/code]. A path is absolute if it starts with a slash. " @@ -44693,26 +45004,25 @@ msgid "" "\"/root/Level/Path2D\"\n" "[/codeblock]" msgstr "" -"从å—符串创建一个NodePath,例如[code]\"Path2D/PathFollow2D/Sprite2D:texture:" -"size\"[/code]。以斜æ 开头的路径是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„ä»…åœ¨å…¨å±€åœºæ™¯æ ‘ä¸æœ‰æ•ˆï¼Œåœ¨å•" -"ä¸ªåœºæ™¯ä¸æ— 效。在相对路径ä¸ï¼Œ[code]\".\"[/code]å’Œ[code]\"..\"[/code]表示当å‰èŠ‚" -"点åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n" -"å¯é€‰åœ°åŒ…å«åœ¨ç›®æ ‡èŠ‚ç‚¹è·¯å¾„ä¹‹åŽçš„“ååç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n" -"有效的NodePaths示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å˜åœ¨å¹¶ä¸”æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n" -"[codeblock]\n" -"# Points to the Sprite2D node\n" -"\"Path2D/PathFollow2D/Sprite2D\"\n" -"# Points to the Sprite2D node and its \"texture\" resource.\n" -"# get_node() would retrieve \"Sprite2D\", while get_node_and_resource()\n" -"# would retrieve both the Sprite2D node and the \"texture\" resource.\n" -"\"Path2D/PathFollow2D/Sprite2D:texture\"\n" -"# Points to the Sprite2D node and its \"position\" property.\n" -"\"Path2D/PathFollow2D/Sprite2D:position\"\n" -"# Points to the Sprite2D node and the \"x\" component of its \"position\" " -"property.\n" -"\"Path2D/PathFollow2D/Sprite2D:position:x\"\n" -"# Absolute path (from \"root\")\n" -"\"/root/Level/Path2D\"\n" +"从å—符串创建一个 NodePath,例如 [code]\"Path2D/PathFollow2D/Sprite:texture:" +"size\"[/code]。如果路径以斜æ 开头,则该路径是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„ä»…åœ¨å…¨å±€åœºæ™¯æ ‘" +"䏿œ‰æ•ˆï¼Œåœ¨å•ä¸ªåœºæ™¯ä¸æ— 效。在相对路径ä¸ï¼Œ[code]\".\"[/code] å’Œ [code]\"..\"[/" +"code] 表示当å‰èŠ‚ç‚¹åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n" +"ç›®æ ‡èŠ‚ç‚¹è·¯å¾„åŽåŠ ä¸Šå¯é€‰çš„“ååç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n" +"有效 NodePath 的示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å˜åœ¨å¹¶å…·æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n" +"[codeblock]\n" +"# 指å‘ç²¾çµèŠ‚ç‚¹\n" +"“Path2D/PathFollow2D/Spriteâ€\n" +"# æŒ‡å‘ Sprite 节点åŠå…¶â€œçº¹ç†â€èµ„æºã€‚\n" +"# get_node() 将检索“Spriteâ€ï¼Œè€Œ get_node_and_resource()\n" +"# å°†åŒæ—¶æ£€ç´¢ Sprite 节点和“纹ç†â€èµ„æºã€‚\n" +"“Path2D/PathFollow2D/Sprite:textureâ€\n" +"# æŒ‡å‘ Sprite 节点åŠå…¶â€œä½ç½®â€å±žæ€§ã€‚\n" +"\"Path2D/PathFollow2D/Sprite:position\"\n" +"# æŒ‡å‘ Sprite 节点åŠå…¶â€œpositionâ€å±žæ€§çš„“xâ€ç»„件。\n" +"\"Path2D/PathFollow2D/Sprite:position:x\"\n" +"# ç»å¯¹è·¯å¾„(æ¥è‡ªâ€œrootâ€ï¼‰\n" +"“/root/Level/Path2Dâ€\n" "[/codeblock]" #: doc/classes/NodePath.xml:55 @@ -44743,7 +45053,6 @@ msgstr "" "[/codeblock]" #: doc/classes/NodePath.xml:68 -#, fuzzy msgid "" "Returns all subnames concatenated with a colon character ([code]:[/code]) as " "separator, i.e. the right side of the first colon in a node path.\n" @@ -44752,15 +45061,14 @@ msgid "" "print(nodepath.get_concatenated_subnames()) # texture:load_path\n" "[/codeblock]" msgstr "" -"返回所有用冒å·([code]:[/code])作为分隔符连接的åå称,å³èŠ‚ç‚¹è·¯å¾„ä¸ç¬¬ä¸€ä¸ªå†’å·" -"çš„å³ä¾§ã€‚\n" +"返回以冒å·å—符 ([code]:[/code]) 作为分隔符连接的所有åå称,å³èŠ‚ç‚¹è·¯å¾„ä¸ç¬¬ä¸€" +"个冒å·çš„å³ä¾§ã€‚\n" "[codeblock]\n" -"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path\")\n" -"print(nodepath.get_concatenated_subnames()) # texture:load_path\n" +"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n" +"print(nodepath.get_concatenated_subnames()) #texture:load_path\n" "[/codeblock]" #: doc/classes/NodePath.xml:79 -#, fuzzy msgid "" "Gets the node name indicated by [code]idx[/code] (0 to [method " "get_name_count]).\n" @@ -44771,27 +45079,25 @@ msgid "" "print(node_path.get_name(2)) # Sprite\n" "[/codeblock]" msgstr "" -"获å–ç”±[code]idx[/code]表示的节点å称(0到[method get_name_count])。\n" +"获å–ç”± [code]idx[/code](0 到 [method get_name_count])指示的节点å称。\n" "[codeblock]\n" -"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D\")\n" +"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n" "print(node_path.get_name(0)) # Path2D\n" -"print(node_path.get_name(1)) # PathFollow2D\n" -"print(node_path.get_name(2)) # Sprite\n" +"print(node_path.get_name(1)) #PathFollow2D\n" +"print(node_path.get_name(2)) #Sprite\n" "[/codeblock]" #: doc/classes/NodePath.xml:91 -#, fuzzy msgid "" "Gets the number of node names which make up the path. Subnames (see [method " "get_subname_count]) are not included.\n" "For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names." msgstr "" -"èŽ·å–æž„æˆè·¯å¾„的节点å称的数é‡ã€‚åå称(è§[方法get_subname_count])ä¸åŒ…括在" -"内。\n" -"例如,[code]\"Path2D/PathFollow2D/Sprite2D\"[/code]包å«ä¸‰ä¸ªå称。" +"获å–组æˆè·¯å¾„的节点å称的数é‡ã€‚ä¸åŒ…括åå称(请å‚阅 [method " +"get_subname_count])。\n" +"例如,[code]\"Path2D/PathFollow2D/Sprite\"[/code] 有 3 个å称。" #: doc/classes/NodePath.xml:99 -#, fuzzy msgid "" "Gets the resource or property name indicated by [code]idx[/code] (0 to " "[method get_subname_count]).\n" @@ -44801,17 +45107,15 @@ msgid "" "print(node_path.get_subname(1)) # load_path\n" "[/codeblock]" msgstr "" -"获å–ç”±[code]idx[/code](0到[method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å" +"获å–ç”± [code]idx[/code](0 到 [method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å" "称。\n" "[codeblock]\n" -"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path" -"\")\n" +"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n" "print(node_path.get_subname(0)) # texture\n" "print(node_path.get_subname(1)) # load_path\n" "[/codeblock]" #: doc/classes/NodePath.xml:110 -#, fuzzy msgid "" "Gets the number of resource or property names (\"subnames\") in the path. " "Each subname is listed after a colon character ([code]:[/code]) in the node " @@ -44819,10 +45123,10 @@ msgid "" "For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] " "has 2 subnames." msgstr "" -"获å–路径ä¸çš„èµ„æºæˆ–属性å称(\"ååç§°\")的数é‡ã€‚æ¯ä¸ªåå称都列在节点路径ä¸çš„" -"冒å·å—符([code]:[/code])之åŽã€‚\n" -"例如,[code]\"Path2D/PathFollow2D/Sprite2D:texture:load_path\"[/code]包å«ä¸¤ä¸ª" -"åå称。" +"获å–路径ä¸èµ„æºæˆ–属性å称(“ååç§°â€ï¼‰çš„æ•°é‡ã€‚æ¯ä¸ªåå称都列在节点路径ä¸çš„冒å·" +"å—符 ([code]:[/code]) 之åŽã€‚\n" +"例如,[code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] 有 2 个å" +"å称。" #: doc/classes/NodePath.xml:117 msgid "" @@ -44846,7 +45150,6 @@ msgid "[OpenSimplexNoise] filled texture." msgstr "[OpenSimplexNoise]填充纹ç†ã€‚" #: modules/opensimplex/doc_classes/NoiseTexture.xml:7 -#, fuzzy msgid "" "Uses an [OpenSimplexNoise] to fill the texture data. You can specify the " "texture size but keep in mind that larger textures will take longer to " @@ -44862,12 +45165,12 @@ msgid "" "var image = texture.get_data()\n" "[/codeblock]" msgstr "" -"使用一个[OpenSimplexNoise]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚ä½ å¯ä»¥æŒ‡å®šçº¹ç†çš„大å°ï¼Œä½†è¯·è®°ä½ï¼Œæ›´" -"大的纹ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œè€Œä¸”æ— ç¼å™ªå£°åªé€‚用于方形大å°çš„纹ç†ã€‚\n" -"NoiseTexture也å¯ä»¥ç”Ÿæˆæ³•线图纹ç†ã€‚\n" -"该类在内部使用[Thread]æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œæ‰€ä»¥å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method " -"Texture2D.get_data]å¯èƒ½ä¼šè¿”回[code]null[/code]ã€‚åœ¨è¿™ç§æƒ…å†µä¸‹ï¼Œä½ éœ€è¦åœ¨è®¿é—®æ•°" -"æ®ä¹‹å‰ç‰å¾…纹ç†çš„生æˆã€‚\n" +"使用 [OpenSimplexNoise] å¡«å……çº¹ç†æ•°æ®ã€‚您å¯ä»¥æŒ‡å®šçº¹ç†å¤§å°ï¼Œä½†è¯·è®°ä½ï¼Œè¾ƒå¤§çš„纹" +"ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œå¹¶ä¸”æ— ç¼å™ªå£°ä»…适用于方形大å°çš„纹ç†ã€‚\n" +"NoiseTexture 还å¯ä»¥ç”Ÿæˆæ³•线贴图纹ç†ã€‚\n" +"该类内部使用线程 [Thread]s æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œå› æ¤å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method " +"Texture.get_data]å¯èƒ½ä¼šè¿”回空 [code]null[/code]ã€‚åœ¨è¿™ç§æƒ…况下,您需è¦åœ¨è®¿é—®æ•°" +"æ®ä¹‹å‰ç‰å¾…纹ç†ç”Ÿæˆï¼š\n" "[codeblock]\n" "var texture = preload(\"res://noise.tres\")\n" "yield(texture, \"changed\")\n" @@ -44924,12 +45227,10 @@ msgid "Width of the generated texture." msgstr "生æˆçš„纹ç†çš„宽度。" #: doc/classes/Object.xml:4 -#, fuzzy msgid "Base class for all non-built-in types." msgstr "所有éžå†…置类型的基类。" #: doc/classes/Object.xml:7 -#, fuzzy msgid "" "Every class which is not a built-in type inherits from this class.\n" "You can construct Objects from scripting languages, using [code]Object.new()" @@ -44966,30 +45267,33 @@ msgid "" "code]. This bug only applies to Object itself, not any of its descendents " "like [Reference]." msgstr "" -"æ¯ä¸€ä¸ªä¸æ˜¯å†…置类型的类都会继承自这个类。\n" -"ä½ å¯ä»¥ä»Žè„šæœ¬è¯è¨€ä¸æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨GDScriptä¸çš„[code]Object.new()[/code],C#ä¸ï¼Œ" -"使用[code]new Object[/code],或者VisualScriptä¸çš„ \"Construct Object \"节" -"点。\n" -"对象ä¸ç®¡ç†å†…å˜ã€‚如果一个类继承于Objectï¼Œä½ å°†ä¸å¾—䏿‰‹åŠ¨åˆ é™¤å®ƒçš„å®žä¾‹ã€‚ä¸ºæ¤ï¼Œå¯" -"ä»¥åœ¨ä½ çš„è„šæœ¬ä¸è°ƒç”¨[method free]方法,或者从C++ä¸åˆ 除该实例。\n" -"一些扩展Objectçš„ç±»ä¼šå¢žåŠ å†…å˜ç®¡ç†ã€‚这就是 [Reference] 的情况,它对引用进行计" -"数,并在ä¸å†è¢«å¼•ç”¨æ—¶è‡ªåŠ¨åˆ é™¤è‡ªå·±ã€‚[Node],å¦ä¸€ä¸ªåŸºæœ¬ç±»åž‹ï¼Œå½“从内å˜ä¸é‡Šæ”¾æ—¶ï¼Œ" -"ä¼šåˆ é™¤å®ƒçš„æ‰€æœ‰å节点。\n" -"对象导出属性,这主è¦å¯¹å˜å‚¨å’Œç¼–辑有用,但在编程ä¸å…¶å®žå¹¶ä¸é‚£ä¹ˆæœ‰ç”¨ã€‚属性在" -"[method _get_property_list]ä¸å¯¼å‡ºï¼Œåœ¨[method _get]å’Œ[method _set]ä¸å¤„ç†ã€‚ç„¶" -"而,脚本è¯è¨€å’ŒC++有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n" -"在GDScriptä¸å¯ä»¥ä½¿ç”¨[code]in[/code]直接测试属性æˆå‘˜ã€‚\n" +"æ¯ä¸ªä¸æ˜¯å†…置类型的类都继承自这个类。\n" +"您å¯ä»¥ä»Žè„šæœ¬è¯è¨€æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨ GDScript ä¸çš„ [code]Object.new()[/code]ã€C# ä¸" +"çš„ [code]new Object[/code] 或 VisualScript ä¸çš„â€œæž„é€ å¯¹è±¡â€èŠ‚ç‚¹ã€‚\n" +"对象ä¸ç®¡ç†å†…å˜ã€‚如果类继承自 Objectï¼Œåˆ™å¿…é¡»æ‰‹åŠ¨åˆ é™¤å®ƒçš„å®žä¾‹ã€‚ä¸ºæ¤ï¼Œè¯·ä»Žæ‚¨çš„脚" +"本ä¸è°ƒç”¨ [method free] 方法或从 C++ ä¸åˆ 除该实例。\n" +"一些继承 Object çš„ç±»æ·»åŠ äº†å†…å˜ç®¡ç†ã€‚ [Reference] å°±æ˜¯è¿™ç§æƒ…况,它对引用进行计" +"数,并在ä¸å†è¢«å¼•ç”¨æ—¶è‡ªåŠ¨åˆ é™¤è‡ªå·±ã€‚ [Node] 是å¦ä¸€ç§åŸºæœ¬ç±»åž‹ï¼Œåœ¨ä»Žå†…å˜ä¸é‡Šæ”¾æ—¶" +"åˆ é™¤å…¶æ‰€æœ‰å节点。\n" +"对象导出属性,这些属性主è¦ç”¨äºŽå˜å‚¨å’Œç¼–辑,但在编程ä¸å¹¶ä¸æ˜¯é‚£ä¹ˆæœ‰ç”¨ã€‚属性在 " +"[method _get_property_list] ä¸å¯¼å‡ºå¹¶åœ¨ [method _get] å’Œ [method _set] ä¸å¤„" +"ç†ã€‚然而,脚本è¯è¨€å’Œ C++ 有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n" +"在GDScriptä¸å¯ä»¥ä½¿ç”¨ [code]in[/code] 直接测试属性æˆå‘˜ã€‚\n" "[codeblock]\n" "var n = Node2D.new()\n" -"print(\"position\" in n) # Prints \"True\".\n" -"print(\"other_property\" in n) # Prints \"False\".\n" +"print(\"position\" in n) # æ‰“å° \"True\"。\n" +"print(\"other_property\" in n) # æ‰“å° \"False\"。\n" "[/codeblock]\n" -"åªè¦é”®å˜åœ¨ï¼Œ[code]in[/code]æ“作符就会评估为[code]true[/code],å³ä½¿å€¼ä¸º" +"åªè¦é”®å˜åœ¨ï¼Œ[code]in[/code] è¿ç®—符将评估为 [code]true[/code],å³ä½¿å€¼ä¸º " "[code]null[/code]。\n" -"对象也会收到通知。通知是一ç§ç®€å•çš„æ–¹å¼æ¥é€šçŸ¥å¯¹è±¡å…³äºŽä¸åŒçš„事件,所以它们å¯ä»¥" -"一起被处ç†ã€‚å‚阅[method _notification]。\n" -"[b]注æ„:[/b] 与对[引用]的引用ä¸åŒï¼Œå¯¹å˜å‚¨åœ¨å˜é‡ä¸çš„对象的引用å¯ä»¥åœ¨æ²¡æœ‰è¦å‘Š" -"的情况下å˜å¾—æ— æ•ˆã€‚å› æ¤ï¼Œå»ºè®®å¯¹æ•°æ®ç±»ä½¿ç”¨[引用]è€Œä¸æ˜¯[对象]。" +"对象也会收到通知。通知是一ç§å°†ä¸åŒäº‹ä»¶é€šçŸ¥ç»™å¯¹è±¡çš„ç®€å•æ–¹æ³•ï¼Œå› æ¤å®ƒä»¬å¯ä»¥ä¸€èµ·" +"处ç†ã€‚è§ [method _notification]。\n" +"[b]注æ„:[/b] 与对 [Reference] 的引用ä¸åŒï¼Œå¯¹å˜å‚¨åœ¨å˜é‡ä¸çš„对象的引用å¯èƒ½ä¼šåœ¨" +"没有è¦å‘Šçš„æƒ…况下å˜å¾—æ— æ•ˆã€‚å› æ¤ï¼Œå»ºè®®å¯¹æ•°æ®ç±»ä½¿ç”¨ [Reference] è€Œä¸æ˜¯ " +"[Object]。\n" +"[b]注æ„:[/b]ç”±äºŽä¸€ä¸ªé”™è¯¯ï¼Œä½ ä¸èƒ½ä½¿ç”¨ [code]Object.new()[/code] 创建一个“普" +"通â€å¯¹è±¡ã€‚请使用 [code]ClassDB.instance(\"Object\")[/code]。这个错误åªé€‚用于" +"Objectæœ¬èº«ï¼Œè€Œä¸æ˜¯å®ƒçš„任何å类,如[Reference]。" #: doc/classes/Object.xml:24 doc/classes/Reference.xml:13 #: doc/classes/Resource.xml:12 @@ -44997,15 +45301,15 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/" "node_alternatives.html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/" -"node_alternatives.html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/" +"best_practices/node_alternatives.html" #: doc/classes/Object.xml:25 msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" "gdscript_exports.html#advanced-exports" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/" "gdscript_exports.html#advanced-exports" #: doc/classes/Object.xml:32 @@ -45154,7 +45458,6 @@ msgstr "" "set_message_translation]å’Œ[method tr]。" #: doc/classes/Object.xml:128 -#, fuzzy msgid "" "Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/" "code] object. Pass optional [code]binds[/code] to the call as an [Array] of " @@ -45187,37 +45490,36 @@ msgid "" "level, weapon_type, damage])\n" "[/codeblock]" msgstr "" -"[b]FIXME:[/b] è¯æ³•éšç€[Callable]çš„å¢žåŠ è€Œæ”¹å˜ï¼Œè¿™åº”该被更新。\n" -"将一个[code]signal[/code]连接到一个[code]target[/code]对象的[code]method[/" -"code]。将å¯é€‰çš„[code]binds[/code]作为一个[Array]çš„å‚æ•°ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†" -"在调用[method emit_signal]æ—¶ä½¿ç”¨çš„ä»»ä½•å‚æ•°ä¹‹åŽè¢«ä¼ 递到方法ä¸ã€‚使用" -"[code]flags[/code]æ¥è®¾ç½®å»¶è¿Ÿæˆ–一次性连接。å‚阅[enum ConnectFlags]常é‡ã€‚\n" -"一个[code]signal[/code]åªèƒ½è¢«è¿žæŽ¥åˆ°ä¸€ä¸ª[code]method[/code]上一次。如果已ç»è¿ž" -"接了,它将抛出一个错误,除éžè¯¥ä¿¡å·æ˜¯ç”¨[constant CONNECT_REFERENCE_COUNTED]连" -"接的。为了é¿å…è¿™ç§æƒ…况,首先,使用[method is_connected]æ¥æ£€æŸ¥çŽ°æœ‰çš„è¿žæŽ¥ã€‚\n" -"如果[code]target[/code]在游æˆçš„生命周期ä¸è¢«ç ´å,连接就会丢失。\n" -"䏋颿˜¯ç¤ºä¾‹ï¼š\n" +"å°†ä¿¡å· [code]signal[/code] è¿žæŽ¥åˆ°ç›®æ ‡ [code]target[/code] 对象上的方法 " +"[code]method[/code]。将å¯é€‰çš„绑定 [code]binds[/code] 作为一个 [Array] çš„å‚æ•°" +"ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†åœ¨è°ƒç”¨ [method emit_signal] ä¸ä½¿ç”¨çš„任何傿•°ä¹‹åŽä¼ 递给" +"方法。使用 [code]flags[/code] 设置延迟或一次性连接。请å‚阅 [enum " +"ConnectFlags] 常é‡ã€‚\n" +"ä¸€ä¸ªä¿¡å· [code]signal[/code] 与åŒä¸€æ–¹æ³• [code]method[/code] åªèƒ½è¿žæŽ¥ä¸€æ¬¡ã€‚除" +"éžä¹‹å‰åœ¨è¿žæŽ¥ä¿¡å·æ—¶ä½¿ç”¨äº† [constant CONNECT_REFERENCE_COUNTED],å¦åˆ™åœ¨è¿›è¡Œé‡å¤" +"连接时会抛出错误。为é¿å…è¿™ç§æƒ…况,首先使用 [method is_connected] 检查是å¦å·²æœ‰" +"连接。\n" +"如果 [code]target[/code] 在游æˆç”Ÿå‘½å‘¨æœŸä¸è¢«é”€æ¯ï¼Œè¿žæŽ¥å°†ä¸¢å¤±ã€‚\n" +"例å:\n" "[codeblock]\n" -"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n" -"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit " -"signal\n" -"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-" -"defined signal\n" +"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton ä¿¡å·\n" +"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit ä¿¡" +"å·\n" +"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # 用户自" +"定义信å·\n" "[/codeblock]\n" -"An example of the relationship between [code]binds[/code] passed to [method " -"connect] and parameters used when calling [method emit_signal]:\n" -"[codeblock]\n" -"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # " -"weapon_type and damage are passed last\n" -"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed " -"first\n" -"func _on_Player_hit(hit_by, level, weapon_type, damage):\n" -" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, " +"ä¼ é€’ç»™ [method connect] çš„ [code]binds[/code] 与调用 [method emit_signal] æ—¶" +"ä½¿ç”¨çš„å‚æ•°çš„关系示例:\n" +"[codeblock]\n" +"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # æ¦å™¨ç±»" +"型和伤害最åŽä¼ 递\n" +"emit_signal(\"hit\", \"Dark lord\", 5) # å…ˆä¼ é€’ \"Dark lord\" å’Œ 5\n" +"func _on_Player_hit(hit_by, level, Weapon_type, damage):\n" +" print(\"被 %s(ç‰çº§ %d)使用æ¦å™¨ %s 击ä¸ï¼Œé€ æˆ %d 点伤害\" % [hit_by, " "level, weapon_type, damage])\n" "[/codeblock]" #: doc/classes/Object.xml:152 -#, fuzzy msgid "" "Disconnects a [code]signal[/code] from a [code]method[/code] on the given " "[code]target[/code].\n" @@ -45225,10 +45527,10 @@ msgid "" "throw an error. Use [method is_connected] to ensure that the connection " "exists." msgstr "" -"[b]FIXME:[/b] æ·»åŠ äº†[Callable]åŽï¼Œè¯æ³•å‘生了å˜åŒ–,应该进行更新。\n" -"从给定的[code]target[/code]上的[code]method[/code]æ–å¼€[code]signal[/code]。\n" -"如果试图æ–å¼€ä¸å˜åœ¨çš„连接,该方法将抛出错误。使用[method is_connected]ç¡®ä¿è¿žæŽ¥" -"å˜åœ¨ã€‚" +"å°† [code] ä¿¡å· [/code] 与给定 [code] ç›®æ ‡ [/code] 上的 [code] 方法 [/code] æ–" +"开。\n" +"如果您å°è¯•æ–å¼€ä¸å˜åœ¨çš„连接,该方法将引å‘错误。使用 [method is_connected] ç¡®ä¿" +"连接å˜åœ¨ã€‚" #: doc/classes/Object.xml:160 msgid "" @@ -45335,9 +45637,8 @@ msgid "Returns the object's metadata entry for the given [code]name[/code]." msgstr "返回给定[code]name[/code]çš„å¯¹è±¡çš„å…ƒæ•°æ®æ¡ç›®ã€‚" #: doc/classes/Object.xml:223 -#, fuzzy msgid "Returns the object's metadata as a [PoolStringArray]." -msgstr "将对象的元数æ®ä½œä¸ºä¸€ä¸ª[PackedStringArray]返回。" +msgstr "将对象的元数æ®ä½œä¸º [PoolStringArray] 返回。" #: doc/classes/Object.xml:229 msgid "Returns the object's methods and their signatures as an [Array]." @@ -45417,14 +45718,12 @@ msgstr "" "false[/code] 。" #: doc/classes/Object.xml:306 -#, fuzzy msgid "" "Returns [code]true[/code] if a connection exists for a given [code]signal[/" "code], [code]target[/code], and [code]method[/code]." msgstr "" -"[b]FIXME:[/b] è¯æ³•éšç€[Callable]çš„å¢žåŠ è€Œæ”¹å˜ï¼Œè¿™åº”该被更新。\n" -"如果给定的[code]signal[/code]ã€[code]target[/code]å’Œ[code]method[/code]å˜åœ¨ä¸€" -"个连接,返回[code]true[/code]。" +"如果给定 [code] ä¿¡å· [/code]ã€[code] ç›®æ ‡ [/code] å’Œ [code] 方法 [/code] å˜åœ¨" +"连接,则返回 [code]true[/code]。" #: doc/classes/Object.xml:312 msgid "" @@ -45460,10 +45759,9 @@ msgstr "" "任何作用。" #: doc/classes/Object.xml:334 -#, fuzzy msgid "" "Removes a given entry from the object's metadata. See also [method set_meta]." -msgstr "从对象的元数æ®ä¸åˆ 除一个给定的æ¡ç›®ã€‚" +msgstr "从对象的元数æ®ä¸åˆ 除给定æ¡ç›®ã€‚å¦è§ [method set_meta]。" #: doc/classes/Object.xml:342 msgid "" @@ -45573,8 +45871,8 @@ msgid "" "set_message_translation]." msgstr "" "使用在“项目设置â€ä¸é…置的翻译目录翻译消æ¯ã€‚\n" -"åªæœ‰åœ¨å¯ç”¨æ¶ˆæ¯ç¿»è¯‘(默认情况下)æ—¶æ‰æœ‰æ•ˆï¼Œå¦åˆ™è¿”回ä¸å˜çš„[code]消æ¯[/code]。" -"set_message_translation[方法]。" +"仅在å¯ç”¨æ¶ˆæ¯ç¿»è¯‘时(默认如æ¤ï¼‰æœ‰æ•ˆï¼Œå¦åˆ™è¿”回未修改的 [code]message[/code]。å‚" +"阅 [method set_message_translation]。" #: doc/classes/Object.xml:418 msgid "Emitted whenever the object's script is changed." @@ -45615,7 +45913,7 @@ msgstr "" #: doc/classes/Occluder.xml:4 msgid "Allows [OccluderShape]s to be used for occlusion culling." -msgstr "" +msgstr "å…许使用[OccluderShape]æ¥è¿›è¡Œé®æŒ¡å‰”除。" #: doc/classes/Occluder.xml:7 msgid "" @@ -45640,6 +45938,19 @@ msgid "" "placed in rooms (based on their origin), and can block portals (and thus " "entire rooms) as well as objects from rendering." msgstr "" +"放置在场景ä¸çš„ [Occluder] 鮿Œ¡å™¨å°†è‡ªåŠ¨å‰”é™¤è¢«é®æŒ¡å™¨éšè—的对象。这å¯ä»¥é€šè¿‡å‡å°‘" +"ç»˜åˆ¶çš„å¯¹è±¡æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚\n" +"[Occluder] 是完全动æ€çš„,您å¯ä»¥éšæ„移动它们。例如,这æ„å‘³ç€æ‚¨å¯ä»¥åœ¨ç§»åŠ¨çš„å®‡å®™" +"é£žèˆ¹ä¸Šæ”¾ç½®é®æŒ¡ç‰©ï¼Œå¹¶è®©å®ƒåœ¨é£žè¿‡æ—¶é®æŒ¡ç‰©ä½“。\n" +"您å¯ä»¥åœ¨ä¸€ä¸ªåœºæ™¯ä¸æ”¾ç½®å¤§é‡ [Occluder]ã€‚ç”±äºŽå‰”é™¤æ•°ç™¾ä¸ªé®æŒ¡ç‰©ä¼šé€‚å¾—å…¶å,系统将" +"æ ¹æ®å±å¹•ç©ºé—´æŒ‡æ ‡è‡ªåŠ¨é€‰æ‹©è¿™äº›é®æŒ¡ç‰©åœ¨ä»»ä½•ç»™å®šå¸§æœŸé—´ä¸»åŠ¨ä½¿ç”¨ã€‚è¾ƒå¤§çš„é®æŒ¡ç‰©ä»¥åŠ" +"é è¿‘ç›¸æœºçš„é®æŒ¡ç‰©å—到é’ç。请注æ„,就å±å¹•空间而言,é 近相机的å°é®æŒ¡ç‰©å¯èƒ½æ¯”远" +"å¤„çš„å¤§é®æŒ¡ç‰©æ›´å¥½ã€‚\n" +"鮿Œ¡å›¾å…ƒçš„ç±»åž‹ç”±æ‚¨æ·»åŠ åˆ° [Occluder] çš„ [OccluderShape] 决定。æŸäº› " +"[OccluderShape] å¯èƒ½å…许在å•ä¸ªèŠ‚ç‚¹ä¸æœ‰å¤šä¸ªå›¾å…ƒï¼Œä»¥æé«˜æ•ˆçŽ‡ã€‚\n" +"尽管 [Occluder] 在一般用途ä¸å·¥ä½œï¼Œä½†ä¸Žé—¨æˆ·ç³»ç»Ÿç»“åˆä½¿ç”¨æ—¶ï¼Œå®ƒä»¬ä¹Ÿä¼šå˜å¾—æ›´åŠ å¼º" +"å¤§ã€‚é®æŒ¡ç‰©æ”¾ç½®åœ¨æˆ¿é—´ä¸ï¼ˆåŸºäºŽå®ƒä»¬çš„原点),并且å¯ä»¥é˜»æŒ¡é—¨æˆ·ï¼ˆä»¥åŠæ•´ä¸ªæˆ¿é—´ï¼‰ä»¥" +"åŠæ¸²æŸ“对象。" #: doc/classes/OccluderPolygon2D.xml:4 msgid "Defines a 2D polygon for LightOccluder2D." @@ -45691,15 +46002,15 @@ msgstr "按逆时针方å‘进行剔除。å‚阅[member cull_mode]。" #: doc/classes/OccluderShape.xml:4 msgid "" "Base class for shapes used for occlusion culling by the [Occluder] node." -msgstr "" +msgstr "用于[Occluder]èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。" #: doc/classes/OccluderShape.xml:7 msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]." -msgstr "" +msgstr "[Occluder] å¯ä»¥ä½¿ç”¨ä»Ž [OccluderShape] 派生的任何原始形状。" #: doc/classes/OccluderShapeSphere.xml:4 msgid "Spherical occlusion primitive for use with the [Occluder] node." -msgstr "" +msgstr "与 [Occluder] 节点一起使用的çƒå½¢é®æŒ¡åŸºæœ¬å•元。" #: doc/classes/OccluderShapeSphere.xml:7 msgid "" @@ -45710,16 +46021,18 @@ msgid "" "sphere positions can be set by dragging the handle in the Editor viewport. " "The radius can be set with the smaller handle." msgstr "" +"[OccluderShape] 是 [Occluder] 节点使用的资æºï¼Œå…è®¸å‡ ä½•é®æŒ¡å‰”除。\n" +"è¿™ç§å½¢çжå¯ä»¥åŒ…括多个çƒä½“。这些å¯ä»¥åœ¨ç¼–è¾‘å™¨æ£€æŸ¥å™¨ä¸æˆ–通过调用 " +"[code]set_spheres[/code] æ¥åˆ›å»ºå’Œåˆ 除。å¯ä»¥é€šè¿‡åœ¨ç¼–辑器视å£ä¸æ‹–动手柄æ¥è®¾ç½®çƒ" +"体ä½ç½®ã€‚å¯ä»¥ä½¿ç”¨è¾ƒå°çš„æ‰‹æŸ„设置åŠå¾„。" #: doc/classes/OccluderShapeSphere.xml:18 -#, fuzzy msgid "Sets an individual sphere's position." -msgstr "在[member collision_mask]上设置独立åƒç´ 。" +msgstr "设置å•个çƒä½“çš„ä½ç½®ã€‚" #: doc/classes/OccluderShapeSphere.xml:26 -#, fuzzy msgid "Sets an individual sphere's radius." -msgstr "返回图层蒙版上的å•个ä½ã€‚" +msgstr "设置å•个çƒä½“çš„åŠå¾„。" #: doc/classes/OccluderShapeSphere.xml:32 msgid "" @@ -45727,6 +46040,8 @@ msgid "" "each sphere is stored in the [code]normal[/code], and the radius is stored " "in the [code]d[/code] value of the plane." msgstr "" +"çƒä½“æ•°æ®å¯ä»¥ä½œä¸º [Plane] 数组访问。æ¯ä¸ªçƒä½“çš„ä½ç½®å˜å‚¨åœ¨[code]normal[/code]" +"ä¸ï¼ŒåŠå¾„å˜å‚¨åœ¨å¹³é¢çš„[code]d[/code]值ä¸ã€‚" #: doc/classes/OmniLight.xml:4 msgid "Omnidirectional light, such as a light bulb or a candle." @@ -45745,6 +46060,13 @@ msgid "" "lights per mesh, you can increase [member ProjectSettings.rendering/limits/" "rendering/max_lights_per_object] at the cost of shader compilation times." msgstr "" +"å…¨å‘光是一ç§å‘所有方å‘å‘光的[Light]ã€‚å…‰ä¼šå› è·ç¦»è€Œè¡°å‡ï¼Œå¹¶ä¸”å¯ä»¥é€šè¿‡æ›´æ”¹å…¶èƒ½" +"é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置这ç§è¡°å‡ã€‚\n" +"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 OmniLight å¯ä»¥åŒæ—¶å½±å“å•ä¸ªç½‘æ ¼ [i] " +"resource [/i](资æº)ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘æ ¼ï¼Œä»¥é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘" +"æ ¼èµ„æºçš„å¯èƒ½æ€§ã€‚æ‹†åˆ†æ°´å¹³ç½‘æ ¼ä¹Ÿå°†æé«˜è§†é”¥ä½“剔除效果,从而æé«˜æ€§èƒ½ã€‚如果您需è¦" +"为æ¯ä¸ªç½‘æ ¼ä½¿ç”¨æ›´å¤šç¯å…‰ï¼Œæ‚¨å¯ä»¥ä»¥ç€è‰²å™¨ç¼–è¯‘æ—¶é—´ä¸ºä»£ä»·å¢žåŠ [member " +"ProjectSettings.rendering/limits/rendering/max_lights_per_object]。" #: doc/classes/OmniLight.xml:17 msgid "" @@ -45788,11 +46110,11 @@ msgstr "" #: doc/classes/OmniLight.xml:37 msgid "Use more detail vertically when computing the shadow." -msgstr "" +msgstr "在计算阴影时,垂直方å‘上使用更多的细节。" #: doc/classes/OmniLight.xml:40 msgid "Use more detail horizontally when computing the shadow." -msgstr "" +msgstr "在计算阴影时,在水平方å‘上使用更多的细节。" #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4 msgid "Noise generator based on Open Simplex." @@ -45845,6 +46167,9 @@ msgid "" "value is used as the coordinates of the top-left corner of the generated " "noise." msgstr "" +"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ª[constant Image.FORMAT_L8]æ ¼å¼çš„噪声图åƒï¼Œéœ€è¦æŒ‡" +"定其[code]width[/code] å’Œ [code]height[/code]。如果指定了[code]noise_offset[/" +"code],那么å移值将作为生æˆçš„å™ªå£°å·¦ä¸Šè§’çš„åæ ‡ã€‚" #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40 msgid "" @@ -45871,7 +46196,6 @@ msgid "Returns the 4D noise value [code][-1,1][/code] at the given position." msgstr "返回指定ä½ç½®çš„4D噪声值[code][-1,1][/code]。" #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89 -#, fuzzy msgid "" "Generate a tileable noise image in [constant Image.FORMAT_L8] format, based " "on the current noise parameters. Generated seamless images are always square " @@ -45880,8 +46204,10 @@ msgid "" "noise. This is due to the way noise uses higher dimensions for generating " "seamless noise." msgstr "" -"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ªå¯å¹³é“ºçš„噪声图åƒã€‚生æˆçš„æ— ç¼å›¾åƒæ€»æ˜¯æ–¹å½¢çš„" -"([code]size[/code] × [code]size[/code])。" +"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œä»¥ [constant Image.FORMAT_L8] æ ¼å¼ç”Ÿæˆå¯å¹³é“ºå™ªå£°å›¾åƒã€‚生" +"æˆçš„æ— ç¼å›¾åƒå§‹ç»ˆæ˜¯æ–¹å½¢çš„([code]size[/code]× [code] size [/code])。\n" +"[b]注æ„:[/b] ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”ï¼Œæ— ç¼å™ªå£°çš„对比度较低。。这是由于噪声使用更高" +"维度æ¥ç”Ÿæˆæ— ç¼å™ªå£°çš„æ–¹å¼ã€‚" #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96 msgid "Difference in period between [member octaves]." @@ -45925,7 +46251,6 @@ msgid "Button control that provides selectable options when pressed." msgstr "按下时æä¾›å¯é€‰é€‰é¡¹çš„æŒ‰é’®æŽ§ä»¶ã€‚" #: doc/classes/OptionButton.xml:7 -#, fuzzy msgid "" "OptionButton is a type button that provides a selectable list of items when " "pressed. The item selected becomes the \"current\" item and is displayed as " @@ -45933,8 +46258,9 @@ msgid "" "See also [BaseButton] which contains common properties and methods " "associated with this node." msgstr "" -"OptionButton是一个类型按钮,当按下时æä¾›å¯é€‰æ‹©çš„项目列表。选ä¸çš„项目将æˆä¸ºâ€œå½“" -"å‰â€é¡¹ç›®ï¼Œå¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚" +"OptionButton 是一ç§ç±»åž‹æŒ‰é’®ï¼Œå¯åœ¨æŒ‰ä¸‹æ—¶æä¾›å¯é€‰æ‹©çš„项目列表。所选项目æˆä¸ºâ€œå½“" +"å‰â€é¡¹ç›®å¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚\n" +"å¦è¯·å‚阅 [BaseButton],其ä¸åŒ…å«ä¸Žæ¤èŠ‚ç‚¹å…³è”的通用属性和方法。" #: doc/classes/OptionButton.xml:19 msgid "" @@ -46060,14 +46386,13 @@ msgid "" msgstr "当å‰é€‰å®šé¡¹çš„索引,如果没有选定项,则为[code]-1[/code]。" #: doc/classes/OptionButton.xml:177 -#, fuzzy msgid "" "Emitted when the user navigates to an item using the [code]ui_up[/code] or " "[code]ui_down[/code] actions. The index of the item selected is passed as " "argument." msgstr "" -"当用户使用[code]ui_up[/code]或[code]ui_down[/code]æ“作导航到一个项目时触å‘。" -"æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ 递。" +"当用户使用 [code]ui_up[/code] 或 [code]ui_down[/code] æ“作导航到一个项目时å‘" +"å‡ºã€‚æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ 递。" #: doc/classes/OptionButton.xml:183 msgid "" @@ -46115,6 +46440,8 @@ msgid "" "normal text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"当[OptionButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€" +"悬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚" #: doc/classes/OptionButton.xml:215 msgid "Text [Color] used when the [OptionButton] is being hovered." @@ -46159,11 +46486,11 @@ msgid "" "Displays a modal dialog box using the host OS' facilities. Execution is " "blocked until the dialog is closed." msgstr "" +"使用主机æ“作系统显示一个模å¼åŒ–çš„å¯¹è¯æ¡†ã€‚æ‰§è¡Œå°†è¢«é˜»å¡žï¼Œç›´åˆ°è¯¥å¯¹è¯æ¡†è¢«å…³é—。" #: doc/classes/OS.xml:24 -#, fuzzy msgid "Returns [code]true[/code] if the host OS allows drawing." -msgstr "如果å—体有边框,返回[code]true[/code]。" +msgstr "如果主机æ“作系统å…许绘制,则返回 [code]true[/code]。" #: doc/classes/OS.xml:30 msgid "" @@ -46172,9 +46499,8 @@ msgid "" msgstr "如果当å‰ä¸»æœºå¹³å°ä½¿ç”¨å¤šä¸ªçº¿ç¨‹ï¼Œåˆ™è¿”回[code]true[/code]。" #: doc/classes/OS.xml:36 -#, fuzzy msgid "Centers the window on the screen if in windowed mode." -msgstr "设置指定节点的ä½ç½®ã€‚" +msgstr "å¦‚æžœå¤„äºŽçª—å£æ¨¡å¼ï¼Œåˆ™ä½¿çª—å£åœ¨å±å¹•上居ä¸ã€‚" #: doc/classes/OS.xml:42 msgid "" @@ -46203,6 +46529,18 @@ msgid "" "the project if it is currently running (since the project is an independent " "child process)." msgstr "" +"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]msec[/code] 毫秒。 [code]msec[/code] 必须大于或ç‰" +"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_msec] 将䏿‰§è¡Œä»»ä½•æ“作并打å°é”™è¯¯æ¶ˆ" +"æ¯ã€‚\n" +"[b]注:[/b] [method delay_msec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»" +"塞方å¼å»¶è¿Ÿä»£ç 执行,请å‚阅 [method SceneTree.create_timer]。使用 [method " +"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç 的执行," +"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ " +"[EditorScript])。\n" +"[b]注æ„:[/b]当在主线程上调用[method delay_msec]时,它会冻结项目并阻æ¢å®ƒé‡æ–°" +"绘制和注册输入,直到延迟结æŸã€‚当使用 [method delay_msec] 作为 [EditorPlugin] " +"或 [EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿£åœ¨è¿è¡Œçš„é¡¹ç›®ï¼ˆå› " +"为项目是一个独立的å进程)。" #: doc/classes/OS.xml:59 msgid "" @@ -46223,6 +46561,18 @@ msgid "" "the project if it is currently running (since the project is an independent " "child process)." msgstr "" +"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]usec[/code] 微秒。 [code]usec[/code] 必须大于或ç‰" +"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_usec] 将什么也ä¸åšï¼Œå¹¶ä¼šæ‰“å°é”™è¯¯æ¶ˆ" +"æ¯ã€‚\n" +"[b]注:[/b] [method delay_usec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»" +"塞方å¼å»¶è¿Ÿä»£ç 执行,请å‚阅 [method SceneTree.create_timer]。使用 [method " +"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç 的执行," +"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ " +"[EditorScript])。\n" +"[b]注æ„:[/b]当在主线程上调用[method delay_usec]时,它会冻结项目并阻æ¢å®ƒé‡ç»˜" +"和注册输入,直到延迟结æŸã€‚当使用 [method delay_usec] 作为 [EditorPlugin] 或 " +"[EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿£åœ¨è¿è¡Œçš„é¡¹ç›®ï¼ˆå› ä¸ºé¡¹" +"目是一个独立的å进程)。" #: doc/classes/OS.xml:68 msgid "" @@ -46318,19 +46668,16 @@ msgstr "" "[b]注:[/b]æ¤æ–¹æ³•仅在Android, iOS, Linux, macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:115 -#, fuzzy msgid "Returns the scancode of the given string (e.g. \"Escape\")." -msgstr "返回给定å—符串的键ç (例如:“Escapeâ€)。" +msgstr "返回给定å—符串的扫æç (例如“Escapeâ€ï¼‰ã€‚" #: doc/classes/OS.xml:121 -#, fuzzy msgid "Returns the total number of available audio drivers." -msgstr "返回[Mesh]ä¸é¡¶ç‚¹çš„æ€»æ•°ã€‚" +msgstr "返回å¯ç”¨éŸ³é¢‘驱动程åºçš„æ€»æ•°ã€‚" #: doc/classes/OS.xml:128 -#, fuzzy msgid "Returns the audio driver name for the given index." -msgstr "返回给定索引处的顶点。" +msgstr "返回给定索引的音频驱动程åºå称。" #: doc/classes/OS.xml:134 msgid "" @@ -46344,9 +46691,15 @@ msgid "" "Not to be confused with [method get_user_data_dir], which returns the " "[i]project-specific[/i] user data path." msgstr "" +"æ ¹æ®æ“ä½œç³»ç»Ÿçš„æ ‡å‡†è¿”å›ž[i]全局[/i]ç¼“å˜æ•°æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œå¯ä»¥é€šè¿‡åœ¨å¯åЍ项" +"目之å‰è®¾ç½® [code]XDG_CACHE_HOME[/code] 环境å˜é‡æ¥è¦†ç›–æ¤è·¯å¾„。有关更多信æ¯ï¼Œè¯·" +"å‚阅文档ä¸çš„ [url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/" +"data_paths.html]Godot 项目ä¸çš„æ–‡ä»¶è·¯å¾„[/url]。å¦è¯·å‚阅 [method " +"get_config_dir] å’Œ [method get_data_dir]。\n" +"ä¸è¦ä¸Ž [method get_user_data_dir] 混淆,åŽè€…返回 [i] 项目特定的 [/i] 用户数æ®" +"路径。" #: doc/classes/OS.xml:141 -#, fuzzy msgid "" "Returns the command-line arguments passed to the engine.\n" "Command-line arguments can be written in any form, including both [code]--" @@ -46368,14 +46721,14 @@ msgid "" "[/codeblock]" msgstr "" "è¿”å›žä¼ é€’ç»™å¼•æ“Žçš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n" -"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼ç¼–写,包括[code]--key value[/code]å’Œ[code]--" -"key=value[/code]å½¢å¼ï¼Œä»¥ä¾¿æ£ç¡®è§£æžå®ƒä»¬ï¼Œåªè¦è‡ªå®šä¹‰å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°å†²" -"çªã€‚\n" -"您还å¯ä»¥ä½¿ç”¨[method get_environment]方法åˆå¹¶çŽ¯å¢ƒå˜é‡ã€‚\n" -"您å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸è®¾ç½®[code]editor/main_run_args[/code],以定义在è¿è¡Œé¡¹ç›®æ—¶ç”±" -"ç¼–è¾‘å™¨ä¼ é€’çš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n" -"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何使用[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚æ•°è§£æžä¸ºå—典的最" -"å°ç¤ºä¾‹:\n" +"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼å†™å…¥ï¼ŒåŒ…括[code]--key value[/code]å’Œ[code]--" +"key=value[/code]两ç§å½¢å¼ï¼Œå‡å¯ä»¥æ£ç¡®è§£æžï¼Œåªè¦è‡ªå®šä¹‰çš„å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°" +"冲çªã€‚\n" +"ä½ ä¹Ÿå¯ä»¥ä½¿ç”¨[method get_environment]方法包å«çŽ¯å¢ƒå˜é‡ã€‚\n" +"ä½ å¯ä»¥è®¾ç½®[member ProjectSettings.editor/main_run_args]æ¥å®šä¹‰å‘½ä»¤è¡Œå‚数,以便" +"在è¿è¡Œé¡¹ç›®æ—¶ç”±ç¼–è¾‘å™¨ä¼ é€’ã€‚\n" +"䏋颿˜¯ä¸€ä¸ªå°çš„例åï¼Œè¯´æ˜Žå¦‚ä½•ä½¿ç”¨å‚æ•°çš„[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚" +"æ•°è§£æžæˆä¸€ä¸ªå—典。\n" "[codeblock]\n" "var arguments = {}\n" "for argument in OS.get_cmdline_args():\n" @@ -46396,6 +46749,12 @@ msgid "" "Not to be confused with [method get_user_data_dir], which returns the " "[i]project-specific[/i] user data path." msgstr "" +"æ ¹æ®æ“ä½œç³»ç»Ÿçš„æ ‡å‡†ï¼Œè¿”å›ž[i]全局[/i]用户é…置目录。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨" +"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_CONFIG_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§" +"文档ä¸[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths." +"html]Godot项目ä¸çš„æ–‡ä»¶è·¯å¾„[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method " +"get_data_dir]。\n" +"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。" #: doc/classes/OS.xml:165 msgid "" @@ -46410,11 +46769,10 @@ msgstr "" "[b]注æ„:[/b]该方法仅在Linux, macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:173 -#, fuzzy msgid "" "Returns the currently used video driver, using one of the values from [enum " "VideoDriver]." -msgstr "返回当å‰ç¼–辑的项目。这仅适用于自定义å•å…ƒæ ¼æ¨¡å¼ã€‚" +msgstr "返回当å‰ä½¿ç”¨çš„视频驱动程åºï¼Œä½¿ç”¨[enum VideoDriver]ä¸çš„一个值。" #: doc/classes/OS.xml:179 msgid "" @@ -46428,6 +46786,12 @@ msgid "" "Not to be confused with [method get_user_data_dir], which returns the " "[i]project-specific[/i] user data path." msgstr "" +"æ ¹æ®æ“ä½œç³»ç»Ÿçš„æ ‡å‡†ï¼Œè¿”å›ž[i]全局[/i]用户数æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨" +"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_DATA_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§æ–‡" +"æ¡£ä¸[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths." +"html]Godot项目ä¸çš„æ–‡ä»¶è·¯å¾„[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method " +"get_config_dir]。\n" +"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。" #: doc/classes/OS.xml:187 msgid "" @@ -46462,9 +46826,8 @@ msgstr "" "å› ä¸ºå®ƒä¸èƒ½ä»Žepoch确定。" #: doc/classes/OS.xml:208 -#, fuzzy msgid "Returns the total amount of dynamic memory used (only works in debug)." -msgstr "è¿”å›žä½¿ç”¨çš„é™æ€å†…å˜çš„æœ€å¤§æ•°é‡(ä»…åœ¨è°ƒè¯•ä¸æœ‰æ•ˆ)。" +msgstr "返回使用的动æ€å†…å˜æ€»é‡ï¼ˆä»…适用于调试)。" #: doc/classes/OS.xml:215 msgid "" @@ -46473,20 +46836,22 @@ msgid "" "[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment " "variable names are case-sensitive on all platforms except Windows." msgstr "" +"返回环境å˜é‡çš„值。如果环境å˜é‡ä¸å˜åœ¨ï¼Œåˆ™è¿”回一个空å—符串。\n" +"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 " +"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚" #: doc/classes/OS.xml:222 msgid "Returns the path to the current engine executable." msgstr "返回当å‰å¼•æ“Žå¯æ‰§è¡Œæ–‡ä»¶çš„路径。" #: doc/classes/OS.xml:228 -#, fuzzy msgid "" "With this function, you can get the list of dangerous permissions that have " "been granted to the Android application.\n" "[b]Note:[/b] This method is implemented on Android." msgstr "" -"通过这个函数,您å¯ä»¥èŽ·å¾—å·²æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•仅在Android上实现。" +"é€šè¿‡è¿™ä¸ªå‡½æ•°ï¼Œä½ å¯ä»¥èŽ·å¾—å·²ç»æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n" +"[b]注æ„:[/b] 这个方法在Android上实现。" #: doc/classes/OS.xml:235 msgid "" @@ -46496,6 +46861,10 @@ msgid "" "notify it of changes to the IME cursor position.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" +"返回相对于组åˆå—符串ä¸çš„å—符的 IME å…‰æ ‡ä½ç½®ï¼ˆå—符串的当å‰ç¼–辑部分)。\n" +"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒ IME " +"å…‰æ ‡ä½ç½®çš„å˜åŒ–。\n" +"[b]注:[/b]æ¤æ–¹æ³•在macOS上实现。" #: doc/classes/OS.xml:243 msgid "" @@ -46504,9 +46873,12 @@ msgid "" "notify it of changes to the IME composition string.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" +"返回 IME ä¸é—´ç»„åˆå—符串。\n" +"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒå¯¹ " +"IME 组åˆå—符串的更改。\n" +"[b]注:[/b]æ¤æ–¹æ³•在macOS上实现。" #: doc/classes/OS.xml:251 -#, fuzzy msgid "" "Returns the current latin keyboard variant as a String.\n" "Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/" @@ -46515,9 +46887,12 @@ msgid "" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns " "[code]\"QWERTY\"[/code] on unsupported platforms." msgstr "" -"返回主机æ“作系统的å称。å¯èƒ½çš„值有: [code]\"Android\"[/code], [code]\"iOS" -"\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], [code]\"Server\"[/" -"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]." +"将当剿‹‰ä¸é”®ç›˜å˜ä½“作为å—符串返回。\n" +"å¯èƒ½çš„返回值是: [code] \"QWERTY\"[/code], [code] \"AZERTY\"[/code], " +"[code]\"QZERTY\"[/code],[code]\"DVORAK\"[/code],[code]\"NEO\"[/code]," +"[code]\"COLEMAK\"[/code]或[code]\"错误ERROR\"[/code]。\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在 Linuxã€macOS å’Œ Windows 上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”" +"回 [code] \"QWERTY\"[/code] 。" #: doc/classes/OS.xml:259 msgid "" @@ -46536,6 +46911,19 @@ msgid "" "[code]extra[/code] - optional, semicolon separated list of additional key " "words. Currency, calendar, sort order and numbering system information." msgstr "" +"将主机æ“作系统区域设置为 [code]language_Script_COUNTRY_VARIANT@extra[/code] " +"å½¢å¼çš„å—ç¬¦ä¸²ã€‚å¦‚æžœæ‚¨åªæƒ³è¦è¯è¨€ä»£ç è€Œä¸æ˜¯æ“作系统ä¸å®Œå…¨æŒ‡å®šçš„è¯è¨€çŽ¯å¢ƒï¼Œæ‚¨å¯ä»¥" +"使用 [method get_locale_language]。\n" +"[code]language[/code] - 2 个或 3 ä¸ªå—æ¯çš„ [url=https://en.wikipedia.org/wiki/" +"List_of_ISO_639-1_codes]è¯è¨€ä»£ç [/url],å°å†™ã€‚\n" +"[code]Script[/code] - å¯é€‰ï¼Œ4 ä¸ªå—æ¯ [url=https://en.wikipedia.org/wiki/" +"ISO_15924] 脚本代ç [/url],形å¼ä¸ºæ ‡é¢˜çš„大å°å†™å½¢å¼ã€‚\n" +"[code]COUNTRY[/code] - å¯é€‰ï¼Œ2 个或 3 ä¸ªå—æ¯ [url=https://en.wikipedia.org/" +"wiki/ISO_3166-1]国家代ç [/url],大写。\n" +"[code]VARIANT[/code] - å¯é€‰ï¼Œè¯è¨€å˜ä½“,地区和排åºé¡ºåºã€‚ Variant å¯ä»¥æœ‰ä»»æ„æ•°" +"é‡çš„带下划线的关键å—。\n" +"[code]extra[/code] - å¯é€‰ï¼Œåˆ†å·åˆ†éš”çš„é™„åŠ å…³é”®å—列表。货å¸ã€æ—¥åŽ†ã€æŽ’åºé¡ºåºå’Œç¼–" +"å·ç³»ç»Ÿä¿¡æ¯ã€‚" #: doc/classes/OS.xml:270 msgid "" @@ -46548,6 +46936,13 @@ msgid "" "about country code or variants. For example, for a French Canadian user with " "[code]fr_CA[/code] locale, this would return [code]fr[/code]." msgstr "" +"将主机æ“作系统区域设置的 2 或 3 ä¸ªå—æ¯ [url=https://en.wikipedia.org/wiki/" +"List_of_ISO_639-1_codes]è¯è¨€ä»£ç [/url] 作为å—符串返回,该å—符串应在所有平å°ä¸Š" +"ä¿æŒä¸€è‡´ã€‚这相当于æå– [method get_locale] å—符串的 [code]language[/code] 部" +"分。\n" +"当您ä¸éœ€è¦æœ‰å…³å›½å®¶/åœ°åŒºä»£ç æˆ–å˜ä½“çš„é™„åŠ ä¿¡æ¯æ—¶ï¼Œè¿™å¯ç”¨äºŽå°†å®Œå…¨æŒ‡å®šçš„区域设置å—" +"符串缩å°ä¸ºâ€œé€šç”¨â€è¯è¨€ä»£ç 。例如,对于使用 [code]fr_CA[/code] è¯è¨€çŽ¯å¢ƒçš„åŠ æ‹¿å¤§" +"法è¯ç”¨æˆ·ï¼Œè¿™å°†è¿”回 [code]fr[/code]。" #: doc/classes/OS.xml:277 msgid "" @@ -46571,44 +46966,42 @@ msgstr "" "code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]." #: doc/classes/OS.xml:291 -#, fuzzy msgid "" "Returns internal structure pointers for use in GDNative plugins.\n" "[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will " "soon be supported)." msgstr "" -"返回键盘布局的数é‡ã€‚\n" -"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。" +"返回内部结构指针,以便在GDNativeæ’ä»¶ä¸ä½¿ç”¨ã€‚\n" +"[b]注æ„:[/b]æ¤æ–¹æ³•在Linuxå’ŒWindows上实现(其他æ“作系统将很快被支æŒï¼‰ã€‚" #: doc/classes/OS.xml:298 -#, fuzzy msgid "" "Returns the amount of battery left in the device as a percentage. Returns " "[code]-1[/code] if power state is unknown.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n" -"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"以百分比形å¼è¿”回设备ä¸å‰©ä½™çš„ç”µæ± ç”µé‡ã€‚如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 [code]-1[/" +"code]。\n" +"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:305 -#, fuzzy msgid "" "Returns an estimate of the time left in seconds before the device runs out " "of battery. Returns [code]-1[/code] if power state is unknown.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n" -"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"è¿”å›žè®¾å¤‡è€—å°½ç”µæ± å‰å‡ 秒钟内剩余时间的估计值。如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 " +"[code]-1 [/code]。\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml:312 -#, fuzzy msgid "" "Returns the current state of the device regarding battery and power. See " "[enum PowerState] constants.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n" -"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"è¿”å›žè®¾å¤‡å…³äºŽç”µæ± å’Œç”µæºçš„当å‰çжæ€ã€‚请å‚阅 [enum PowerState] 常é‡ã€‚\n" +"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:319 msgid "" @@ -46616,40 +47009,38 @@ msgid "" "[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and " "Windows." msgstr "" -"返回项目的进程ID。\n" -"[b]注:[/b]æ¤æ–¹æ³•仅在Android, iOS, Linux, macOSå’ŒWindows上实现。" +"返回项目的进程 ID。\n" +"[b]注æ„:[/b]æ¤æ–¹æ³•在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:326 msgid "Returns the number of threads available on the host machine." -msgstr "返回主机上å¯ç”¨çš„线程数。" +msgstr "返回宿主机上å¯ç”¨çš„线程数。" #: doc/classes/OS.xml:332 -#, fuzzy msgid "Returns the window size including decorations like window borders." -msgstr "返回函数入å£ç‚¹èŠ‚ç‚¹çš„ID。" +msgstr "返回窗å£å¤§å°ï¼ŒåŒ…括窗å£è¾¹æ¡†ç‰è£…饰。" #: doc/classes/OS.xml:339 -#, fuzzy msgid "" "Returns the given scancode as a string (e.g. Return values: [code]\"Escape" "\"[/code], [code]\"Shift+Escape\"[/code]).\n" "See also [member InputEventKey.scancode] and [method InputEventKey." "get_scancode_with_modifiers]." msgstr "" -"以å—符串的形å¼è¿”回给定的键ç (例如:返回值:[code]\"Escape\"[/code], " -"[code]\"Shift+Escape\"[/code])。\n" -"å‚阅[member InputEventKey]。[method InputEventKey." -"get_keycode_with_modifiers]。" +"将给定的扫æç 作为å—符串返回(例如返回值:[code]\"Escape\"[/code]," +"[code]\"Shift+Escape\"[/code])。\n" +"å¦è¯·å‚阅 [member InputEventKey.scancode] å’Œ [method InputEventKey." +"get_scancode_with_modifiers] 。" #: doc/classes/OS.xml:346 -#, fuzzy msgid "Returns the number of displays attached to the host machine." -msgstr "返回主机上å¯ç”¨çš„线程数。" +msgstr "返回连接到宿主机的显示器数é‡ã€‚" #: doc/classes/OS.xml:353 +#, fuzzy msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -46666,6 +47057,20 @@ msgid "" "[b]Note:[/b] This method is implemented on Android, Linux, macOS and " "Windows. Returns [code]72[/code] on unsupported platforms." msgstr "" +"返回指定å±å¹•æ¯è‹±å¯¸å¯†åº¦çš„点数。如果 [code]screen[/code] 为 [/code]-1[/code]" +"(默认值),将使用当å‰å±å¹•。\n" +"[b]注æ„:[/b] 在macOS上,如果使用分数显示缩放模å¼ï¼Œåˆ™è¿”回值ä¸å‡†ç¡®ã€‚\n" +"[b]注:[/b]在Android设备上,实际å±å¹•密度分为å…ç§å¹¿ä¹‰å¯†åº¦ï¼š\n" +"[codeblock]\n" +" ldpi - 120 dpi\n" +" mdpi - 160 dpi\n" +" hdpi - 240 dpi\n" +" xhdpi - 320 dpi\n" +" xxhdpi - 480 dpi\n" +"xxxhdpi - 640 dpi\n" +"[/codeblock]\n" +"[b]注:[/b]æ¤æ–¹æ³•在Androidã€Linuxã€macOSå’ŒWindows上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”" +"回 [code]72[/code]。" #: doc/classes/OS.xml:370 msgid "" @@ -46681,33 +47086,40 @@ msgstr "" "[b]注æ„:[/b]æ¤æ–¹æ³•仅在macOS上实现。" #: doc/classes/OS.xml:379 +#, fuzzy msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" +"按索引返回指定å±å¹•çš„ä½ç½®ã€‚如果 [code]screen[/code] 为 [/code]-1[/code](默认" +"值),将使用当å‰å±å¹•。" #: doc/classes/OS.xml:386 #, fuzzy msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" -"按索引返回指定å±å¹•的缩放。\n" -"[b]注:[/b] 在macOS上,hiDPI(Retina)å±å¹•的返回值为[code]2.0[/code],其他情况" -"为[code]1.0[/code]。\n" -"[b]注:[/b] æ¤æ–¹æ³•在macOS上实现。" +"按索引返回指定å±å¹•的缩放系数。如果[code]screen[/code]是[/code]-1[/code](默认" +"值),将使用当å‰å±å¹•。\n" +"[b]注æ„:[/b]在macOS上,对于高DPI(Retina)å±å¹•,返回值是[code]2.0[/code],对" +"于所有其他情况,返回值是[code]1.0[/code]。\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在macOS上实现。" #: doc/classes/OS.xml:395 +#, fuzzy msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" +"以指定å±å¹•çš„åƒç´ 返回尺寸。如果 [code]screen[/code] 是[/code]-1[/code](默认" +"值),则将使用当å‰å±å¹•。" #: doc/classes/OS.xml:401 msgid "" @@ -46724,7 +47136,6 @@ msgid "Returns the amount of static memory being used by the program in bytes." msgstr "è¿”å›žç¨‹åºæ‰€ä½¿ç”¨çš„陿€å†…å˜é‡ï¼Œä»¥å—节为å•ä½ã€‚" #: doc/classes/OS.xml:421 -#, fuzzy msgid "" "Returns the actual path to commonly used folders across different platforms. " "Available locations are specified in [enum SystemDir].\n" @@ -46734,18 +47145,18 @@ msgid "" "differentiate between app specific and shared directories. Shared " "directories have additional restrictions on Android." msgstr "" -"返回跨ä¸åŒå¹³å°çš„常用文件夹的实际路径。å¯ç”¨ä½ç½®åœ¨[enum SystemDir]䏿Œ‡å®šã€‚\n" -"[b]注:[/b]该方法仅在Androidã€Linuxã€macOSå’ŒWindowså¹³å°ä¸Šå®žçŽ°ã€‚" +"返回ä¸åŒå¹³å°ä¸Šå¸¸ç”¨æ–‡ä»¶å¤¹çš„实际路径。å¯ç”¨çš„ä½ç½®åœ¨[enum SystemDir]䏿Œ‡å®šã€‚\n" +"[b]注æ„:[/b] 这个方法在Androidã€Linuxã€macOSå’ŒWindows上实现。\n" +"[b]注æ„:[/b] 共享å˜å‚¨åœ¨Android上实现,并å…许区分应用程åºç‰¹å®šç›®å½•和共享目录。" +"共享目录在Android上有é¢å¤–çš„é™åˆ¶ã€‚" #: doc/classes/OS.xml:429 -#, fuzzy msgid "Returns the epoch time of the operating system in milliseconds." -msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。" +msgstr "以毫秒为å•ä½è¿”回æ“作系统的纪元时间。" #: doc/classes/OS.xml:435 -#, fuzzy msgid "Returns the epoch time of the operating system in seconds." -msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。" +msgstr "以秒为å•ä½è¿”回æ“作系统的纪元时间。" #: doc/classes/OS.xml:441 msgid "" @@ -46771,6 +47182,8 @@ msgid "" "[b]Note:[/b] Thread IDs are not deterministic and may be reused across " "application restarts." msgstr "" +"返回当å‰çº¿ç¨‹çš„ ID。这å¯ç”¨äºŽæ—¥å¿—,以简化多线程应用程åºçš„调试。\n" +"[b]注:[/b] 线程 ID 䏿˜¯ç¡®å®šçš„,也许会在应用程åºé‡æ–°å¯åŠ¨æ—¶è¢«é‡å¤ä½¿ç”¨ã€‚" #: doc/classes/OS.xml:463 msgid "" @@ -46803,6 +47216,13 @@ msgid "" "[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't " "implemented on those platforms yet." msgstr "" +"返回设备所特有的å—符串。\n" +"[b]注æ„:[/b] å¦‚æžœç”¨æˆ·é‡æ–°å®‰è£…/å‡çº§å…¶æ“作系统或更改其硬件,æ¤å—符串å¯èƒ½ä¼šåœ¨ä¸" +"通知的情况下更改。这æ„味ç€å®ƒé€šå¸¸ä¸åº”ç”¨äºŽåŠ å¯†æŒç»æ•°æ®ï¼Œå› 为在æ„外的 ID 更改å˜" +"å¾—æ— æ³•è®¿é—®ä¹‹å‰ä¿å˜çš„æ•°æ®ã€‚返回的å—符串也å¯èƒ½ä½¿ç”¨å¤–部程åºä¼ªé€ ï¼Œå› æ¤å‡ºäºŽå®‰å…¨ç›®" +"的,ä¸è¦ä¾èµ– [method get_unique_id] 返回的å—符串。\n" +"[b]注æ„:[/b] 返回 HTML5 å’Œ UWP 上的空å—ç¬¦ä¸²ï¼Œå› ä¸ºæ¤æ–¹æ³•尚未在这些平å°ä¸Šå®ž" +"施。" #: doc/classes/OS.xml:496 msgid "" @@ -46814,9 +47234,13 @@ msgid "" "calculation instead, since they are guaranteed to be monotonic (i.e. never " "decrease)." msgstr "" +"以秒为å•ä½è¿”回当å‰çš„ UNIX 纪元时间戳。\n" +"[b]é‡è¦ï¼š[/b] 这是用户å¯ä»¥æ‰‹åŠ¨è®¾ç½®çš„ç³»ç»Ÿæ—¶é’Ÿã€‚ [b]永远ä¸è¦ä½¿ç”¨[/b]è¿™ç§æ–¹æ³•è¿›" +"è¡Œç²¾ç¡®çš„æ—¶é—´è®¡ç®—ï¼Œå› ä¸ºå®ƒçš„ç»“æžœä¹Ÿä¼šå—到æ“作系统的自动调整。 [b] 始终使用 [/b] " +"[method get_ticks_usec] 或 [method get_ticks_msec] è¿›è¡Œç²¾ç¡®æ—¶é—´è®¡ç®—ï¼Œå› ä¸ºå®ƒä»¬" +"ä¿è¯æ˜¯å•è°ƒçš„ï¼ˆå³æ°¸ä¸å‡å°‘)。" #: doc/classes/OS.xml:504 -#, fuzzy msgid "" "Gets an epoch time value from a dictionary of time values.\n" "[code]datetime[/code] must be populated with the following keys: [code]year[/" @@ -46829,15 +47253,16 @@ msgid "" "into this function. Daylight Savings Time ([code]dst[/code]), if present, is " "ignored." msgstr "" -"从一个时间值的å—å…¸ä¸èŽ·å–一个纪元时间值。\n" -"[code]datetime[/code]将被以下键æ¥å¡«å……: [code]year[/code], [code]month[/" -"code], [code]day[/code], [code]hour[/code], [code]minute[/code], " -"[code]second[/code]。\n" -"ä½ å¯ä»¥å°†[method get_datetime_from_unix_time]çš„è¾“å‡ºç›´æŽ¥ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°ã€‚å¦‚æžœå˜" -"在å¤ä»¤æ—¶ï¼ˆ[code]dst[/code]),则会被忽略。" +"从时间值å—å…¸ä¸èŽ·å–纪元时间值。\n" +"[code]datetime[/code] 必须填充以下键:[code]year[/code]ã€[code]month[/code]ã€" +"[code]day[/code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/" +"code]。\n" +"如果å—典为空,则返回 [code]0[/code]。如果æŸäº›é”®è¢«çœç•¥ï¼Œå®ƒä»¬é»˜è®¤ä¸º UNIX 纪元时" +"间戳 0(1970-01-01 在 00:00:00 UTCï¼‰çš„ç‰æ•ˆå€¼ã€‚\n" +"ä½ å¯ä»¥å°† [method get_datetime_from_unix_time] çš„è¾“å‡ºç›´æŽ¥ä¼ é€’ç»™æ¤å‡½æ•°ã€‚å¤ä»¤æ—¶ " +"([code]dst[/code])(如果å˜åœ¨ï¼‰å°†è¢«å¿½ç•¥ã€‚" #: doc/classes/OS.xml:513 -#, fuzzy msgid "" "Returns the absolute directory path where user data is written ([code]user://" "[/code]).\n" @@ -46857,22 +47282,23 @@ msgid "" "i] (non-project-specific) user data directory." msgstr "" "返回用户数æ®è¢«å†™å…¥çš„ç»å¯¹ç›®å½•路径([code]user://[/code])。\n" -"在Linux上,该路径是 [code]~/.local/share/godot/app_userdata/[project_name][/" -"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]~/.local/share/" +"在Linux上,这是[code]~/.local/share/godot/app_userdata/[project_name][/" +"code],如果设置了[code]use_custom_user_dir[/code],则是[code]~/.local/share/" "[custom_name][/code]。\n" -"在macOS上,该路径是 [code]~/Library/Application Support/Godot/app_userdata/" -"[project_name][/code],如果[code]use_custom_user_dir[/code]被设置,则是" -"[code]~/Library/Application Support/[custom_name][/code]。\n" -"在Windows上,该路径是[code]%APPDATA%\\Godot\\app_userdata\\[project_name][/" -"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]%APPDATA%" -"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展为 [code]%USERPROFILE%" +"在macOS上,这是[code]~/Library/Application Support/Godot/app_userdata/" +"[project_name][/code],或者[code]~/Library/Application Support/[custom_name]" +"[/code],如果[code]use_custom_user_dir[/code]被设置。\n" +"在Windowsä¸ï¼Œå¦‚果设置了[code]use_custom_user_dir[/code],则为[code]%APPDATA%" +"\\Godot\\app_userdata\\[project_name][/code],或者[code]%APPDATA%" +"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展到[code]%USERPROFILE%" "\\AppData\\Roaming[/code]。\n" -"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。" +"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。\n" +"ä¸è¦ä¸Ž[method get_data_dir]混淆,åŽè€…返回[i]全局[/i]用户数æ®ç›®å½•(éžé¡¹ç›®ä¸“" +"用)。" #: doc/classes/OS.xml:524 -#, fuzzy msgid "Returns the number of video drivers supported on the current platform." -msgstr "返回å‘å·¦å移的éšè—选项å¡çš„æ•°é‡ã€‚" +msgstr "返回当å‰å¹³å°ä¸Šæ”¯æŒçš„视频驱动器的数é‡ã€‚" #: doc/classes/OS.xml:531 msgid "" @@ -46880,6 +47306,9 @@ msgid "" "index. This index is a value from [enum VideoDriver], and you can use " "[method get_current_video_driver] to get the current backend's index." msgstr "" +"返回与给定 [code]driver[/code] 索引匹é…的视频驱动程åºçš„å称。æ¤ç´¢å¼•是æ¥è‡ª " +"[enum VideoDriver] 的值,您å¯ä»¥ä½¿ç”¨ [method get_current_video_driver] 获å–当" +"å‰åŽç«¯çš„索引。" #: doc/classes/OS.xml:537 msgid "" @@ -46892,7 +47321,7 @@ msgstr "" msgid "" "Returns unobscured area of the window where interactive controls should be " "rendered." -msgstr "" +msgstr "è¿”å›žåº”å‘ˆçŽ°äº¤äº’å¼æŽ§ä»¶çš„çª—å£çš„æœªé®æŒ¡åŒºåŸŸã€‚" #: doc/classes/OS.xml:553 msgid "" @@ -46900,32 +47329,35 @@ msgid "" "item to the macOS dock icon menu.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" +"å°†å¸¦æœ‰æ–‡æœ¬â€œæ ‡ç¾â€çš„æ–°é¡¹ç›®æ·»åŠ åˆ°å…¨å±€èœå•。使用“_dockâ€èœå•å°†é¡¹ç›®æ·»åŠ åˆ° macOS åœ" +"é æ å›¾æ ‡èœå•。\n" +"[b]注:[/b]æ¤æ–¹æ³•在macOS上实现。" #: doc/classes/OS.xml:561 -#, fuzzy msgid "" "Add a separator between items. Separators also occupy an index.\n" "[b]Note:[/b] This method is implemented on macOS." -msgstr "æ·»åŠ é¡¹ä¹‹é—´çš„åˆ†éš”ç¬¦ã€‚åˆ†éš”ç¬¦ä¹Ÿå 用索引。" +msgstr "" +"åœ¨é¡¹ç›®ä¹‹é—´æ·»åŠ ä¸€ä¸ªåˆ†éš”ç¬¦ã€‚åˆ†éš”ç¬¦ä¹Ÿå 用一个索引。\n" +"[b]注æ„:[/b] 这个方法在macOS上实现。" #: doc/classes/OS.xml:569 -#, fuzzy msgid "" "Clear the global menu, in effect removing all items.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" -"返回å¯ç”¨çš„写嗿¿ï¼ˆè¯‘注:或触摸æ¿ã€æ•°ä½æ¿ï¼Œåœ¨æ¤å¤„尚未明确)驱动程åºçš„æ€»æ•°ã€‚\n" -"[b]注æ„:[/b]该方法是在Windows上实现的。" +"清除全局èœå•ï¼Œå®žé™…ä¸Šæ˜¯åˆ é™¤æ‰€æœ‰é¡¹ç›®ã€‚\n" +"[b]注æ„:[/b]这个方法在macOS上实现。" #: doc/classes/OS.xml:578 -#, fuzzy msgid "" "Removes the item at index \"idx\" from the global menu. Note that the " "indexes of items after the removed item are going to be shifted by one.\n" "[b]Note:[/b] This method is implemented on macOS." msgstr "" -"从èœå•ä¸ç§»é™¤ç´¢å¼•[code]idx[/code]项。\n" -"[b]注:[/b]被移除项åŽçš„项的索引将被移ä½1。" +"将索引为 \"idx\" 的项目从全局èœå•ä¸ç§»é™¤ã€‚注æ„ï¼Œåœ¨è¢«åˆ é™¤çš„é¡¹ç›®ä¹‹åŽçš„项目的索引" +"将被移动1ä½ã€‚\n" +"[b]注æ„:[/b] 这个方法在macOS上实现。" #: doc/classes/OS.xml:586 msgid "" @@ -46934,9 +47366,11 @@ msgid "" "[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment " "variable names are case-sensitive on all platforms except Windows." msgstr "" +"如果å称为 [code]variable[/code] 的环境å˜é‡å˜åœ¨ï¼Œåˆ™è¿”回 [code]true[/code]。\n" +"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 " +"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚" #: doc/classes/OS.xml:594 -#, fuzzy msgid "" "Returns [code]true[/code] if the feature for the given feature tag is " "supported in the currently running instance, depending on the platform, " @@ -46946,25 +47380,24 @@ msgid "" "html]Feature Tags[/url] documentation for more details.\n" "[b]Note:[/b] Tag names are case-sensitive." msgstr "" -"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例ä¸è¢«æ”¯æŒï¼Œåˆ™è¿”回[code]true[/code],具" -"体å–决于平å°å’Œæž„建ç‰ã€‚å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ 当剿˜¯å¦åœ¨è¿è¡Œè°ƒè¯•构建,是å¦åœ¨æŸä¸ªå¹³å°æˆ–" -"架构上,ç‰ç‰ã€‚更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/latest/" -"getting_started/workflow/export/feature_tags.html]åŠŸèƒ½æ ‡ç¾[/url]文档。\n" -"[b]注æ„:[/b] æ ‡ç¾å称是区分大å°å†™çš„。" +"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例ä¸å¾—到支æŒï¼Œåˆ™è¿”回[code]true[/code]," +"具体å–决于平å°å’Œæž„建ç‰ã€‚å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ 当剿˜¯å¦åœ¨è¿è¡Œä¸€ä¸ªè°ƒè¯•构建,是å¦åœ¨æŸä¸ª" +"平尿ˆ–架构上,ç‰ç‰ã€‚更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/" +"stable/getting_started/workflow/export/feature_tags.html]åŠŸèƒ½æ ‡ç¾[/url]æ–‡" +"档。\n" +"[b]注æ„:[/b] æ ‡ç¾å称区分大å°å†™ã€‚" #: doc/classes/OS.xml:601 -#, fuzzy msgid "" "Returns [code]true[/code] if the device has a touchscreen or emulates one." -msgstr "如果该设备跟踪方å‘,则返回[code]true[/code]。" +msgstr "å¦‚æžœè®¾å¤‡æœ‰è§¦æ‘¸å±æˆ–模拟有触摸å±ï¼Œåˆ™è¿”回[code]true[/code]。" #: doc/classes/OS.xml:607 -#, fuzzy msgid "" "Returns [code]true[/code] if the platform has a virtual keyboard, " "[code]false[/code] otherwise." msgstr "" -"å¦‚æžœè„šæœ¬åŸŸè¢«åŠ è½½ï¼Œè¿”å›ž [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/code] 。" +"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回[code]false[/code]。" #: doc/classes/OS.xml:613 msgid "Hides the virtual keyboard if it is shown, does nothing otherwise." @@ -46988,18 +47421,18 @@ msgstr "" "[code]OS.has_feature(\"standalone\")[/code]代替。" #: doc/classes/OS.xml:627 -#, fuzzy msgid "" "Returns [code]true[/code] if the [b]OK[/b] button should appear on the left " "and [b]Cancel[/b] on the right." -msgstr "如果该动作有给定的[InputEvent]与之相关,则返回[code]true[/code]。" +msgstr "" +"如果[b]OK[/b]按钮应该显示在左边,[b]Cancel[/b]显示在å³è¾¹ï¼Œåˆ™è¿”回[code]true[/" +"code]。" #: doc/classes/OS.xml:634 -#, fuzzy msgid "" "Returns [code]true[/code] if the input scancode corresponds to a Unicode " "character." -msgstr "如果输入的键ç 对应于一个Unicodeå—符,则返回[code]true[/code]。" +msgstr "如果输入的键ç 与Unicodeå—符对应,则返回[code]true[/code]。" #: doc/classes/OS.xml:640 msgid "" @@ -47018,20 +47451,19 @@ msgstr "" "冿¬¡å¯åŠ¨æ¸¸æˆåŽï¼Œå…¶çŠ¶æ€æ˜¯ç›¸åŒçš„。与HTML5平尿œ‰å…³ï¼Œåœ¨é‚£é‡Œè¿™ç§æŒä¹…性å¯èƒ½ä¸å¯ç”¨ã€‚" #: doc/classes/OS.xml:652 -#, fuzzy msgid "" "Returns [code]true[/code] if the window should always be on top of other " "windows." -msgstr "如果节点在场景dockä¸æŠ˜å (collapsed),则返回[code]true[/code]。" +msgstr "如果该窗å£åº”总是在其他窗å£ä¹‹ä¸Šï¼Œåˆ™è¿”回[code]true[/code]。" #: doc/classes/OS.xml:658 -#, fuzzy msgid "" "Returns [code]true[/code] if the window is currently focused.\n" "[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it " "will always return [code]true[/code]." msgstr "" -"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/" +"如果窗å£å½“å‰èŽ·å¾—ç„¦ç‚¹ï¼Œåˆ™è¿”å›ž[code]true[/code]。\n" +"[b]注æ„:[/b] åªåœ¨æ¡Œé¢å¹³å°ä¸Šå®žçŽ°ã€‚åœ¨å…¶ä»–å¹³å°ä¸Šï¼Œå®ƒå°†æ€»æ˜¯è¿”回[code]true[/" "code]。" #: doc/classes/OS.xml:665 @@ -47091,31 +47523,28 @@ msgstr "" "[b]注æ„:[/b] 这个方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:712 -#, fuzzy msgid "" "Moves the window to the front.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"返回键盘布局的数é‡ã€‚\n" -"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。" +"将窗å£ç§»åˆ°å‰é¢ã€‚\n" +"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:719 -#, fuzzy msgid "" "Returns [code]true[/code] if native video is playing.\n" "[b]Note:[/b] This method is only implemented on iOS." msgstr "" -"如果视频æ£åœ¨æ’放,返回[code]true[/code] 。\n" -"[b]注æ„:[/b] å¦‚æžœåœ¨æ’æ”¾è¿‡ç¨‹ä¸æš‚åœï¼Œè§†é¢‘ä»è¢«è®¤ä¸ºåœ¨æ’放。" +"如果本地视频æ£åœ¨æ’放,返回[code]true[/code]。\n" +"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。" #: doc/classes/OS.xml:726 -#, fuzzy msgid "" "Pauses native video playback.\n" "[b]Note:[/b] This method is only implemented on iOS." msgstr "" -"设置活动键盘布局。\n" -"[b]注:[/b]æ¤æ–¹æ³•å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"æš‚åœæœ¬åœ°è§†é¢‘æ’æ”¾ã€‚\n" +"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。" #: doc/classes/OS.xml:737 msgid "" @@ -47123,24 +47552,24 @@ msgid "" "audio and subtitle tracks.\n" "[b]Note:[/b] This method is only implemented on iOS." msgstr "" +"以给定的音é‡ã€éŸ³é¢‘å’Œå—å¹•è½¨é“æ’放æ¥è‡ªæŒ‡å®šè·¯å¾„的本地视频。\n" +"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。" #: doc/classes/OS.xml:744 -#, fuzzy msgid "" "Stops native video playback.\n" "[b]Note:[/b] This method is implemented on iOS." msgstr "" -"设置活动键盘布局。\n" -"[b]注:[/b]æ¤æ–¹æ³•å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"åœæ¢æœ¬åœ°è§†é¢‘æ’æ”¾ã€‚\n" +"[b]注æ„:[/b] 这个方法在iOS上实现。" #: doc/classes/OS.xml:751 -#, fuzzy msgid "" "Resumes native video playback.\n" "[b]Note:[/b] This method is implemented on iOS." msgstr "" -"设置活动键盘布局。\n" -"[b]注:[/b]æ¤æ–¹æ³•å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"æ¢å¤æœ¬åœ°è§†é¢‘æ’æ”¾ã€‚\n" +"[b]注æ„:[/b] 这个方法在iOS上实现。" #: doc/classes/OS.xml:758 msgid "" @@ -47171,14 +47600,13 @@ msgid "Shows all resources currently used by the game." msgstr "显示游æˆå½“å‰ä½¿ç”¨çš„æ‰€æœ‰èµ„æºã€‚" #: doc/classes/OS.xml:792 -#, fuzzy msgid "" "Request the user attention to the window. It'll flash the taskbar button on " "Windows or bounce the dock icon on OSX.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n" -"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"è¦æ±‚用户注æ„该窗å£ã€‚它会在Windows上闪çƒä»»åŠ¡æ æŒ‰é’®ï¼Œæˆ–在OSX上弹出Dockå›¾æ ‡ã€‚\n" +"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:800 msgid "" @@ -47189,16 +47617,15 @@ msgstr "" "[code]RECORD_AUDIO[/code]çš„æƒé™ã€‚" #: doc/classes/OS.xml:806 -#, fuzzy msgid "" "With this function, you can request dangerous permissions since normal " "permissions are automatically granted at install time in Android " "applications.\n" "[b]Note:[/b] This method is implemented on Android." msgstr "" -"æœ‰äº†è¿™ä¸ªåŠŸèƒ½ï¼Œä½ å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› 为æ£å¸¸çš„æƒé™åœ¨Android应用程åºçš„安装时就" -"会自动授予。\n" -"[b]注æ„:[/b] 这个方法在Android上实现。" +"é€šè¿‡è¿™ä¸ªåŠŸèƒ½ï¼Œä½ å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› 为在Android应用程åºä¸ï¼Œæ£å¸¸çš„æƒé™ä¼šåœ¨å®‰" +"装时自动授予。\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在Android上实现。" #: doc/classes/OS.xml:815 msgid "" @@ -47210,6 +47637,11 @@ msgid "" "[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment " "variable names are case-sensitive on all platforms except Windows." msgstr "" +"将环境å˜é‡[code]variable[/code]的值设置为[code]value[/code]。在è¿è¡Œ[method " +"set_environment]åŽï¼ŒçŽ¯å¢ƒå˜é‡å°†è¢«è®¾ç½®ä¸ºGodot进程和任何用[method execute]执行的" +"进程。环境å˜é‡å°†[i]ä¸[/i]æŒç»å˜åœ¨äºŽGodot进程终æ¢åŽè¿è¡Œçš„进程ä¸ã€‚\n" +"[b]注æ„:[/b] 仔细检查[code]variable[/code]的大å°å†™ã€‚除Windows外,环境å˜é‡å" +"称在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。" #: doc/classes/OS.xml:823 msgid "" @@ -47218,6 +47650,10 @@ msgid "" "dialog. Image is scaled as needed.\n" "[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows." msgstr "" +"使用图åƒ[Image]资æºè®¾ç½®æ¸¸æˆçš„å›¾æ ‡ã€‚\n" +"åŒæ ·çš„图åƒç”¨äºŽçª—壿 ‡é¢˜ã€ä»»åŠ¡æ /dock和窗å£é€‰æ‹©å¯¹è¯æ¡†ã€‚图åƒä¼šæ ¹æ®éœ€è¦è¿›è¡Œç¼©" +"放。\n" +"[b]注æ„:[/b] 这个方法在HTML5ã€Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:832 msgid "" @@ -47229,15 +47665,21 @@ msgid "" "Completed composition string is committed when input is finished.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" +"设置是å¦åº”å¯ç”¨ IME 输入法模å¼ã€‚\n" +"如果激活,IME输入法编辑器在应用程åºä¹‹å‰å¤„ç†å…³é”®äº‹ä»¶å¹¶åˆ›å»ºç»„åˆå—符串和建议列" +"表。\n" +"应用程åºå¯ä»¥é€šè¿‡ä½¿ç”¨ [method get_ime_selection] å’Œ [method get_ime_text] 函数" +"æ¥æ£€ç´¢ç»„åˆçжæ€ã€‚\n" +"è¾“å…¥å®Œæˆæ—¶æäº¤å®Œæˆçš„组åˆå—符串。\n" +"[b]注:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:843 -#, fuzzy msgid "" "Sets position of IME suggestion list popup (in window coordinates).\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"å…³é—系统MIDI驱动程åºã€‚\n" -"[b]注æ„:[/b]该方法åªåœ¨Linux, macOSå’ŒWindows上实现。" +"设置 IME 建议列表弹出窗å£çš„ä½ç½®ï¼ˆåœ¨çª—å£åæ ‡ä¸ï¼‰ã€‚\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml:851 msgid "" @@ -47247,6 +47689,10 @@ msgid "" "window selection dialog.\n" "[b]Note:[/b] This method is implemented on macOS and Windows." msgstr "" +"使用多尺寸平å°ç‰¹å®šå›¾æ ‡æ–‡ä»¶ï¼ˆ[code]*.ico[/code] 在 Windows 上设置游æˆå›¾æ ‡ï¼Œåœ¨ " +"macOS 上设置 [code]*.icns [/code] ) 。\n" +"适当的大å°åå›¾æ ‡ç”¨äºŽçª—å£æ ‡é¢˜ã€ä»»åŠ¡æ /åœé 颿¿å’Œçª—å£é€‰æ‹©å¯¹è¯æ¡†ã€‚\n" +"[b]注æ„:[/b] æ¤æ–¹æ³•在 macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml:860 msgid "Sets the name of the current thread." @@ -47257,13 +47703,12 @@ msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]." msgstr "如果[code]enabled[/code]为[code]true[/code],则å¯ç”¨å¤‡ä»½ä¿å˜ã€‚" #: doc/classes/OS.xml:874 -#, fuzzy msgid "" "Sets whether the window should always be on top.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"设置活动键盘布局。\n" -"[b]注:[/b]æ¤æ–¹æ³•å¯åœ¨Linuxã€macOSå’ŒWindows上实现。" +"è®¾ç½®çª—å£æ˜¯å¦åº”始终ä½äºŽé¡¶éƒ¨ã€‚\n" +"[b]注:[/b] 该方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml:882 msgid "" @@ -47285,6 +47730,21 @@ msgid "" "region is not drawn, while on Linux and macOS it is.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" +"设置窗å£çš„一个接å—é¼ æ ‡äº‹ä»¶çš„å¤šè¾¹å½¢åŒºåŸŸã€‚è¯¥åŒºåŸŸå¤–çš„é¼ æ ‡äº‹ä»¶å°†è¢«ä¼ é€’å‡ºåŽ»ã€‚\n" +"ä¼ é€’ä¸€ä¸ªç©ºæ•°ç»„å°†ç¦ç”¨ç©¿é€æ”¯æŒï¼ˆæ‰€æœ‰é¼ æ ‡äº‹ä»¶å°†è¢«çª—å£æ‹¦æˆªï¼Œè¿™æ˜¯é»˜è®¤è¡Œä¸ºï¼‰ã€‚\n" +"[codeblock]\n" +"# 设置区域,使用Path2D节点。\n" +"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points() )\n" +"\n" +"# 设置区域,使用Polygon2D节点。\n" +"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n" +"\n" +"# é‡ç½®åŒºåŸŸä¸ºé»˜è®¤å€¼ã€‚\n" +"OS.set_window_mouse_passthrough([] )\n" +"[/codeblock]\n" +"[b]注æ„:[/b]在Windows上,ä½äºŽåŒºåŸŸå¤–的窗å£éƒ¨åˆ†ä¸ä¼šè¢«ç»˜åˆ¶ï¼Œè€Œåœ¨Linuxå’ŒmacOS上则" +"会。\n" +"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。" #: doc/classes/OS.xml:902 msgid "" @@ -47293,6 +47753,10 @@ msgid "" "as that will negatively affect performance on some window managers.\n" "[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows." msgstr "" +"å°†çª—å£æ ‡é¢˜è®¾ç½®ä¸ºæŒ‡å®šçš„å—符串。\n" +"[b]注æ„:[/b] 这个应该å¶å°”使用。ä¸è¦æ¯å¸§éƒ½è®¾ç½®è¿™ä¸ªï¼Œå› 为这会对æŸäº›çª—å£ç®¡ç†å™¨" +"的性能产生负é¢å½±å“。\n" +"[b]注:[/b] 该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml:911 msgid "" @@ -47327,7 +47791,6 @@ msgstr "" "现。" #: doc/classes/OS.xml:924 -#, fuzzy msgid "" "Shows the virtual keyboard if the platform has one.\n" "The [code]existing_text[/code] parameter is useful for implementing your own " @@ -47338,27 +47801,21 @@ msgid "" "be able to enter multiple lines of text, as in [TextEdit].\n" "[b]Note:[/b] This method is implemented on Android, iOS and UWP." msgstr "" -"显示虚拟键盘,如果当å‰å¹³å°æœ‰ä¸€ä¸ªã€‚\n" -"[code]existing_text[/code]傿•°å¯ç”¨äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit]ï¼Œå› " -"为它告诉虚拟键盘已输入文本的内容(虚拟键盘将其用于自动更æ£å’Œé¢„测)。\n" -"[code]position[/code]傿•°æ˜¯ç¼–辑文本的å±å¹•ä¸[Rect2]。\n" -"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,在" -"[TextEdit]ä¸ã€‚\n" -"[code]max_length[/code]é™åˆ¶å¦‚æžœä¸ç‰äºŽ [code]-1[/code] ,å¯ä»¥è¾“入的最大å—符" -"数。\n" -"[code]cursor_start[/code]å¯ä»¥é€‰æ‹©æ€§åœ°å®šä¹‰å½“剿–‡æœ¬å…‰æ ‡ä½ç½®ï¼Œå¦‚æžœ" -"[code]cursor_end[/code]未设置。\n" -"[code]cursor_start[/code]å’Œ[code]cursor_end[/code]å¯ä»¥é€‰æ‹©åœ°å®šä¹‰å½“剿–‡æœ¬é€‰" -"择。\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•在安å“系统ã€iOS å’Œ UWP 上实施。" +"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œåˆ™æ˜¾ç¤ºè™šæ‹Ÿé”®ç›˜ã€‚\n" +"[code]existing_text[/code] 傿•°å¯¹äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit] 很有" +"ç”¨ï¼Œå› ä¸ºå®ƒå‘Šè¯‰è™šæ‹Ÿé”®ç›˜å·²ç»è¾“入了哪些文本(虚拟键盘使用它进行自动更æ£å’Œé¢„" +"测)。\n" +"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,如" +"[TextEdit]。\n" +"[b]注:[/b]æ¤æ–¹æ³•在Androidã€iOSå’ŒUWP上实现。" #: doc/classes/OS.xml:933 msgid "The clipboard from the host OS. Might be unavailable on some platforms." -msgstr "" +msgstr "主机æ“作系统的剪贴æ¿åœ¨æŸäº›å¹³å°ä¸Šå¯èƒ½ä¸å¯ç”¨ã€‚" #: doc/classes/OS.xml:936 msgid "The current screen index (starting from 0)." -msgstr "" +msgstr "当å‰å±å¹•索引(从 0 开始)。" #: doc/classes/OS.xml:939 msgid "" @@ -47366,6 +47823,8 @@ msgid "" "each frame, and attempts to compensate for random variation. This will only " "operate on systems where V-Sync is active." msgstr "" +"如果 [code]true[/code],引擎会过滤æ¯å¸§ä¹‹é—´æµ‹é‡çš„æ—¶é—´å¢žé‡ï¼Œå¹¶å°è¯•è¡¥å¿éšæœºå˜" +"化。这åªä¼šåœ¨åž‚ç›´åŒæ¥å¤„于活动状æ€çš„系统上è¿è¡Œã€‚" #: doc/classes/OS.xml:942 msgid "" @@ -47383,11 +47842,11 @@ msgstr "" "数,这个值将被忽略。" #: doc/classes/OS.xml:946 -#, fuzzy msgid "" "If [code]true[/code], the engine tries to keep the screen on while the game " "is running. Useful on mobile." -msgstr "如果 [code]true[/code],引擎将生æˆç”¨äºŽçº¿æ¡†è°ƒè¯•模å¼çš„线框。" +msgstr "" +"如果 [code]true[/code],引擎会å°è¯•在游æˆè¿è¡Œæ—¶ä¿æŒå±å¹•å¼€å¯ã€‚在手机上有用。" #: doc/classes/OS.xml:949 msgid "" @@ -47411,6 +47870,8 @@ msgid "" "decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to " "reset to the system default value." msgstr "" +"窗å£çš„æœ€å¤§å¤§å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置为 [code](0, 0)[/" +"code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚" #: doc/classes/OS.xml:958 msgid "" @@ -47421,23 +47882,24 @@ msgid "" "[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the " "window is resized to a near-zero size." msgstr "" +"窗å£çš„æœ€å°å°ºå¯¸ï¼ˆä»¥åƒç´ 为å•ä½ï¼‰ï¼ˆä¸è®¡ç®—窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置" +"为 [code](0, 0)[/code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚\n" +"[b]注:[/b] 默认情况下,项目窗å£çš„æœ€å°å°ºå¯¸ä¸º [code]Vector2(64, 64)[/code]。这" +"å¯ä»¥é˜²æ¢åœ¨å°†çª—å£å¤§å°è°ƒæ•´ä¸ºæŽ¥è¿‘é›¶æ—¶å¯èƒ½å‡ºçŽ°çš„é—®é¢˜ã€‚" #: doc/classes/OS.xml:962 -#, fuzzy msgid "The current screen orientation." -msgstr "当å‰åœºæ™¯ã€‚" +msgstr "当å‰å±å¹•æ–¹å‘。" #: doc/classes/OS.xml:965 msgid "The current tablet driver in use." msgstr "当剿£åœ¨ä½¿ç”¨çš„书写æ¿ï¼ˆè¯‘æ³¨ï¼šæˆ–æ•°ä½æ¿ã€è§¦æ‘¸æ¿ï¼Œå°šæœªå®šè®ºï¼‰é©±åŠ¨ç¨‹åºã€‚" #: doc/classes/OS.xml:968 -#, fuzzy msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled." -msgstr "如果[code]true[/code],则å¯ç”¨æ³•çº¿æ˜ å°„ã€‚" +msgstr "如果 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ¥ (Vsync)。" #: doc/classes/OS.xml:971 -#, fuzzy msgid "" "If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating " "system's window compositor will be used for vsync when the compositor is " @@ -47447,11 +47909,11 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n" "[b]Note:[/b] This property is only implemented on Windows." msgstr "" -"如果[code]Use Vsync[/code]å·²å¯ç”¨ï¼Œä¸”[code]true[/code]ï¼Œåˆ™åœ¨çª—å£æ¨¡å¼ä¸‹å¯ç”¨æŽ’å—" -"器时,å¯é€šè¿‡æ“ä½œç³»ç»Ÿçš„çª—å£æŽ’å—å™¨å®žçŽ°åž‚ç›´åŒæ¥ã€‚这将防æ¢åœ¨æŸäº›æƒ…况下å¡é¡¿ã€‚" -"(Windows)。\n" -"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使" -"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。" +"如果 [code]true[/code] å’Œ [code]vsync_enabled[/code] 为真,当æ“作系统的窗å£åˆ" +"æˆå™¨è¢«å¯ç”¨å¹¶ä¸”游æˆå¤„äºŽçª—å£æ¨¡å¼æ—¶ï¼Œå°†ä½¿ç”¨è¯¥åˆæˆå™¨è¿›è¡Œvsync。\n" +"[b]注æ„:[/b] æ¤é€‰é¡¹æ˜¯å®žéªŒæ€§çš„,旨在缓解æŸäº›ç”¨æˆ·é‡åˆ°çš„å¡é¡¿ã€‚但是,一些用户在" +"使用时é‡åˆ°äº† Vsync 帧率å‡åŠï¼Œä¾‹å¦‚从 60 FPS 到 30 FPS。\n" +"[b]注æ„:[/b] æ¤å±žæ€§ä»…在 Windows 上实现。" #: doc/classes/OS.xml:976 msgid "" @@ -47459,21 +47921,21 @@ msgid "" "[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] " "disables per-pixel transparency." msgstr "" +"如果 [code]true[/code],则移除窗框。\n" +"[b]注æ„:[/b] å°† [code]window_borderless[/code] 设置为 [code]false[/code] å°†" +"ç¦ç”¨é€åƒç´ 逿˜Žåº¦ã€‚" #: doc/classes/OS.xml:980 -#, fuzzy msgid "If [code]true[/code], the window is fullscreen." -msgstr "如果[code]true[/code],则暂åœè§†é¢‘。" +msgstr "如果[code]true[/code],窗å£ä¸ºå…¨å±ã€‚" #: doc/classes/OS.xml:983 -#, fuzzy msgid "If [code]true[/code], the window is maximized." -msgstr "如果[code]true[/code],则暂åœè§†é¢‘。" +msgstr "如果[code]true[/code],窗å£è¢«æœ€å¤§åŒ–。" #: doc/classes/OS.xml:986 -#, fuzzy msgid "If [code]true[/code], the window is minimized." -msgstr "如果[code]true[/code],则暂åœè§†é¢‘。" +msgstr "如果[code]true[/code],窗å£è¢«æœ€å°åŒ–。" #: doc/classes/OS.xml:989 msgid "" @@ -47488,21 +47950,28 @@ msgid "" "ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at " "startup instead." msgstr "" +"如果[code]true[/code],则窗å£èƒŒæ™¯æ˜¯é€æ˜Žçš„ï¼Œçª—å£æ¡†æž¶è¢«ç§»é™¤ã€‚\n" +"使用 [code]get_tree().get_root().set_transparent_background(true)[/code] ç¦ç”¨" +"主视å£èƒŒæ™¯æ¸²æŸ“。\n" +"[b]注æ„:[/b]如果ç¦ç”¨[member ProjectSettings.display/window/" +"per_pixel_transparency/allowed]è®¾ç½®ï¼Œåˆ™è¯¥å±žæ€§æ— æ•ˆã€‚\n" +"[b]注æ„:[/b] æ¤å±žæ€§åœ¨ HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。对于 " +"Android,它ä¸èƒ½åœ¨è¿è¡Œæ—¶æ›´æ”¹ã€‚使用 [member ProjectSettings.display/window/" +"per_pixel_transparency/enabled] 在å¯åŠ¨æ—¶è¿›è¡Œè®¾ç½®ã€‚" #: doc/classes/OS.xml:995 msgid "" "The window position relative to the screen, the origin is the top left " "corner, +Y axis goes to the bottom and +X axis goes to the right." -msgstr "" +msgstr "窗å£ç›¸å¯¹äºŽå±å¹•çš„ä½ç½®ï¼ŒåŽŸç‚¹ä¸ºå·¦ä¸Šè§’ï¼Œ+Y è½´å‘下,+X è½´å‘å³ã€‚" #: doc/classes/OS.xml:998 -#, fuzzy msgid "If [code]true[/code], the window is resizable by the user." -msgstr "如果[code]true[/code],则暂åœè§†é¢‘。" +msgstr "如果 [code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚" #: doc/classes/OS.xml:1001 msgid "The size of the window (without counting window manager decorations)." -msgstr "" +msgstr "窗å£çš„大å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。" #: doc/classes/OS.xml:1006 msgid "" @@ -47513,13 +47982,12 @@ msgstr "" "2.1,在网络上使用WebGL 1.0。" #: doc/classes/OS.xml:1009 -#, fuzzy msgid "" "The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL " "3.3 on desktop platforms and WebGL 2.0 on the web." msgstr "" -"GLES2的渲染åŽç«¯ã€‚它在移动设备上使用OpenGL ES 2.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨OpenGL " -"2.1,在网络上使用WebGL 1.0。" +"GLES3 渲染åŽç«¯ã€‚它在移动设备上使用 OpenGL ES 3.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨ OpenGL " +"3.3,在网络上使用 WebGL 2.0。" #: doc/classes/OS.xml:1012 msgid "Sunday." @@ -48267,7 +48735,7 @@ msgstr "https://godotengine.org/asset-library/asset/523" #: doc/classes/Panel.xml:20 msgid "The style of this [Panel]." -msgstr "这个[Panel]çš„æ ·å¼ã€‚" +msgstr "这个 [Panel] çš„æ ·å¼ã€‚" #: doc/classes/PanelContainer.xml:4 msgid "Panel container type." @@ -48278,11 +48746,11 @@ msgid "" "Panel container type. This container fits controls inside of the delimited " "area of a stylebox. It's useful for giving controls an outline." msgstr "" -"颿¿å®¹å™¨ç±»åž‹ã€‚æ¤å®¹å™¨é€‚åˆæ ·å¼æ¡†åˆ†éš”区域内的控件。它对于给控件一个æè¾¹å¾ˆæœ‰ç”¨ã€‚" +"颿¿å®¹å™¨ç±»åž‹ã€‚æ¤å®¹å™¨ä¼šå°†æŽ§ä»¶æ”¾å…¥æ ·å¼ç›’所框定的区域内,方便为控件æä¾›è½®å»“。" #: doc/classes/PanelContainer.xml:18 msgid "The style of [PanelContainer]'s background." -msgstr "[PanelContainer]çš„èƒŒæ™¯æ ·å¼ã€‚" +msgstr "[PanelContainer] çš„èƒŒæ™¯æ ·å¼ã€‚" #: doc/classes/PanoramaSky.xml:4 msgid "A type of [Sky] used to draw a background texture." @@ -48300,16 +48768,17 @@ msgid "" "cubemap_to_panorama.html]this tool[/url] to convert a cube map to an " "equirectangular sky map." msgstr "" -"在[Environment]ä¸å¼•用的用于绘制背景的资æºã€‚全景天空的功能类似于其他引擎的天空" -"盒,除了它使用ç‰è¾¹çŸ©å½¢çš„å¤©ç©ºåœ°å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“地图。\n" -"强烈建议使用HDR全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为æ¤ï¼ŒGodot支æŒRadiance HDR " -"([code].hdr[/code])å’ŒOpenEXR ([code].exr[/code])å›¾åƒæ ¼å¼ã€‚\n" +"在 [Environment] ä¸å¼•用的用于绘制背景的资æºã€‚全景天空的功能类似于其他引擎的天" +"空盒,区别在于它使用的是ç‰è·åœ†æŸ±æŠ•å½±çš„å¤©ç©ºè´´å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“贴图。\n" +"强烈建议使用 HDR 全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为æ¤ï¼ŒGodot æ”¯æŒ Radiance " +"HDR([code].hdr[/code])和 OpenEXR([code].exr[/code]ï¼‰å›¾åƒæ ¼å¼ã€‚\n" "您å¯ä»¥ä½¿ç”¨[url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/" -"cubemap_to_panorama.html]这个工具[/url]将立方体地图转æ¢ä¸ºç‰è§’的天空地图。" +"cubemap_to_panorama.html]这个工具[/url]将立方体贴图转æ¢ä¸ºç‰è·åœ†æŸ±æŠ•影的天空贴" +"图。" #: doc/classes/PanoramaSky.xml:17 msgid "[Texture] to be applied to the PanoramaSky." -msgstr "将被应用到全景天空的 [Texture]。" +msgstr "将被应用到 PanoramaSky çš„ [Texture]。" #: doc/classes/ParallaxBackground.xml:4 msgid "A node used to create a parallax scrolling background." @@ -48323,25 +48792,25 @@ msgid "" "2D game. If not used with a [Camera2D], you must manually calculate the " "[member scroll_offset]." msgstr "" -"一个ParallaxBackground使用一个或多个[ParallaxLayer]å节点æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª" -"[ParallaxLayer]å¯ä»¥ä½¿ç”¨æˆå‘˜ParallaxLayer.motion_offset以ä¸åŒçš„速度移动。这在" -"2D游æˆä¸åˆ›é€ äº†ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与[Camera2D]ä¸€èµ·ä½¿ç”¨ï¼Œä½ å¿…é¡»æ‰‹åŠ¨è®¡ç®—" -"[member scroll_offset]。" +"ParallaxBackground 使用一个或多个 [ParallaxLayer] å节点æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª " +"[ParallaxLayer] å¯ä»¥ä½¿ç”¨ [member ParallaxLayer.motion_offset] 以ä¸åŒçš„速度移" +"动。这在 2D 游æˆä¸å¯ä»¥åˆ›é€ ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与 [Camera2D] ä¸€èµ·ä½¿ç”¨ï¼Œä½ å¿…" +"须手动计算 [member scroll_offset]。" #: doc/classes/ParallaxBackground.xml:16 msgid "The base position offset for all [ParallaxLayer] children." -msgstr "所有[ParallaxLayer]åå…ƒç´ çš„åŸºæœ¬ä½ç½®å移。" +msgstr "所有 [ParallaxLayer] åå…ƒç´ çš„åŸºæœ¬ä½ç½®å移。" #: doc/classes/ParallaxBackground.xml:19 msgid "The base motion scale for all [ParallaxLayer] children." -msgstr "所有[ParallaxLayer]åå…ƒç´ çš„åŸºæœ¬ç§»åŠ¨æ¯”ä¾‹ã€‚" +msgstr "所有 [ParallaxLayer] åå…ƒç´ çš„åŸºæœ¬ç§»åŠ¨æ¯”ä¾‹ã€‚" #: doc/classes/ParallaxBackground.xml:22 msgid "" "If [code]true[/code], elements in [ParallaxLayer] child aren't affected by " "the zoom level of the camera." msgstr "" -"如果[code]为true[/code], [ParallaxLayer]åå…ƒç´ å°†ä¸å—相机缩放级别的影å“。" +"为 [code]true[/code] 时,[ParallaxLayer] åå…ƒç´ å°†ä¸å—相机缩放级别的影å“。" #: doc/classes/ParallaxBackground.xml:25 msgid "" @@ -48372,7 +48841,7 @@ msgstr "" #: doc/classes/ParallaxLayer.xml:4 msgid "A parallax scrolling layer to be used with [ParallaxBackground]." -msgstr "使用[ParallaxBackground]的视差滚动层。" +msgstr "使用 [ParallaxBackground] 的视差滚动层。" #: doc/classes/ParallaxLayer.xml:7 msgid "" @@ -48383,11 +48852,10 @@ msgid "" "[b]Note:[/b] Any changes to this node's position and scale made after it " "enters the scene will be ignored." msgstr "" -"一个ParallaxLayer必须是一个[ParallaxBackground]节点的å节点。æ¯ä¸ª" -"ParallaxLayer都å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground." -"scroll_offset] 值。\n" +"ParallaxLayer 必须是 [ParallaxBackground] 节点的å节点。æ¯ä¸ª ParallaxLayer 都" +"å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground.scroll_offset] 值。\n" "该节点的å节点将å—其滚动åç§»é‡çš„å½±å“。\n" -"[b]注æ„:[/b]当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚" +"[b]注æ„:[/b] 当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚" #: doc/classes/ParallaxLayer.xml:17 msgid "" @@ -48452,7 +48920,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/" "controlling_thousands_of_fish.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/" "controlling_thousands_of_fish.html" #: doc/classes/Particles.xml:20 @@ -48542,6 +49010,11 @@ msgid "" "shadows, you may want to enlarge this AABB to ensure the shadow is updated " "when particles are off-screen." msgstr "" +"[AABB] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å系统处于活动状æ€ã€‚\n" +"如果在节点进入/退出å±å¹•æ—¶ç²’åçªç„¶å‡ºçް/消失,则增大框。 [AABB] å¯ä»¥é€šè¿‡ä»£ç 或" +"使用 [b]Particles → Generate AABB[/b] 编辑器工具生æˆã€‚\n" +"[b]注æ„:[/b] 如果使用ä¸çš„ [ParticlesMaterial] é…置为投射阴影,您å¯èƒ½éœ€è¦æ”¾å¤§" +"æ¤ AABB 以确ä¿åœ¨ç²’åç¦»å±æ—¶æ›´æ–°é˜´å½±ã€‚" #: doc/classes/Particles.xml:118 msgid "Maximum number of draw passes supported." @@ -48572,6 +49045,19 @@ msgid "" "[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the " "texture region defined in [AtlasTexture]s." msgstr "" +"用于创建å„ç§ç²’å系统和效果的 2D ç²’å节点。 [Particles2D] 具有一个å‘射器,å¯ä»¥" +"以给定的速率生æˆä¸€å®šæ•°é‡çš„ç²’å。\n" +"使用 [code]process_material[/code] å±žæ€§æ·»åŠ [ParticlesMaterial] 以é…置粒å外" +"观和行为。或者,您å¯ä»¥æ·»åŠ å°†åº”ç”¨äºŽæ‰€æœ‰ç²’åçš„ [ShaderMaterial]。\n" +"[b]注æ„:[/b] [Particles2D] 仅在使用 GLES3 渲染器时有效。如果使用 GLES2 渲染" +"器,请改用 [CPUParticles2D]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹å°† [Particles2D] 转æ¢ä¸º " +"[CPUParticles2D],å•击 2D 编辑器视å£é¡¶éƒ¨çš„ [b]Particles[/b] èœå•,然åŽé€‰æ‹© " +"[b]Convert to CPUParticles2D[/b]。\n" +"[b]注æ„:[/b]在粒å节点上工作åŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å®ƒçš„[member " +"visibility_rect],å•击2D编辑器视å£é¡¶éƒ¨çš„[b]ç²’å[/b]èœå•,然åŽé€‰æ‹©[b]生æˆå¯è§" +"矩形 [/b]。å¦åˆ™ï¼Œæ ¹æ®ç›¸æœºä½ç½®å’Œè§’度,粒åå¯èƒ½ä¼šçªç„¶æ¶ˆå¤±ã€‚\n" +"[b]注:[/b]与[CPUParticles2D]ä¸åŒï¼Œ[Particles2D]ç›®å‰å¿½ç•¥[AtlasTexture]sä¸å®šä¹‰" +"的纹ç†åŒºåŸŸã€‚" #: doc/classes/Particles2D.xml:21 msgid "Returns a rectangle containing the positions of all existing particles." @@ -48589,14 +49075,15 @@ msgid "" "exits the screen. The [Rect2] can be grown via code or with the [b]Particles " "→ Generate Visibility Rect[/b] editor tool." msgstr "" +"[Rect2] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å系统处于活动状æ€ã€‚\n" +"如果当节点进入/退出å±å¹•æ—¶ç²’åçªç„¶å‡ºçް/消失,则增长矩形。 [Rect2] å¯ä»¥é€šè¿‡ä»£ç " +"或使用 [b]Particles → Generate Visibility Rect[/b] 编辑器工具生æˆã€‚" #: doc/classes/ParticlesMaterial.xml:4 -#, fuzzy msgid "Particle properties for [Particles] and [Particles2D] nodes." -msgstr "[GPUParticles3D]å’Œ[GPUParticles2D]节点的粒å属性。" +msgstr "[Particles] å’Œ [Particles2D] 节点的粒å属性。" #: doc/classes/ParticlesMaterial.xml:7 -#, fuzzy msgid "" "ParticlesMaterial defines particle properties and behavior. It is used in " "the [code]process_material[/code] of [Particles] and [Particles2D] emitter " @@ -48611,14 +49098,14 @@ msgid "" "ratio of [code]0.4[/code] would scale the original property between " "[code]0.4-1.0[/code] of its original value." msgstr "" -"ParticlesMaterial定义了粒å的属性和行为。它在[GPUParticles3D]å’Œ" -"[GPUParticles2D]å‘射器节点的[code]process_material[/code]ä¸ä½¿ç”¨ã€‚\n" -"当å‘å°„æ—¶ï¼Œè¿™äº›ææ–™çš„一些属性被应用到æ¯ä¸ªç²’å上,而其他的å¯ä»¥æœ‰ä¸€ä¸ª" -"[CurveTexture]应用到在粒å的生命周期ä¸å˜åŒ–的值。\n" -"å½“éšæœºæ¯”çŽ‡åº”ç”¨äºŽä¸€ä¸ªå±žæ€§æ—¶ï¼Œå®ƒè¢«ç”¨äºŽæŒ‰éšæœºæ•°é‡ç¼©æ”¾è¯¥å±žæ€§ã€‚éšæœºæ¯”率用于在" -"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å…¥ï¼Œç»“æžœä¹˜ä»¥è¯¥å±žæ€§å¾—åˆ°éšæœºå±žæ€§ã€‚例" -"如,[code]0.4[/code]çš„éšæœºæ¯”率将使原始属性在其原始值的[code]0.4-1.0[/code]之" -"间缩放。" +"ParticlesMaterial定义了粒å的属性和行为。它å¯ç”¨äºŽ[Particles]å’Œ[Particles2D]å‘" +"射器节点的[code]process_material[/code]ä¸ã€‚\n" +"这个æè´¨çš„一些属性在å‘射时被应用到æ¯ä¸ªç²’å上,而其他属性å¯ä»¥åº”用" +"[CurveTexture]æ¥åœ¨ç²’åçš„ç”Ÿå‘½å‘¨æœŸä¸æ”¹å˜æ•°å€¼ã€‚\n" +"å½“éšæœºæ€§æ¯”率被应用到一个属性时,用æ¥ä»¥ä¸€ä¸ªéšæœºé‡æ¥æ‰©å±•è¯¥å±žæ€§ã€‚éšæœºçŽ‡ç”¨æ¥åœ¨" +"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å€¼ï¼Œç»“æžœä¹˜ä»¥å±žæ€§ï¼Œå¾—åˆ°éšæœºçš„属性。例" +"如,一个[code]0.4[/code]çš„éšæœºæ¯”率将在[code]0.4-1.0[/code]之间缩放原始属性的" +"原值。" #: doc/classes/ParticlesMaterial.xml:18 msgid "Returns [code]true[/code] if the specified flag is enabled." @@ -48629,9 +49116,8 @@ msgid "Returns the randomness ratio associated with the specified parameter." msgstr "è¿”å›žä¸ŽæŒ‡å®šå‚æ•°å…³è”çš„éšæœºæ¯”率。" #: doc/classes/ParticlesMaterial.xml:39 -#, fuzzy msgid "Returns the [Texture] used by the specified parameter." -msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„[Texture2D]。" +msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„ [Texture]。" #: doc/classes/ParticlesMaterial.xml:47 msgid "" @@ -48648,29 +49134,26 @@ msgid "Sets the randomness ratio for the specified [enum Parameter]." msgstr "为指定的[enum Parameter]è®¾ç½®éšæœºæ¯”率。" #: doc/classes/ParticlesMaterial.xml:71 -#, fuzzy msgid "Sets the [Texture] for the specified [enum Parameter]." -msgstr "为指定的[enum Parameter]设置[Texture2D]。" +msgstr "为指定的 [enum Parameter] 设置 [Texture]。" #: doc/classes/ParticlesMaterial.xml:77 -#, fuzzy msgid "" "Initial rotation applied to each particle, in degrees.\n" "Only applied when [member flag_disable_z] or [member flag_rotate_y] are " "[code]true[/code] or the [SpatialMaterial] being used to draw the particle " "is using [constant SpatialMaterial.BILLBOARD_PARTICLES]." msgstr "" -"åˆå§‹æ—‹è½¬ä½œç”¨äºŽæ¯ä¸ªç²’å,以度数表示。\n" -"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或" -"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’åæ—¶ä½¿ç”¨[constant BaseMaterial3D. " -"billboard_particles]。" +"应用于æ¯ä¸ªç²’åçš„åˆå§‹æ—‹è½¬ï¼Œä»¥åº¦ä¸ºå•ä½ã€‚\n" +"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] " +"或用于绘制粒åçš„ [SpatialMaterial] 使用 [constant SpatialMaterial." +"BILLBOARD_PARTICLES] 时应用。" #: doc/classes/ParticlesMaterial.xml:81 msgid "Each particle's rotation will be animated along this [CurveTexture]." msgstr "æ¯ä¸ªç²’å的旋转将沿ç€è¿™ä¸ª[CurveTexture]动画。" #: doc/classes/ParticlesMaterial.xml:87 -#, fuzzy msgid "" "Initial angular velocity applied to each particle. Sets the speed of " "rotation of the particle.\n" @@ -48678,10 +49161,10 @@ msgid "" "[code]true[/code] or the [SpatialMaterial] being used to draw the particle " "is using [constant SpatialMaterial.BILLBOARD_PARTICLES]." msgstr "" -"æ¯ä¸ªç²’åçš„åˆå§‹è§’速度。设置粒å的旋转速度。\n" -"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或" -"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’åæ—¶ä½¿ç”¨[constant BaseMaterial3D. " -"billboard_particles]。" +"应用于æ¯ä¸ªç²’åçš„åˆå§‹è§’速度。设置粒å的旋转速度。\n" +"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] " +"或用于绘制粒åçš„ [SpatialMaterial] 使用 [constant SpatialMaterial." +"BILLBOARD_PARTICLES] 时应用。" #: doc/classes/ParticlesMaterial.xml:91 msgid "Each particle's angular velocity will vary along this [CurveTexture]." @@ -48696,16 +49179,15 @@ msgid "Each particle's animation speed will vary along this [CurveTexture]." msgstr "æ¯ä¸ªç²’å的动画速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。" #: doc/classes/ParticlesMaterial.xml:115 -#, fuzzy msgid "" "Each particle's initial color. If the [Particles2D]'s [code]texture[/code] " "is defined, it will be multiplied by this color. To have particle display " "color in a [SpatialMaterial] make sure to set [member SpatialMaterial." "vertex_color_use_as_albedo] to [code]true[/code]." msgstr "" -"æ¯ä¸ªç²’åçš„åˆå§‹é¢œè‰²ã€‚如果[GPUParticles2D]çš„[code]texture[/code]被定义,它将乘" -"以这个颜色。è¦è®©ç²’å在[BaseMaterial3D]䏿˜¾ç¤ºé¢œè‰²ï¼Œè¯·ç¡®ä¿è®¾ç½®[member " -"BaseMaterial3D]。vertex_color_use_as_albedo] [code]true[/code]。" +"æ¯ä¸ªç²’åçš„åˆå§‹é¢œè‰²ã€‚如果定义了 [Particles2D] çš„ [code]texture[/code],它将乘" +"以该颜色。è¦åœ¨ [SpatialMaterial] ä¸ä½¿ç”¨ç²’åæ˜¾ç¤ºé¢œè‰²ï¼Œè¯·ç¡®ä¿å°† [member " +"SpatialMaterial.vertex_color_use_as_albedo] 设置为 [code]true[/code]。" #: doc/classes/ParticlesMaterial.xml:124 msgid "Damping will vary along this [CurveTexture]." @@ -48761,37 +49243,25 @@ msgstr "" "的“粒åâ€å·¥å…·ä¸‹çš„â€œä»Žç½‘æ ¼/节点ä¸åˆ›å»ºå‘射点â€è‡ªåŠ¨åˆ›å»ºç½‘æ ¼æˆ–èŠ‚ç‚¹ã€‚" #: doc/classes/ParticlesMaterial.xml:148 -#, fuzzy msgid "" "The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]." -msgstr "" -"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ" -"径。" +msgstr "使用å‘射器时的环轴 [constant EMISSION_SHAPE_RING]。" #: doc/classes/ParticlesMaterial.xml:151 -#, fuzzy msgid "" "The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]." -msgstr "" -"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ" -"径。" +msgstr "使用å‘射器时环的高度 [constant EMISSION_SHAPE_RING]。" #: doc/classes/ParticlesMaterial.xml:154 -#, fuzzy msgid "" "The inner radius of the ring when using the emitter [constant " "EMISSION_SHAPE_RING]." -msgstr "" -"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ" -"径。" +msgstr "使用å‘射器时环的内åŠå¾„ [constant EMISSION_SHAPE_RING]。" #: doc/classes/ParticlesMaterial.xml:157 -#, fuzzy msgid "" "The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]." -msgstr "" -"如果[membermission_shape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ" -"径。" +msgstr "使用å‘射器时的圆环åŠå¾„ [constant EMISSION_SHAPE_RING]。" #: doc/classes/ParticlesMaterial.xml:160 msgid "" @@ -48808,9 +49278,8 @@ msgstr "" "åŠå¾„。" #: doc/classes/ParticlesMaterial.xml:175 -#, fuzzy msgid "Amount of [member spread] along the Y axis." -msgstr "沿Yè½´æ’入的é¢å¤–边缘环的数é‡ã€‚" +msgstr "沿 Y è½´çš„ [member spread] é‡ã€‚" #: doc/classes/ParticlesMaterial.xml:184 msgid "Each particle's hue will vary along this [CurveTexture]." @@ -48993,12 +49462,10 @@ msgstr "" "emission_color_texture]调节。" #: doc/classes/Path.xml:4 -#, fuzzy msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow." -msgstr "包å«ä¸€ä¸ª[Curve3D]路径,供[PathFollow3D]节点éµå¾ªã€‚" +msgstr "包å«è¦éµå¾ªçš„ [PathFollow] 节点的 [Curve3D] 路径。" #: doc/classes/Path.xml:7 -#, fuzzy msgid "" "Can have [PathFollow] child nodes moving along the [Curve3D]. See " "[PathFollow] for more information on the usage.\n" @@ -49006,10 +49473,10 @@ msgid "" "[PathFollow]). As such, the curve should usually start with a zero vector " "[code](0, 0, 0)[/code]." msgstr "" -"å¯ä»¥è®©[PathFollow3D]å节点沿ç€[Curve3D]移动。请å‚阅[PathFollow3D]以获得更多关" -"于使用的信æ¯ã€‚\n" -"注æ„,该路径被认为是相对于移动的节点([PathFollow3D]çš„å节点)çš„ã€‚å› æ¤ï¼Œæ›²çº¿é€š" -"常以零å‘é‡[code](0,0,0)[/code]开始。" +"å¯ä»¥è®© [PathFollow] å节点沿 [Curve3D] 移动。有关用法的更多信æ¯ï¼Œå‚阅 " +"[PathFollow]。\n" +"请注æ„,路径被视为相对于移动节点([PathFollow] çš„åèŠ‚ç‚¹ï¼‰ã€‚å› æ¤ï¼Œæ›²çº¿é€šå¸¸åº”以" +"é›¶å‘é‡ [code](0, 0, 0)[/code] 开始。" #: doc/classes/Path.xml:16 msgid "A [Curve3D] describing the path." @@ -49041,12 +49508,10 @@ msgid "A [Curve2D] describing the path." msgstr "A [Curve2D]æè¿°è·¯å¾„。" #: doc/classes/PathFollow.xml:4 -#, fuzzy msgid "Point sampler for a [Path]." -msgstr "对[Path2D]çš„ç‚¹å–æ ·çš„å–æ ·å™¨ã€‚" +msgstr "[Path] çš„ç‚¹é‡‡æ ·å™¨ã€‚" #: doc/classes/PathFollow.xml:7 -#, fuzzy msgid "" "This node takes its parent [Path], and returns the coordinates of a point " "within it, given a distance from the first vertex.\n" @@ -49055,13 +49520,12 @@ msgid "" "descendant nodes will then move accordingly when setting an offset in this " "node." msgstr "" -"这个节点接å—它的父节点[Path2D],并返回其ä¸ä¸€ä¸ªç‚¹çš„åæ ‡(给定到第一个顶点的è·" -"离)。\n" -"在ä¸ç¼–ç 移动模å¼çš„æƒ…况下,它å¯ä»¥ä½¿å…¶ä»–节点éµå¾ªä¸€æ¡è·¯å¾„ã€‚å› æ¤ï¼ŒèŠ‚ç‚¹å¿…é¡»æ˜¯è¿™ä¸ª" -"节点的å节点。当在该节点ä¸è®¾ç½®åç§»é‡æ—¶ï¼ŒåŽä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚" +"这个节点接å—它的父节点 [Path],并返回其ä¸ä¸€ä¸ªç‚¹çš„åæ ‡ï¼Œç»™å®šä¸Žç¬¬ä¸€ä¸ªé¡¶ç‚¹çš„è·" +"离。\n" +"这对于使其他节点éµå¾ªè·¯å¾„éžå¸¸æœ‰ç”¨ï¼Œè€Œæ— 需对è¿åŠ¨æ¨¡å¼è¿›è¡Œç¼–ç 。为æ¤ï¼ŒèŠ‚ç‚¹å¿…é¡»æ˜¯" +"该节点的å节点。在æ¤èŠ‚ç‚¹ä¸è®¾ç½®åç§»é‡æ—¶ï¼Œå代节点将相应地移动。" #: doc/classes/PathFollow.xml:16 -#, fuzzy msgid "" "If [code]true[/code], the position between two cached points is interpolated " "cubically, and linearly otherwise.\n" @@ -49074,13 +49538,12 @@ msgid "" "points and increase memory consumption, or make a cubic interpolation " "between two points at the cost of (slightly) slower calculations." msgstr "" -"如果[code]true[/code],则两个缓å˜ç‚¹ä¹‹é—´çš„ä½ç½®å°†è¿›è¡Œä¸‰æ¬¡æ’值,å¦åˆ™å°†çº¿æ€§æ’" -"值。\n" -"沿ç€[Path3D]çš„[Curve3D]çš„ç‚¹åœ¨ä½¿ç”¨å‰æ˜¯é¢„先计算的,为了更快的计算。然åŽåœ¨ä¸¤ä¸ªç›¸" -"邻的缓å˜ç‚¹ä¹‹é—´è®¡ç®—请求åç§»é‡çš„点。这å¯èƒ½ä¼šå‡ºçŽ°ä¸€ä¸ªé—®é¢˜ï¼Œå¦‚æžœæ›²çº¿åšæ€¥è½¬å¼¯ï¼Œå› " -"为缓å˜ç‚¹å¯èƒ½ä¸è·Ÿéšæ›²çº¿è¶³å¤Ÿè¿‘ã€‚\n" -"æœ‰ä¸¤ç§æ–¹æ³•å¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜:è¦ä¹ˆå¢žåŠ ç¼“å˜ç‚¹çš„æ•°é‡ï¼Œå¢žåŠ å†…å˜æ¶ˆè€—,è¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹" -"间进行三次æ’值,但代价是(ç¨å¾®)é™ä½Žè®¡ç®—速度。" +"如果[code]true[/code],两个缓å˜çš„点之间的ä½ç½®æ˜¯ç«‹æ–¹æ’值,å¦åˆ™æ˜¯çº¿æ€§æ’值。\n" +"沿ç€[Path]çš„[Curve3D]的点在使用å‰è¢«é¢„è®¡ç®—ï¼Œä»¥åŠ å¿«è®¡ç®—ã€‚è€ŒåŽï¼Œåœ¨ç¡®å®šåç§»é‡ä¸Šçš„" +"点会在两个相邻的缓å˜ç‚¹ä¹‹é—´è¿›è¡Œæ’值计算。如果曲线有急转弯,这å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªé—®" +"é¢˜ï¼Œå› ä¸ºç¼“å˜çš„点å¯èƒ½ä¸ä¼šè¶³å¤Ÿç´§è·Ÿæ›²çº¿ã€‚\n" +"è¿™ä¸ªé—®é¢˜æœ‰ä¸¤ä¸ªç”æ¡ˆï¼šè¦ä¹ˆå¢žåŠ ç¼“å˜ç‚¹çš„æ•°é‡ï¼Œä»£ä»·æ˜¯å¢žåŠ å†…å˜æ¶ˆè€—ï¼›è¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹" +"间进行立方æ’å€¼ï¼Œä»£ä»·æ˜¯è®¡ç®—é€Ÿåº¦ç¨æ…¢ã€‚" #: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21 msgid "The node's offset along the curve." @@ -49124,34 +49587,29 @@ msgid "The node's offset perpendicular to the curve." msgstr "节点垂直于曲线的åç§»é‡ã€‚" #: doc/classes/PathFollow.xml:41 -#, fuzzy msgid "Forbids the PathFollow to rotate." -msgstr "ç¦æ¢PathFollow3D旋转。" +msgstr "ç¦æ¢ PathFollow 旋转。" #: doc/classes/PathFollow.xml:44 -#, fuzzy msgid "Allows the PathFollow to rotate in the Y axis only." -msgstr "åªå…许PathFollow3D在Y轴上旋转。" +msgstr "ä»…å…许 PathFollow 沿 Y 轴旋转。" #: doc/classes/PathFollow.xml:47 -#, fuzzy msgid "Allows the PathFollow to rotate in both the X, and Y axes." -msgstr "å…许PathFollow3D在Xè½´å’ŒY轴上旋转。" +msgstr "å…许 PathFollow 在 X å’Œ Y 轴上旋转。" #: doc/classes/PathFollow.xml:50 -#, fuzzy msgid "Allows the PathFollow to rotate in any axis." -msgstr "å…许PathFollow3D在任何轴上旋转。" +msgstr "å…许 PathFollow 在任æ„轴上旋转。" #: doc/classes/PathFollow.xml:53 -#, fuzzy msgid "" "Uses the up vector information in a [Curve3D] to enforce orientation. This " "rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] " "property to be set to [code]true[/code]." msgstr "" -"使用[Curve3D]ä¸çš„上å‘é‡ä¿¡æ¯æ¥åŠ å¼ºæ–¹å‘。这个旋转模å¼éœ€è¦[Path3D]çš„[member " -"Curve3D。Up_vector_enabled属性设置为[code]true[/code]。" +"使用 [Curve3D] ä¸çš„å‘上å‘é‡ä¿¡æ¯æ¥å¼ºåˆ¶å®šå‘ã€‚æ¤æ—‹è½¬æ¨¡å¼éœ€è¦å°† [Path] çš„ " +"[member Curve3D.up_vector_enabled] 属性设置为 [code]true[/code]。" #: doc/classes/PathFollow2D.xml:4 msgid "Point sampler for a [Path2D]." @@ -49280,7 +49738,6 @@ msgid "Exposes performance-related data." msgstr "公开与性能相关的数æ®ã€‚" #: doc/classes/Performance.xml:7 -#, fuzzy msgid "" "This class provides access to a number of different monitors related to " "performance, such as memory usage, draw calls, and FPS. These are the same " @@ -49292,16 +49749,13 @@ msgid "" "[b]Note:[/b] Many of these monitors are not updated in real-time, so there " "may be a short delay between changes." msgstr "" -"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内å˜ä½¿ç”¨é‡ã€ç»˜å›¾è°ƒç”¨å’ŒFPS。" -"这些与编辑器的[b]Debugger[/b]颿¿ä¸çš„[b]Monitor[/b]æ ‡ç¾æ‰€æ˜¾ç¤ºçš„æ•°å€¼ç›¸åŒã€‚通过" -"使用这个类的[method get_monitor]æ–¹æ³•ï¼Œä½ å¯ä»¥ä»Žä½ 的代ç ä¸è®¿é—®è¿™äº›æ•°æ®ã€‚\n" -"ä½ å¯ä»¥ä½¿ç”¨[method add_custom_monitor]æ–¹æ³•æ·»åŠ è‡ªå®šä¹‰ç›‘è§†å™¨ã€‚è‡ªå®šä¹‰ç›‘è§†å™¨å¯ä»¥åœ¨" -"编辑器的[b]调试器[/b]颿¿çš„[b]监视器[/b]选项å¡ä¸ä¸Žå†…置监视器一起使用。\n" -"[b]注æ„:[/b] å…¶ä¸ä¸€äº›ç›‘视器åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œåœ¨å‘布版本ä¸ä½¿ç”¨æ—¶å°†æ€»æ˜¯è¿”回" -"0。\n" -"[b]注æ„:[/b] 这些监控器ä¸çš„è®¸å¤šéƒ½ä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸæš‚" -"的延迟。\n" -"[b]注æ„:[/b] è‡ªå®šä¹‰ç›‘è§†å™¨ä¸æ”¯æŒè´Ÿå€¼ã€‚负值被钳制为0。" +"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内å˜ä½¿ç”¨é‡ã€ç»˜åˆ¶è°ƒç”¨å’ŒFPS。" +"这些与编辑器的[b]Monitor[/b]æ ‡ç¾ä¸çš„[b]Debugger[/b]颿¿æ‰€æ˜¾ç¤ºçš„æ•°å€¼ç›¸åŒã€‚通过" +"使用这个类的[method get_monitor]方法,å¯ä»¥ä»Žä½ 的代ç ä¸è®¿é—®è¿™äº›æ•°æ®ã€‚\n" +"[b]注æ„:[/b] è¿™äº›ç›‘è§†å™¨ä¸æœ‰å‡ 个åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œå½“在å‘布版构建ä¸ä½¿ç”¨æ—¶ï¼Œå°†" +"总是返回0。\n" +"[b]注æ„:[/b] 这些监控器ä¸çš„è®¸å¤šä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸæš‚的延" +"迟。" #: doc/classes/Performance.xml:18 msgid "" @@ -49336,19 +49790,17 @@ msgid "" msgstr "当å‰ä½¿ç”¨çš„陿€å†…å˜ï¼Œä»¥å—节为å•ä½ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" #: doc/classes/Performance.xml:39 -#, fuzzy msgid "" "Dynamic memory currently used, in bytes. Not available in release builds." -msgstr "当å‰ä½¿ç”¨çš„陿€å†…å˜ï¼Œä»¥å—节为å•ä½ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" +msgstr "当å‰ä½¿ç”¨çš„动æ€å†…å˜ï¼Œä»¥å—节为å•ä½ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" #: doc/classes/Performance.xml:42 msgid "Available static memory. Not available in release builds." msgstr "å¯ç”¨çš„陿€å†…å˜ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" #: doc/classes/Performance.xml:45 -#, fuzzy msgid "Available dynamic memory. Not available in release builds." -msgstr "å¯ç”¨çš„陿€å†…å˜ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" +msgstr "å¯ç”¨çš„动æ€å†…å˜ã€‚在å‘布版本ä¸ä¸å¯ç”¨ã€‚" #: doc/classes/Performance.xml:48 msgid "" @@ -49403,14 +49855,12 @@ msgid "Draw calls per frame. 3D only." msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。" #: doc/classes/Performance.xml:81 -#, fuzzy msgid "Items or joined items drawn per frame." -msgstr "æ¯å¸§ç»˜åˆ¶3D对象的数é‡ã€‚" +msgstr "æ¯å¸§ç»˜åˆ¶çš„项目或连接的项目。" #: doc/classes/Performance.xml:84 -#, fuzzy msgid "Draw calls per frame." -msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。" +msgstr "æ¯å¸§ç»˜åˆ¶è°ƒç”¨ã€‚" #: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696 msgid "" @@ -49426,10 +49876,9 @@ msgid "The amount of vertex memory used." msgstr "ä½¿ç”¨çš„é¡¶ç‚¹å†…å˜æ•°é‡ã€‚" #: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693 -#, fuzzy msgid "" "Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0." -msgstr "未在GLES2呈现åŽç«¯å®žçŽ°ï¼Œæ€»æ˜¯è¿”å›ž0。" +msgstr "在 GLES2 å’Œ GLES3 渲染åŽç«¯ä¸æœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。" #: doc/classes/Performance.xml:99 msgid "Number of active [RigidBody2D] nodes in the game." @@ -49444,9 +49893,8 @@ msgid "Number of islands in the 2D physics engine." msgstr "2D物ç†å¼•擎ä¸çš„岛屿数é‡ã€‚" #: doc/classes/Performance.xml:108 -#, fuzzy msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game." -msgstr "游æˆä¸æ´»è·ƒçš„[RigidBody3D]å’Œ[VehicleBody3D]节点数é‡ã€‚" +msgstr "游æˆä¸æ´»åŠ¨çš„ [RigidBody] å’Œ [VehicleBody] 节点的数é‡ã€‚" #: doc/classes/Performance.xml:111 msgid "Number of collision pairs in the 3D physics engine." @@ -49481,21 +49929,19 @@ msgid "" msgstr "从给定的[Translation]资æºç”Ÿæˆå¹¶è®¾ç½®ä¼˜åŒ–的翻译。" #: doc/classes/Physics2DDirectBodyState.xml:4 -#, fuzzy msgid "Direct access object to a physics body in the [Physics2DServer]." -msgstr "在[PhysicsServer2D]ä¸ç›´æŽ¥è®¿é—®ç‰©ç†ä½“。" +msgstr "直接访问 [Physics2DServer] ä¸ç‰©ç†ç‰©ä½“对象。" #: doc/classes/Physics2DDirectBodyState.xml:7 -#, fuzzy msgid "" "Provides direct access to a physics body in the [Physics2DServer], allowing " "safe changes to physics properties. This object is passed via the direct " "state callback of rigid/character bodies, and is intended for changing the " "direct state of that body. See [method RigidBody2D._integrate_forces]." msgstr "" -"æä¾›å¯¹[PhysicsServer2D]ä¸çš„物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象" -"是通过刚性/å—符体的直接状æ€å›žè°ƒä¼ 递的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅" -"[method RigidBody2D._integrate_forces]。" +"æä¾›å¯¹ [Physics2DServer] ä¸ç‰©ç†ç‰©ä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通" +"过刚体/角色物体的直接状æ€å›žè°ƒä¼ 递,从而直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚è§ [method " +"RigidBody2D._integrate_forces]。" #: doc/classes/Physics2DDirectBodyState.xml:11 #: doc/classes/Physics2DDirectSpaceState.xml:11 @@ -49504,7 +49950,8 @@ msgstr "" #: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10 #: doc/classes/World2D.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/ray-casting.html" #: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30 msgid "Adds a constant directional force without affecting rotation." @@ -49570,14 +50017,13 @@ msgid "Returns the collider's shape index." msgstr "返回碰撞体的形状索引。" #: doc/classes/Physics2DDirectBodyState.xml:97 -#, fuzzy msgid "" "Returns the collided shape's metadata. This metadata is different from " "[method Object.get_meta], and is set with [method Physics2DServer." "shape_set_data]." msgstr "" -"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨" -"[method PhysicsServer2D.shape_set_data]设置的。" +"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸åŒäºŽ[method Object.get_meta],是用[method " +"Physics2DServer.shape_set_data]设置的。" #: doc/classes/Physics2DDirectBodyState.xml:104 #: doc/classes/PhysicsDirectBodyState.xml:99 @@ -49590,9 +50036,9 @@ msgid "" "[b]Note:[/b] By default, this returns 0 unless bodies are configured to " "monitor contacts. See [member RigidBody2D.contact_monitor]." msgstr "" -"返回æ¤å®žä½“与其他实体的è”系数。\n" -"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 " -"[member RigidBody2D.contact_monitor]。" +"返回æ¤ç‰©ä½“与其他物体的接触次数。\n" +"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member " +"RigidBody2D.contact_monitor]。" #: doc/classes/Physics2DDirectBodyState.xml:118 #: doc/classes/PhysicsDirectBodyState.xml:120 @@ -49619,7 +50065,7 @@ msgstr "返回空间的当å‰çжæ€ï¼Œè¿™å¯¹æŸ¥è¯¢å¾ˆæœ‰ç”¨ã€‚" msgid "" "Returns the body's velocity at the given relative position, including both " "translation and rotation." -msgstr "" +msgstr "返回给定相对ä½ç½®çš„物体速度,包括平移和旋转。" #: doc/classes/Physics2DDirectBodyState.xml:151 #: doc/classes/PhysicsDirectBodyState.xml:153 @@ -49678,21 +50124,19 @@ msgstr "ç‰©ä½“åœæ¢è¿åŠ¨çš„é€ŸçŽ‡ï¼Œå¦‚æžœæ²¡æœ‰ä»»ä½•å…¶ä»–åŠ›ä½¿å®ƒè¿åŠ¨ã€‚ #: doc/classes/Physics2DDirectBodyState.xml:184 #: doc/classes/PhysicsDirectBodyState.xml:190 msgid "The body's transformation matrix." -msgstr "èº«ä½“çš„å˜æ¢çŸ©é˜µã€‚" +msgstr "ç‰©ä½“çš„å˜æ¢çŸ©é˜µã€‚" #: doc/classes/Physics2DDirectSpaceState.xml:4 -#, fuzzy msgid "Direct access object to a space in the [Physics2DServer]." -msgstr "直接访问[PhysicsServer2D]ä¸çš„一个空间。" +msgstr "直接访问[Physics2DServer]ä¸çš„空间的对象。" #: doc/classes/Physics2DDirectSpaceState.xml:7 -#, fuzzy msgid "" "Direct access object to a space in the [Physics2DServer]. It's used mainly " "to do queries against objects and areas residing in a given space." msgstr "" -"直接访问[PhysicsServer2D]ä¸çš„一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸çš„对象和区域进行" -"查询。" +"直接访问[Physics2DServer]ä¸çš„空间的对象。它主è¦ç”¨äºŽå¯¹ä½äºŽç»™å®šç©ºé—´ä¸çš„对象和区" +"域进行查询。" #: doc/classes/Physics2DDirectSpaceState.xml:18 msgid "" @@ -49708,9 +50152,15 @@ msgid "" "inside of, will be ignored. Use [method collide_shape] to determine the " "[Shape2D]s that the shape is already colliding with." msgstr "" +"检查 [Shape2D] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状和è¿åŠ¨ï¼Œéƒ½" +"是通过 [Physics2DShapeQueryParameters] 对象æä¾›çš„。\n" +"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞" +"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚" +"如果没有检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n" +"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method " +"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape2D]。" #: doc/classes/Physics2DDirectSpaceState.xml:28 -#, fuzzy msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space. The resulting " @@ -49718,12 +50168,11 @@ msgid "" "with [method intersect_shape], the number of returned results can be limited " "to save processing time." msgstr "" -"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€" -"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]ä¸€æ ·ï¼Œå¯ä»¥é™åˆ¶è¿”回结果" -"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" +"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。结果数组包" +"å«ä¸€ä¸ªå½¢çŠ¶ä¸Žå¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚åƒ[method intersect_shape]ä¸€æ ·ï¼Œå¯ä»¥é™" +"制返回结果的数é‡ä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" #: doc/classes/Physics2DDirectSpaceState.xml:35 -#, fuzzy msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space. If it collides " @@ -49743,20 +50192,20 @@ msgid "" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape." msgstr "" -"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。如果它与一" -"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何东西相交,那么将" +"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。如果它与一" +"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何对象相交,那么将" "返回一个空å—典。\n" -"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是一个包" -"å«ä»¥ä¸‹å—段的å—典。\n" -"[code]collider_id[/code]。碰撞对象的ID。\n" -"[code]linear_velocity[/code]。碰撞对象的速度[Vector2]。如果对象是一个" +"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是包å«ä»¥" +"䏋嗿®µçš„å—典。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]linear_velocity[/code]:碰撞物体的速度[Vector2]。如果对象是一个" "[Area2D],结果是[code](0, 0)[/code]。\n" -"[code]metadata[/code]。相交的形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object." -"get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method PhysicsServer2D.shape_set_data]设置的。\n" -"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n" -"[code]point[/code]。相交点。\n" -"[code]rid[/code]: 相交物体的[RID]。\n" -"[code]shape[/code]: 碰撞形状的形状索引。" +"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" +"ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n" +"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n" +"[code]point[/code]:相交点。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。" #: doc/classes/Physics2DDirectSpaceState.xml:55 #, fuzzy @@ -49771,28 +50220,70 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" +"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰" +"以䏋嗿®µçš„å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" +"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。\n" +"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组ä¸çš„对象或[RID]将被排" +"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值" +"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n" +"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/" +"code]构建模å¼ä¸ä¸æ˜¯å®žä½“å½¢çŠ¶ã€‚å› æ¤ï¼Œå®ƒä»¬å°†ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚" + +#: doc/classes/Physics2DDirectSpaceState.xml:76 +#, fuzzy +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -"检查一个点是å¦åœ¨ä»»ä½•形状内。点所处的形状将以一个数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰" -"以䏋嗿®µçš„å—典。\n" -"[code]collider[/code]。碰撞的对象。\n" -"[code]collider_id[/code]。碰撞对象的ID。\n" -"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" -"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n" -"[code]rid[/code]。相交物体的[RID]。\n" -"[code]shape[/code]。碰撞形状的形状索引。\n" +"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰" +"以䏋嗿®µçš„å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" +"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。\n" "æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组ä¸çš„对象或[RID]将被排" -"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布" -"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]碰撞。" +"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值" +"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n" +"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/" +"code]构建模å¼ä¸ä¸æ˜¯å®žä½“å½¢çŠ¶ã€‚å› æ¤ï¼Œå®ƒä»¬å°†ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:96 #, fuzzy msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " @@ -49811,25 +50302,24 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -"在一个给定的空间ä¸ä¸Žä¸€æ¡å°„çº¿ç›¸äº¤ã€‚è¿”å›žçš„å¯¹è±¡æ˜¯ä¸€ä¸ªå…·æœ‰ä¸‹åˆ—å—æ®µçš„å—典。\n" -"[code]collider[/code]。碰撞的对象。\n" -"[code]collider_id[/code]。碰撞对象的ID。\n" -"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" -"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n" -"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n" -"[code]position[/code]: 交å‰ç‚¹ã€‚\n" -"[code]rid[/code]: 相交对象的[RID]。\n" -"[code]shape[/code]: 碰撞形状的形状索引。\n" -"如果射线没有与任何物体相交,那么将返回一个空的å—典。\n" -"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组ä¸çš„对象或[RID]将被排" -"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布" -"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]å‘生碰撞。" +"在给定的空间ä¸ä¸Žä¸€æ¡å°„çº¿ç›¸äº¤ã€‚è¿”å›žçš„å¯¹è±¡æ˜¯å…·æœ‰ä¸‹åˆ—å—æ®µçš„å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" +"ä¸åŒï¼Œå¯ä»¥ç”¨[method Physics2DServer.shape_set_data]æ¥è®¾ç½®ã€‚\n" +"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n" +"[code]position[/code]:相交点。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]形状[/code]:碰撞形状的形状索引。\n" +"如果射线没有与任何物体相交,那么将返回空的å—典。\n" +"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在" +"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®" +"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。" -#: doc/classes/Physics2DDirectSpaceState.xml:103 -#, fuzzy +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -49846,29 +50336,28 @@ msgid "" "The number of intersections can be limited with the [code]max_results[/code] " "parameter, to reduce the processing time." msgstr "" -"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。\n" -"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以一个" -"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å—段的å—典。\n" -"[code]collider[/code]。碰撞的对象。\n" -"[code]collider_id[/code]。碰撞对象的ID。\n" -"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" -"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n" -"[code]rid[/code]。相交物体的[RID]。\n" -"[code]shape[/code]。碰撞形状的形状索引。\n" +"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。\n" +"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以数组" +"的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å—段的å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]" +"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。\n" "å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚" #: doc/classes/Physics2DServer.xml:4 msgid "Server interface for low-level 2D physics access." -msgstr "用于底层2D物ç†å¦è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚" +msgstr "用于底层2D物ç†è®¿é—®æœåŠ¡çš„æŽ¥å£ã€‚" #: doc/classes/Physics2DServer.xml:7 -#, fuzzy msgid "" "Physics2DServer is the server responsible for all 2D physics. It can create " "many kinds of physics objects, but does not insert them on the node tree." msgstr "" -"PhysicsServer2D是负责所有2D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒä»¬" -"æ’å…¥èŠ‚ç‚¹æ ‘ã€‚" +"Physics2DServer 是负责所有 2D 物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒ" +"们æ’å…¥åˆ°èŠ‚ç‚¹æ ‘ä¸ã€‚" #: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19 msgid "" @@ -49897,6 +50386,8 @@ msgid "" "to a space using [method area_set_space] to use the created [Area2D] in the " "physics world." msgstr "" +"创建一个 [Area2D]。用这个方法创建了一个[Area2D]åŽï¼Œä½¿ç”¨[method " +"area_set_space]将其分é…给一个空间,以便在物ç†ä¸–界ä¸ä½¿ç”¨åˆ›å»ºçš„[Area2D]。" #: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372 #: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362 @@ -50017,15 +50508,15 @@ msgid "" "two are forces, the impulse clears itself after being applied." msgstr "" "åœ¨æ–½åŠ çš„åŠ›å’Œæ‰çŸ©ä¸Šæ·»åŠ ä¸€ä¸ªæœ‰ä½œç”¨ç‚¹çš„åŠ›ã€‚ä¸Ž[method body_apply_impulse]ä¸€æ ·ï¼ŒåŠ›" -"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€åæ ‡ä¸ã€‚力与脉冲的ä¸åŒä¹‹å¤„在于,虽然两者都是力,但" -"è„‰å†²åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚" +"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€åæ ‡ä¸ã€‚力与冲é‡çš„ä¸åŒä¹‹å¤„在于,虽然两者都是力,但" +"冲é‡åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚" #: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259 msgid "" "Adds a shape to the body, along with a transform matrix. Shapes are usually " "referenced by their index, so you should track which shape has a given index." msgstr "" -"æ·»åŠ ä¸€ä¸ªå½¢çŠ¶åˆ°èº«ä½“ï¼Œä»¥åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•ç”¨ï¼Œå› æ¤æ‚¨åº”" +"æ·»åŠ ä¸€ä¸ªå½¢çŠ¶åˆ°ç‰©ä½“ï¼Œä»¥åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•ç”¨ï¼Œå› æ¤æ‚¨åº”" "该跟踪哪个形状具有给定的索引。" #: doc/classes/Physics2DServer.xml:282 @@ -50057,15 +50548,16 @@ msgid "Returns the continuous collision detection mode." msgstr "返回连ç»ç¢°æ’žæ£€æµ‹æ¨¡å¼ã€‚" #: doc/classes/Physics2DServer.xml:351 -#, fuzzy -msgid "Returns the [Physics2DDirectBodyState] of the body." -msgstr "返回bodyçš„[PhysicsDirectBodyState2D]。" +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." +msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 msgid "" "Returns the maximum contacts that can be reported. See [method " "body_set_max_contacts_reported]." -msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§è”系数。å‚阅[method body_set_max_contacts_reported]。" +msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§æŽ¥è§¦æ•°ã€‚å‚阅[method body_set_max_contacts_reported]。" #: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355 msgid "Returns the body mode." @@ -50153,8 +50645,8 @@ msgid "" "Sets the function used to calculate physics for an object, if that object " "allows it (see [method body_set_omit_force_integration])." msgstr "" -"设置用于计算物体物ç†å¦çš„函数,如果该物体å…许的è¯ï¼ˆè§[method " -"body_set_omit_force_integration])。" +"设置用于物体物ç†è¿ç®—的函数,如果该物体å…许的è¯ï¼Œå‚阅[method " +"body_set_omit_force_integration]。" #: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519 msgid "" @@ -50223,19 +50715,19 @@ msgid "" "Note that the method doesn't take effect immediately. The state will change " "on the next physics frame." msgstr "" +"使用 [enum BodyState] 常é‡ä¹‹ä¸€è®¾ç½®ç‰©ä½“状æ€ã€‚\n" +"请注æ„,该方法ä¸ä¼šç«‹å³ç”Ÿæ•ˆã€‚状æ€å°†åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§å‘生å˜åŒ–。" #: doc/classes/Physics2DServer.xml:603 -#, fuzzy msgid "" "Returns [code]true[/code] if a collision would result from moving in the " "given direction from a given point in space. Margin increases the size of " "the shapes involved in the collision detection. [Physics2DTestMotionResult] " "can be passed to return additional information in." msgstr "" -"如果从空间ä¸çš„给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin" -"å¢žåŠ å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„" -"ä¿¡æ¯ã€‚设置体ä¸å½¢çŠ¶çš„å…ƒæ•°æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж" -"æŸ¥è¯¢ä¸æ£€ç´¢åˆ°ã€‚" +"如果从空间ä¸çš„给定点沿给定方å‘移动会导致碰撞,则返回 [code]true[/code]。边è·" +"å¢žåŠ äº†ç¢°æ’žæ£€æµ‹ä¸æ¶‰åŠçš„形状的大å°ã€‚ 通过返回[Physics2DTestMotionResult] å¯ä»¥é™„" +"åŠ ä¿¡æ¯ã€‚" #: doc/classes/Physics2DServer.xml:633 msgid "" @@ -50245,27 +50737,23 @@ msgstr "" "在两个体之间创建一个阻尼弹簧关节。如果没有指定,第二个体将被å‡å®šä¸ºå…³èŠ‚æœ¬èº«ã€‚" #: doc/classes/Physics2DServer.xml:641 -#, fuzzy msgid "Returns the value of a damped spring joint parameter." -msgstr "è¿”å›žå…³èŠ‚å‚æ•°çš„值。" +msgstr "è¿”å›žé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°å€¼ã€‚" #: doc/classes/Physics2DServer.xml:650 -#, fuzzy msgid "" "Sets a damped spring joint parameter. See [enum DampedStringParam] for a " "list of available parameters." -msgstr "" -"è®¾ç½®ä¸€ä¸ªé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedSpringParam]获å–å¯ç”¨å‚数列表。" +msgstr "è®¾ç½®é˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedStringParam]获å–å¯ç”¨å‚数的列表。" #: doc/classes/Physics2DServer.xml:657 -#, fuzzy msgid "" "Destroys any of the objects created by Physics2DServer. If the [RID] passed " "is not one of the objects that can be created by Physics2DServer, an error " "will be sent to the console." msgstr "" -"销æ¯ä»»ä½•ç”±PhysicsServer2Dåˆ›å»ºçš„å¯¹è±¡ã€‚å¦‚æžœä¼ å…¥çš„[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›" -"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚" +"销æ¯ç”± Physics2DServer åˆ›å»ºçš„ä»»ä½•å¯¹è±¡ã€‚å¦‚æžœä¼ é€’çš„ [RID] 䏿˜¯ Physics2DServer " +"å¯ä»¥åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚" #: doc/classes/Physics2DServer.xml:664 msgid "" @@ -50314,6 +50802,8 @@ msgid "" "CPU power, which can decrease performance. The default value is [code]8[/" "code]." msgstr "" +"设置计算碰撞体速度的è¿ä»£æ¬¡æ•°ã€‚è¿ä»£æ¬¡æ•°è¶Šå¤šï¼Œç¢°æ’žå°±è¶Šå‡†ç¡®ã€‚但是,更大é‡çš„è¿ä»£" +"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。" #: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859 msgid "Returns the shape data." @@ -50342,13 +50832,11 @@ msgstr "" "一个主体。" #: doc/classes/Physics2DServer.xml:777 -#, fuzzy msgid "" "Returns the state of a space, a [Physics2DDirectSpaceState]. This object can " "be used to make collision/intersection queries." msgstr "" -"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°" -"æ’ž/交集查询。" +"返回空间的状æ€ï¼Œ[Physics2DDirectSpaceState]。æ¤å¯¹è±¡å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。" #: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912 msgid "Returns the value of a space parameter." @@ -50550,8 +51038,8 @@ msgid "" "far. This way, many overlapping areas can combine their physics to make " "interesting effects." msgstr "" -"这个区域把它的é‡åŠ›/é˜»å°¼åŠ åˆ°è¿„ä»Šä¸ºæ¢å·²ç»è®¡ç®—è¿‡çš„ä»»ä½•ä¸œè¥¿ä¸Šã€‚è¿™æ ·ä¸€æ¥ï¼Œè®¸å¤šé‡å " -"的区域å¯ä»¥ç»“åˆå®ƒä»¬çš„物ç†å¦æ¥åšå‡ºæœ‰è¶£çš„æ•ˆæžœã€‚" +"æ¤åŒºåŸŸæŠŠå®ƒçš„é‡åŠ›/é˜»å°¼åŠ åˆ°ç›®å‰å·²ç»è®¡ç®—è¿‡çš„å¯¹è±¡ä¸Šã€‚è¿™æ ·ä¸€æ¥ï¼Œè®¸å¤šé‡å 的区域å¯ä»¥" +"结åˆå®ƒä»¬çš„物ç†è¿ç®—æ¥äº§ç”Ÿæœ‰è¶£çš„æ•ˆæžœã€‚" #: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206 msgid "" @@ -50593,7 +51081,7 @@ msgid "" "Constant for rigid bodies in character mode. In this mode, a body can not " "rotate, and only its linear velocity is affected by physics." msgstr "" -"角色模å¼ä¸‹çš„åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†å¦å½±" +"角色模å¼ä¸‹åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†è¿ç®—å½±" "å“。" #: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227 @@ -50646,7 +51134,7 @@ msgstr "常数,用于使物体沉ç¡/唤醒,或得到它是å¦åœ¨æ²‰ç¡ã€‚" #: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260 msgid "Constant to set/get whether the body can sleep." -msgstr "常数,用于设置/获å–身体是å¦å¯ä»¥æ²‰ç¡ã€‚" +msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®/获å–物体是å¦å¯ä»¥ä¼‘çœ ã€‚" #: doc/classes/Physics2DServer.xml:952 msgid "Constant to create pin joints." @@ -50731,21 +51219,15 @@ msgid "Parameters to be sent to a 2D shape physics query." msgstr "è¦å‘é€åˆ°2Då½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚" #: doc/classes/Physics2DShapeQueryParameters.xml:7 -#, fuzzy msgid "" "This class contains the shape and other parameters for 2D intersection/" "collision queries." -msgstr "" -"这个类包å«äºŒç»´äº¤é›†/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å‚阅" -"[PhysicsShapeQueryResult2D]。" +msgstr "æ¤ç±»åŒ…å«ç”¨äºŽ 2D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚" #: doc/classes/Physics2DShapeQueryParameters.xml:16 -#, fuzzy msgid "" "Sets the [Shape2D] that will be used for collision/intersection queries." -msgstr "" -"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°" -"æ’ž/交集查询。" +msgstr "设置用于碰撞/相交查询的 [Shape2D]。" #: doc/classes/Physics2DShapeQueryParameters.xml:22 msgid "If [code]true[/code], the query will take [Area2D]s into account." @@ -50764,6 +51246,9 @@ msgid "" "physics_introduction.html#collision-layers-and-masks]Collision layers and " "masks[/url] in the documentation for more information." msgstr "" +"查询将考虑的物ç†å±‚ï¼ˆä½œä¸ºä½æŽ©ç )。有关更多信æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://" +"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction." +"html#collision-layers-and-masks]碰撞层和掩ç [/url]。" #: doc/classes/Physics2DShapeQueryParameters.xml:31 #: doc/classes/PhysicsShapeQueryParameters.xml:31 @@ -50783,7 +51268,7 @@ msgstr "æ£åœ¨æŸ¥è¯¢çš„形状的è¿åŠ¨ã€‚" #: doc/classes/Physics2DShapeQueryParameters.xml:40 #: doc/classes/PhysicsShapeQueryParameters.xml:37 msgid "The queried shape's [RID]. See also [method set_shape]." -msgstr "" +msgstr "查询形状的 [RID]。å¦è§[method set_shape]。" #: doc/classes/Physics2DShapeQueryParameters.xml:43 #: doc/classes/PhysicsShapeQueryParameters.xml:40 @@ -50795,11 +51280,10 @@ msgid "Base class for all objects affected by physics in 3D space." msgstr "在3D空间ä¸å—物ç†å½±å“的所有对象的基类。" #: doc/classes/PhysicsBody.xml:7 -#, fuzzy msgid "" "PhysicsBody is an abstract base class for implementing a physics body. All " "*Body types inherit from it." -msgstr "PhysicsBody3D是一个实现物ç†ä½“的抽象基类。所有*Body类型都继承自它。" +msgstr "PhysicsBody 是用于实现物ç†ä½“的抽象基类。所有 *Body 类型都继承自它。" #: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17 #: doc/classes/SoftBody.xml:17 @@ -50831,31 +51315,25 @@ msgstr "" "PhysicsBody2D是一个用于实现物ç†å®žä½“的抽象基类。所有*Body2D类型都继承自它。" #: doc/classes/PhysicsBody2D.xml:37 -#, fuzzy msgid "" "Both collision_layer and collision_mask. Returns collision_layer when " "accessed. Updates collision_layer and collision_mask when modified." -msgstr "" -"[member collision_layer]å’Œ[member collision_mask]。当访问时返回[member " -"collision_layer]ã€‚ä¿®æ”¹åŽæ›´æ–°[member collision_layer]å’Œ[member " -"collision_mask]。" +msgstr "碰撞层和碰撞掩ç 。访问时返回碰撞层。修改时更新碰撞层和碰撞掩ç 。" #: doc/classes/PhysicsDirectBodyState.xml:4 -#, fuzzy msgid "Direct access object to a physics body in the [PhysicsServer]." -msgstr "在[PhysicsServer2D]ä¸ç›´æŽ¥è®¿é—®ç‰©ç†ä½“。" +msgstr "直接访问[PhysicsServer]ä¸çš„物ç†ä½“的对象。" #: doc/classes/PhysicsDirectBodyState.xml:7 -#, fuzzy msgid "" "Provides direct access to a physics body in the [PhysicsServer], allowing " "safe changes to physics properties. This object is passed via the direct " "state callback of rigid/character bodies, and is intended for changing the " "direct state of that body. See [method RigidBody._integrate_forces]." msgstr "" -"æä¾›å¯¹[PhysicsServer2D]ä¸çš„物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象" -"是通过刚性/å—符体的直接状æ€å›žè°ƒä¼ 递的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅" -"[method RigidBody2D._integrate_forces]。" +"æä¾›å¯¹ [PhysicsServer] ä¸ç‰©ç†å®žä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通过" +"刚体/角色物体的直接状æ€å›žè°ƒä¼ 递,直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚阅 [method " +"RigidBody._integrate_forces]。" #: doc/classes/PhysicsDirectBodyState.xml:18 msgid "" @@ -50885,9 +51363,9 @@ msgid "" "position uses the rotation of the global coordinate system, but is centered " "at the object's origin." msgstr "" -"å¯¹ç‰©ä½“æ–½åŠ ä¸€ä¸ªæœ‰ä½œç”¨ç‚¹çš„å†²é‡ã€‚冲釿˜¯æ—¶é—´æ— 关的! 在æ¯ä¸€å¸§ä¸æ–½åŠ ä¸€ä¸ªè„‰å†²å°†äº§ç”Ÿ" -"ä¸€ä¸ªä¸Žå¸§é€ŸçŽ‡ç›¸å…³çš„åŠ›ã€‚å‡ºäºŽè¿™ä¸ªåŽŸå› ï¼Œå®ƒåº”è¯¥åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿" -"ç”¨å…¨å±€åæ ‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为ä¸å¿ƒã€‚" +"å¯¹ç‰©ä½“æ–½åŠ ä¸€ä¸ªæœ‰ä½œç”¨ç‚¹çš„å†²é‡ã€‚冲釿˜¯æ—¶é—´æ— 关的! 在æ¯ä¸€å¸§ä¸æ–½åР冲é‡å°†äº§ç”Ÿä¸€ä¸ª" +"ä¸Žå¸§é€ŸçŽ‡ç›¸å…³çš„åŠ›ã€‚å‡ºäºŽè¿™ä¸ªåŽŸå› ï¼Œå®ƒåº”è¯¥åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿ç”¨å…¨" +"å±€åæ ‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为ä¸å¿ƒã€‚" #: doc/classes/PhysicsDirectBodyState.xml:57 msgid "" @@ -50903,33 +51381,30 @@ msgid "Returns the collider object." msgstr "返回碰撞对象。" #: doc/classes/PhysicsDirectBodyState.xml:105 -#, fuzzy msgid "" "Returns the number of contacts this body has with other bodies.\n" "[b]Note:[/b] By default, this returns 0 unless bodies are configured to " "monitor contacts. See [member RigidBody.contact_monitor]." msgstr "" -"返回æ¤å®žä½“与其他实体的è”系数。\n" -"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 " -"[member RigidBody2D.contact_monitor]。" +"返回æ¤ç‰©ä½“与其他物体的接触次数。\n" +"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member " +"RigidBody2D.contact_monitor]。" #: doc/classes/PhysicsDirectBodyState.xml:113 msgid "Impulse created by the contact. Only implemented for Bullet physics." msgstr "由接触产生的冲é‡ã€‚仅适用于å弹物ç†ã€‚" #: doc/classes/PhysicsDirectSpaceState.xml:4 -#, fuzzy msgid "Direct access object to a space in the [PhysicsServer]." -msgstr "直接访问[PhysicsServer2D]ä¸çš„一个空间。" +msgstr "直接访问[PhysicsServer]ä¸ç©ºé—´çš„对象。" #: doc/classes/PhysicsDirectSpaceState.xml:7 -#, fuzzy msgid "" "Direct access object to a space in the [PhysicsServer]. It's used mainly to " "do queries against objects and areas residing in a given space." msgstr "" -"直接访问[PhysicsServer2D]ä¸çš„一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸çš„对象和区域进行" -"查询。" +"直接访问[PhysicsServer]ä¸ç©ºé—´çš„对象。它主è¦ç”¨äºŽå¯¹é©»ç•™åœ¨ç‰¹å®šç©ºé—´çš„对象和区域进" +"行查询。" #: doc/classes/PhysicsDirectSpaceState.xml:19 msgid "" @@ -50945,9 +51420,15 @@ msgid "" "inside of, will be ignored. Use [method collide_shape] to determine the " "[Shape]s that the shape is already colliding with." msgstr "" +"检查 [Shape] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状,都是通过 " +"[PhysicsShapeQueryParameters] 对象æä¾›çš„。\n" +"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞" +"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚" +"如果未检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n" +"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method " +"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape]。" #: doc/classes/PhysicsDirectSpaceState.xml:29 -#, fuzzy msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The resulting array " @@ -50955,12 +51436,11 @@ msgid "" "[method intersect_shape], the number of returned results can be limited to " "save processing time." msgstr "" -"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€" -"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]ä¸€æ ·ï¼Œå¯ä»¥é™åˆ¶è¿”回结果" -"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" +"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。结果数组包å«ä¸€" +"个形状与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]ä¸€æ ·ï¼Œå¯ä»¥é™åˆ¶è¿”" +"回结果的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" #: doc/classes/PhysicsDirectSpaceState.xml:36 -#, fuzzy msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. If it collides with " @@ -50976,20 +51456,49 @@ msgid "" "If the shape did not intersect anything, then an empty dictionary is " "returned instead." msgstr "" -"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。如果它与" -"多个形状碰撞,则选择最近的一个。返回的对象是一个包å«ä»¥ä¸‹å—段的å—å…¸:\n" +"检查通过[PhysicsShapeQueryParameters]对象给出的形状与空间的交点。如果它与一个" +"以上的形状å‘生碰撞,则选择最近的。返回的对象是包å«ä»¥ä¸‹å—段的å—å…¸:\n" "[code]collider_id[/code]:碰撞对象的ID。\n" -"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个" -"[Area3D],结果是[code](0,0,0)[/code]。\n" +"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个[Area]," +"结果是[code](0, 0, 0)[/code]。\n" "[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n" -"[code]point[/code]:交点。\n" -"[code]rid[/code]:相交对象的[rid]。\n" -"[code]shape[/code]:碰撞形状的形状指数。\n" -"如果形状没有与任何东西相交,则返回一个空å—典。" +"[code]点[/code]:相交点。\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。\n" +"如果该形状没有与任何物体相交,那么将返回空的å—典。" #: doc/classes/PhysicsDirectSpaceState.xml:55 #, fuzzy msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" +"在给定的空间ä¸ä¸Žä¸€æ¡å°„çº¿ç›¸äº¤ã€‚è¿”å›žçš„å¯¹è±¡æ˜¯å…·æœ‰ä¸‹åˆ—å—æ®µçš„å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n" +"[code]position[/code]:交å‰ç‚¹ã€‚\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]形状[/code]:碰撞形状的形状索引。\n" +"如果射线没有与任何物体相交,那么将返回空的å—典。\n" +"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在" +"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®" +"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -51006,20 +51515,19 @@ msgid "" "determine if the ray should collide with [PhysicsBody]s or [Area]s, " "respectively." msgstr "" -"在一个给定的空间ä¸ä¸Žä¸€æ¡å°„çº¿ç›¸äº¤ã€‚è¿”å›žçš„å¯¹è±¡æ˜¯ä¸€ä¸ªå…·æœ‰ä¸‹åˆ—å—æ®µçš„å—典。\n" -"[code]collider[/code]。碰撞的对象。\n" -"[code]collider_id[/code]。碰撞对象的ID。\n" -"[code]normal[/code]: å¯¹è±¡åœ¨äº¤æ±‡ç‚¹çš„è¡¨é¢æ³•线。\n" -"[code]position[/code](ä½ç½®ï¼‰ã€‚交å‰ç‚¹ã€‚\n" -"[code]rid[/code]: 相交对象的[RID]。\n" -"[code]shape[/code]: 碰撞形状的形状索引。\n" -"如果射线没有与任何物体相交,那么将返回一个空的å—典。\n" -"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组ä¸çš„对象或[RID]将被排" -"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布" -"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody3D]或[Area3D]å‘生碰撞。" +"在给定的空间ä¸ä¸Žä¸€æ¡å°„çº¿ç›¸äº¤ã€‚è¿”å›žçš„å¯¹è±¡æ˜¯å…·æœ‰ä¸‹åˆ—å—æ®µçš„å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" +"[code]collider_id[/code]:碰撞对象的ID。\n" +"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n" +"[code]position[/code]:交å‰ç‚¹ã€‚\n" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]形状[/code]:碰撞形状的形状索引。\n" +"如果射线没有与任何物体相交,那么将返回空的å—典。\n" +"æ¤å¤–,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在" +"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®" +"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。" -#: doc/classes/PhysicsDirectSpaceState.xml:71 -#, fuzzy +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -51032,23 +51540,22 @@ msgid "" "The number of intersections can be limited with the [code]max_results[/code] " "parameter, to reduce the processing time." msgstr "" -"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。相交形状" -"在一个包å«ä»¥ä¸‹å—段的å—典数组ä¸è¿”回:\n" -"[code]collider[/code]:碰撞对象。\n" +"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。相交的形状会以" +"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å—段的å—å…¸:\n" +"[code]collider[/code]:碰撞的对象。\n" "[code]collider_id[/code]:碰撞对象的ID。\n" -"[code]rid[/code]:相交对象的[rid]。\n" -"[code]shape[/code]:碰撞形状的形状指数。\n" -"å¯ä»¥ä½¿ç”¨[code]max_results[/code]傿•°é™åˆ¶äº¤é›†çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚" +"[code]rid[/code]:相交物体的[RID]。\n" +"[code]shape[/code]:碰撞形状的形状索引。\n" +"å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚" #: doc/classes/PhysicsMaterial.xml:4 msgid "A material for physics properties." -msgstr "具有物ç†å¦å±žæ€§çš„æè´¨ã€‚" +msgstr "具有物ç†å±žæ€§çš„æè´¨ã€‚" #: doc/classes/PhysicsMaterial.xml:7 -#, fuzzy msgid "" "Provides a means of modifying the collision properties of a [PhysicsBody]." -msgstr "æä¾›ä¸€ç§æ–¹æ³•æ¥ä¿®æ”¹[PhysicsBody3D]的碰撞属性。" +msgstr "æä¾›äº†ä¸€ç§ä¿®æ”¹[PhysicsBody]的碰撞属性的方法。" #: doc/classes/PhysicsMaterial.xml:15 msgid "" @@ -51087,13 +51594,12 @@ msgid "Server interface for low-level physics access." msgstr "用于低级物ç†è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚" #: doc/classes/PhysicsServer.xml:7 -#, fuzzy msgid "" "PhysicsServer is the server responsible for all 3D physics. It can create " "many kinds of physics objects, but does not insert them on the node tree." msgstr "" -"PhysicsServer3D是负责所有3D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸èƒ½å°†å®ƒä»¬" -"æ’å…¥èŠ‚ç‚¹æ ‘ã€‚" +"PhysicsServer是负责所有3D物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºè®¸å¤šç§ç±»çš„物ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šåœ¨èŠ‚" +"ç‚¹æ ‘ä¸Šæ’入这些对象。" #: doc/classes/PhysicsServer.xml:40 msgid "Creates an [Area]." @@ -51130,7 +51636,7 @@ msgstr "" msgid "" "Gives the body a push at a [code]position[/code] in the direction of the " "[code]impulse[/code]." -msgstr "在[code]position[/code]impulse[code]è„‰å†²æ–¹å‘æŽ¨åŠ¨ç‰©ä½“[/code]。" +msgstr "在[code]position[/code]impulse[code]冲釿–¹å‘推动物体[/code]。" #: doc/classes/PhysicsServer.xml:290 msgid "Gives the body a push to rotate it." @@ -51142,8 +51648,8 @@ msgid "" "BodyMode] constants, for the type of body created. Additionally, the body " "can be created in sleeping state to save processing time." msgstr "" -"创建一个物ç†å®žä½“ã€‚å¯¹äºŽåˆ›å»ºçš„å®žä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸çš„" -"任何值。æ¤å¤–,身体å¯ä»¥åœ¨ç¡çœ 状æ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" +"创建物ç†ä½“ã€‚å¯¹äºŽåˆ›å»ºçš„ç‰©ä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸çš„任何" +"值。æ¤å¤–,物体å¯ä»¥åœ¨ä¼‘çœ çŠ¶æ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚" #: doc/classes/PhysicsServer.xml:327 msgid "" @@ -51155,8 +51661,10 @@ msgstr "" #: doc/classes/PhysicsServer.xml:335 #, fuzzy -msgid "Returns the [PhysicsDirectBodyState] of the body." -msgstr "返回bodyçš„[PhysicsDirectBodyState2D]。" +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." +msgstr "返回指定属性的åˆå§‹å€¼ã€‚如果属性ä¸å˜åœ¨ï¼Œåˆ™è¿”回[code]null[/code]。" #: doc/classes/PhysicsServer.xml:370 msgid "" @@ -51210,16 +51718,13 @@ msgid "Sets a body state (see [enum BodyState] constants)." msgstr "设置主体状æ€ï¼ˆè¯·å‚阅[enum BodyState]常é‡ï¼‰ã€‚" #: doc/classes/PhysicsServer.xml:608 -#, fuzzy msgid "" "Returns [code]true[/code] if a collision would result from moving in the " "given direction from a given point in space. [PhysicsTestMotionResult] can " "be passed to return additional information in." msgstr "" -"如果从空间ä¸çš„给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin" -"å¢žåŠ å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„" -"ä¿¡æ¯ã€‚设置体ä¸å½¢çŠ¶çš„å…ƒæ•°æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж" -"æŸ¥è¯¢ä¸æ£€ç´¢åˆ°ã€‚" +"如果从空间的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。å¯ä»¥é€šè¿‡" +"[PhysicsTestMotionResult]æ¥è¿”回é¢å¤–的信æ¯ã€‚" #: doc/classes/PhysicsServer.xml:616 msgid "" @@ -51232,14 +51737,13 @@ msgid "" msgstr "è®¾ç½®åœ†é”¥ä½“æ‰æ›²å…³èЂ傿•°ï¼ˆè¯·å‚阅[enum ConeTwistJointParam]常é‡ï¼‰ã€‚" #: doc/classes/PhysicsServer.xml:632 -#, fuzzy msgid "" "Destroys any of the objects created by PhysicsServer. If the [RID] passed is " "not one of the objects that can be created by PhysicsServer, an error will " "be sent to the console." msgstr "" -"销æ¯ä»»ä½•ç”±PhysicsServer2Dåˆ›å»ºçš„å¯¹è±¡ã€‚å¦‚æžœä¼ å…¥çš„[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›" -"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚" +"销æ¯ç”± PhysicsServer åˆ›å»ºçš„ä»»ä½•å¯¹è±¡ã€‚å¦‚æžœä¼ é€’çš„ [RID] 䏿˜¯ PhysicsServer å¯ä»¥" +"åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚" #: doc/classes/PhysicsServer.xml:641 msgid "" @@ -51305,19 +51809,16 @@ msgid "Creates a [SliderJoint]." msgstr "创建一个 [SliderJoint]关节。" #: doc/classes/PhysicsServer.xml:768 -#, fuzzy msgid "Gets the priority value of the Joint." -msgstr "获å–Joint3D的优先级值。" +msgstr "获å–关节的优先级值。" #: doc/classes/PhysicsServer.xml:775 -#, fuzzy msgid "Returns the type of the Joint." -msgstr "返回Joint3D的类型。" +msgstr "返回关节的类型。" #: doc/classes/PhysicsServer.xml:783 -#, fuzzy msgid "Sets the priority value of the Joint." -msgstr "设置Joint3D的优先级值。" +msgstr "设置关节的优先级值。" #: doc/classes/PhysicsServer.xml:790 msgid "" @@ -51359,6 +51860,10 @@ msgid "" "[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the " "default Bullet physics engine." msgstr "" +"设置计算碰撞体速度的è¿ä»£æ¬¡æ•°ã€‚è¿ä»£æ¬¡æ•°è¶Šå¤šï¼Œç¢°æ’žå°±è¶Šå‡†ç¡®ã€‚但是,更大é‡çš„è¿ä»£" +"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。\n" +"[b]注æ„:[/b] 仅在使用 GodotPhysics å¼•æ“Žæ—¶æœ‰æ•ˆï¼Œè€Œä¸æ˜¯é»˜è®¤çš„ Bullet 物ç†å¼•" +"擎。" #: doc/classes/PhysicsServer.xml:852 msgid "" @@ -51378,13 +51883,11 @@ msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)." msgstr "获å–slider_joint傿•°ï¼ˆè¯·å‚阅[enum SliderJointParam]常é‡ï¼‰ã€‚" #: doc/classes/PhysicsServer.xml:904 -#, fuzzy msgid "" "Returns the state of a space, a [PhysicsDirectSpaceState]. This object can " "be used to make collision/intersection queries." msgstr "" -"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°" -"æ’ž/交集查询。" +"返回空间的状æ€ï¼Œ[PhysicsDirectSpaceState]。æ¤å¯¹è±¡å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。" #: doc/classes/PhysicsServer.xml:936 msgid "" @@ -51393,29 +51896,24 @@ msgid "" msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å¯ç”¨å‚数列表ä½äºŽ[enum SpaceParameter]常é‡ä¸Šã€‚" #: doc/classes/PhysicsServer.xml:942 -#, fuzzy msgid "The [Joint] is a [PinJoint]." -msgstr "[Joint3D]是一个[PinJoint3D]。" +msgstr "该[Joint] 是 [PinJoint]。" #: doc/classes/PhysicsServer.xml:945 -#, fuzzy msgid "The [Joint] is a [HingeJoint]." -msgstr "[Joint3D]是一个[HingeJoint3D]。" +msgstr "该 [Joint] 是 [HingeJoint]。" #: doc/classes/PhysicsServer.xml:948 -#, fuzzy msgid "The [Joint] is a [SliderJoint]." -msgstr "[Joint3D]是一个[SliderJoint3D]。" +msgstr "该 [Joint] 是 [SliderJoint]。" #: doc/classes/PhysicsServer.xml:951 -#, fuzzy msgid "The [Joint] is a [ConeTwistJoint]." -msgstr "[Joint3D]是一个[conetwitstjoint 3d]。" +msgstr "该 [Joint] 是 [ConeTwistJoint]。" #: doc/classes/PhysicsServer.xml:954 -#, fuzzy msgid "The [Joint] is a [Generic6DOFJoint]." -msgstr "[Joint3D]是一个[Generic6DOFJoint3D]。" +msgstr "该 [Joint] 是 [Generic6DOFJoint]。" #: doc/classes/PhysicsServer.xml:957 msgid "" @@ -51436,11 +51934,10 @@ msgstr "" "越高越强。" #: doc/classes/PhysicsServer.xml:965 -#, fuzzy msgid "" "If above 0, this value is the maximum value for an impulse that this Joint " "puts on its ends." -msgstr "如果大于0,则该值是该Joint3Dåœ¨å…¶æœ«ç«¯æ–½åŠ çš„å†²é‡çš„æœ€å¤§å€¼ã€‚" +msgstr "如果大于0ï¼Œè¿™ä¸ªå€¼å°±æ˜¯è¿™ä¸ªå…³èŠ‚å¯¹å…¶ä¸¤ç«¯æ–½åŠ çš„å†²é‡çš„æœ€å¤§å€¼ã€‚" #: doc/classes/PhysicsServer.xml:971 msgid "The maximum rotation across the Hinge." @@ -51584,11 +52081,10 @@ msgid "Represents the size of the [enum SliderJointParam] enum." msgstr "表示[enum SliderJointParam]枚举的大å°ã€‚" #: doc/classes/PhysicsServer.xml:1080 -#, fuzzy msgid "" "The ease with which the Joint twists, if it's too low, it takes more force " "to twist the joint." -msgstr "å…³èŠ‚ä¸‰ç»´æ‰æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå¤ªä½Žï¼Œæ‰æ›²å…³èŠ‚éœ€è¦æ›´å¤šçš„力。" +msgstr "å…³èŠ‚æ‰æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå®ƒå¤ªä½Žï¼Œåˆ™éœ€è¦æ›´å¤šçš„åŠ›é‡æ¥æ‰æ›²å…³èŠ‚ã€‚" #: doc/classes/PhysicsServer.xml:1092 msgid "" @@ -51644,89 +52140,74 @@ msgid "" msgstr "如果[code]set[/code],则æ¤è½´ä¸Šæœ‰ä¸€ä¸ªä»¥ç‰¹å®šé€Ÿåº¦ä¸ºç›®æ ‡çš„线性电机。" #: doc/classes/PhysicsServer.xml:1146 -#, fuzzy msgid "The [Shape] is a [PlaneShape]." -msgstr "[Shape3D]是一个[RayShape3D]。" +msgstr "该[Shape] 是 [PlaneShape]。" #: doc/classes/PhysicsServer.xml:1149 -#, fuzzy msgid "The [Shape] is a [RayShape]." -msgstr "[Shape3D]是一个[RayShape3D]。" +msgstr "该 [Shape] 是 [RayShape]。" #: doc/classes/PhysicsServer.xml:1152 -#, fuzzy msgid "The [Shape] is a [SphereShape]." -msgstr "[Shape3D]是一个[SphereShape3D]。" +msgstr "该 [Shape] 是一个 [SphereShape]。" #: doc/classes/PhysicsServer.xml:1155 -#, fuzzy msgid "The [Shape] is a [BoxShape]." -msgstr "[Shape3D]是一个[BoxShape3D]。" +msgstr "该 [Shape] 是一个 [BoxShape]。" #: doc/classes/PhysicsServer.xml:1158 -#, fuzzy msgid "The [Shape] is a [CapsuleShape]." -msgstr "[Shape3D]是一个[CapsuleShape3D]。" +msgstr "该 [Shape] 是 [CapsuleShape]。" #: doc/classes/PhysicsServer.xml:1161 -#, fuzzy msgid "The [Shape] is a [CylinderShape]." -msgstr "[Shape3D]是[CylinderShape3D]。" +msgstr "该 [Shape] 是 [CylinderShape]。" #: doc/classes/PhysicsServer.xml:1164 -#, fuzzy msgid "The [Shape] is a [ConvexPolygonShape]." -msgstr "[Shape3D]是[ConvexPolygonShape3D]。" +msgstr "该 [Shape] 是 [ConvexPolygonShape]。" #: doc/classes/PhysicsServer.xml:1167 -#, fuzzy msgid "The [Shape] is a [ConcavePolygonShape]." -msgstr "[Shape3D]是[ConcavePolygonShape3D]。" +msgstr "该 [Shape] 是 [ConcavePolygonShape]。" #: doc/classes/PhysicsServer.xml:1170 -#, fuzzy msgid "The [Shape] is a [HeightMapShape]." -msgstr "[Shape3D]是一个[highmapshape3d]。" +msgstr "该 [Shape] 是 [HeightMapShape]。" #: doc/classes/PhysicsShapeQueryParameters.xml:4 msgid "Parameters to be sent to a 3D shape physics query." msgstr "è¦å‘é€åˆ°ä¸‰ç»´å½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚" #: doc/classes/PhysicsShapeQueryParameters.xml:7 -#, fuzzy msgid "" "This class contains the shape and other parameters for 3D intersection/" "collision queries." -msgstr "" -"æ¤ç±»åŒ…å«ä¸‰ç»´ç›¸äº¤/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å¦è¯·å‚阅" -"[PhysicsShapeQueryResult3d]。" +msgstr "æ¤ç±»åŒ…å«ç”¨äºŽ 3D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚" #: doc/classes/PhysicsShapeQueryParameters.xml:16 -#, fuzzy msgid "Sets the [Shape] that will be used for collision/intersection queries." -msgstr "将用于填充纹ç†çš„[Gradient]。" +msgstr "设置将用于碰撞/相交查询的 [Shape]。" #: doc/classes/PhysicsShapeQueryParameters.xml:22 -#, fuzzy msgid "If [code]true[/code], the query will take [Area]s into account." -msgstr "如果[code]true[/code],查询将考虑[Area2D]。" +msgstr "如果[code]true[/code],查询将考虑[Area]。" #: doc/classes/PhysicsShapeQueryParameters.xml:25 -#, fuzzy msgid "If [code]true[/code], the query will take [PhysicsBody]s into account." -msgstr "如果[code]true[/code],查询将考虑[PhysicsBody2D]。" +msgstr "如果 [code]true[/code],则查询将考虑 [PhysicsBody]。" #: doc/classes/PinJoint.xml:4 -#, fuzzy msgid "Pin joint for 3D PhysicsBodies." -msgstr "三维形状的图钉关节。" +msgstr "用于 3D 物ç†ä½“的钉关节。" #: doc/classes/PinJoint.xml:7 -#, fuzzy msgid "" "Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. " "See also [Generic6DOFJoint]." -msgstr "三维刚体的图钉关节。将两个刚体(æˆ–é™æ€)钉在一起。" +msgstr "" +"3Dåˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“ï¼ˆåˆšä½“æˆ–é™æ€ä½“)钉在一起。å‚阅" +"[Generic6DOFJoint]。" #: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41 msgid "" @@ -51741,22 +52222,19 @@ msgid "" msgstr "è¢«é’‰åœ¨ä¸€èµ·çš„ç‰©ä½“ä¹‹é—´ä¿æŒå…±é€Ÿçš„力。越高,力越大。" #: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47 -#, fuzzy msgid "" "If above 0, this value is the maximum value for an impulse that this Joint " "produces." -msgstr "如果大于0,这个值就是这个 Joint3D 产生的冲é‡çš„æœ€å¤§å€¼ã€‚" +msgstr "如果大于0,这个值就是æ¤å…³èŠ‚äº§ç”Ÿçš„å†²é‡çš„æœ€å¤§å€¼ã€‚" #: doc/classes/PinJoint2D.xml:4 -#, fuzzy msgid "Pin Joint for 2D shapes." -msgstr "2D形状的图钉关节。" +msgstr "用于 2D 形状的钉关节。" #: doc/classes/PinJoint2D.xml:7 -#, fuzzy msgid "" "Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together." -msgstr "用于二维刚体的图钉关节。它将两个物体(åˆšæ€§çš„æˆ–é™æ€çš„)钉在一起。" +msgstr "用于 2D åˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“é’‰åœ¨ä¸€èµ·ï¼Œåˆšä½“æˆ–é™æ€ä½“。" #: doc/classes/PinJoint2D.xml:15 msgid "" @@ -51812,6 +52290,8 @@ msgid "" "Returns the center of the plane.\n" "This method is deprecated, please use [method center] instead." msgstr "" +"返回平é¢çš„ä¸å¿ƒã€‚\n" +"æ¤æ–¹æ³•已被废弃,请使用[method center]代替。" #: doc/classes/Plane.xml:65 msgid "" @@ -51924,7 +52404,6 @@ msgid "Class representing a planar [PrimitiveMesh]." msgstr "表示平é¢çš„类。" #: doc/classes/PlaneMesh.xml:7 -#, fuzzy msgid "" "Class representing a planar [PrimitiveMesh]. This flat mesh does not have a " "thickness. By default, this mesh is aligned on the X and Z axes; this " @@ -51935,12 +52414,16 @@ msgid "" "this, increase [member subdivide_depth] and [member subdivide_width] until " "you no longer notice UV jittering." msgstr "" -"表示平é¢çš„类。这个平é¢ç½‘æ ¼æ²¡æœ‰åŽšåº¦ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œè¿™ä¸ªç½‘æ ¼åœ¨Xè½´å’ŒZ轴上对é½;è¿™ç§" -"默认的旋转ä¸é€‚åˆç”¨äºŽå‘Šç¤ºç‰Œæè´¨ã€‚对于告示牌æè´¨ï¼Œä½¿ç”¨[QuadMesh]代替。" +"è¡¨ç¤ºå¹³é¢ [PrimitiveMesh] 的类。这个平é¢ç½‘æ ¼æ²¡æœ‰åŽšåº¦ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œæ¤ç½‘æ ¼åœ¨ X " +"è½´å’Œ Z 轴上对é½ï¼›æ¤é»˜è®¤æ—‹è½¬ä¸é€‚åˆä¸Žå¹¿å‘Šç‰Œæè´¨ä¸€èµ·ä½¿ç”¨ã€‚对于广告牌æè´¨ï¼Œè¯·æ”¹" +"用 [QuadMesh]。\n" +"[b]注æ„:[/b] å½“ä½¿ç”¨å¤§çº¹ç† [PlaneMesh](例如作为地æ¿ï¼‰æ—¶ï¼Œä½ å¯èƒ½ä¼šå¶ç„¶å‘现 " +"UV 抖动问题,具体å–决于相机角度。è¦è§£å†³æ¤é—®é¢˜ï¼Œè¯·å¢žåŠ [member " +"subdivide_depth] å’Œ [member subdivide_width]ï¼Œç›´åˆ°ä½ ä¸å†æ³¨æ„到 UV 抖动。" #: doc/classes/PlaneMesh.xml:16 msgid "Offset from the origin of the generated plane. Useful for particles." -msgstr "" +msgstr "从生æˆå¹³é¢çš„原点åç§»ã€‚å¯¹ç²’åæœ‰ç”¨ã€‚" #: doc/classes/PlaneMesh.xml:19 msgid "Size of the generated plane." @@ -51959,28 +52442,25 @@ msgid "Infinite plane shape for 3D collisions." msgstr "æ— é™çš„å¹³é¢å½¢çŠ¶ï¼Œç”¨äºŽä¸‰ç»´ç¢°æ’žã€‚" #: doc/classes/PlaneShape.xml:7 -#, fuzzy msgid "" "An infinite plane shape for 3D collisions. Note that the [Plane]'s normal " "matters; anything \"below\" the plane will collide with it. If the " "[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects " "placed \"below\" it to teleport \"above\" the plane." msgstr "" -"ç”¨äºŽä¸‰ç»´ç¢°æ’žçš„æ— é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平" -"é¢çš„物体都会与之å‘生碰撞。如果[WorldMarginShape3D]被用于[PhysicsBody3D],它将" -"导致放置在它 \"下é¢\" çš„ç¢°æ’žç‰©ä½“è¢«ä¼ é€åˆ°å¹³é¢ \"上é¢\" 。" +"用于3Dç¢°æ’žçš„æ— é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平é¢" +"的物体都会与它å‘生碰撞。如果[PlaneShape]被用于[PhysicsBody],它将导致放置在" +"它 \"下é¢\" çš„ç¢°æ’žç‰©ä½“è¢«ä¼ é€åˆ° \"上é¢\" 的平é¢ã€‚" #: doc/classes/PlaneShape.xml:15 -#, fuzzy msgid "The [Plane] used by the [PlaneShape] for collision." -msgstr "[WorldMarginShape3D]用于碰撞的[Plane]å¹³é¢ã€‚" +msgstr "[PlaneShape] 用于碰撞的 [Plane]。" #: doc/classes/PointMesh.xml:4 msgid "Mesh with a single Point primitive." msgstr "å•ç‚¹åŽŸå§‹ç½‘æ ¼ã€‚" #: doc/classes/PointMesh.xml:7 -#, fuzzy msgid "" "The PointMesh is made from a single point. Instead of relying on triangles, " "points are rendered as a single rectangle on the screen with a constant " @@ -51994,20 +52474,21 @@ msgid "" "When using PointMeshes, properties that normally alter vertices will be " "ignored, including billboard mode, grow, and cull face." msgstr "" -"ç‚¹ç½‘æ ¼æ˜¯ç”±ä¸€ä¸ªç‚¹æž„æˆçš„ã€‚ç‚¹ä¸æ˜¯ä¾èµ–于三角形,而是在å±å¹•上以固定大å°å‘ˆçŽ°ä¸ºå•个" -"矩形。它们的目的是与粒å系统一起使用,但也å¯ä»¥ä½œä¸ºä¸€ç§å»‰ä»·çš„æ–¹æ³•æ¥æ¸²æŸ“固定大" -"å°çš„告示牌精çµ(例如点云)。\n" -"pointmesh,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/" -"code]在ç€è‰²å™¨ä¸è®¿é—®ï¼Œæˆ–者通过设置[member BaseMaterial3D]在[BaseMaterial3D]ä¸" -"访问。和å˜é‡[member BaseMaterial3D.point_size]。\n" -"当使用pointmesh时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除é¢ã€‚" +"PointMesh是由å•个的点构æˆã€‚与其ä¾èµ–三角形与点在å±å¹•上渲染形æˆå…·æœ‰æ’定尺寸的å•" +"独矩形。其旨在与粒å系统一起使用,但也å¯ä»¥ä½œä¸ºä¸€ç§æ¶ˆè€—å°çš„æ–¹å¼æ¥æ¸²æŸ“æ’定尺寸" +"的广告牌精çµï¼Œä¾‹å¦‚,在点云ä¸ã€‚\n" +"PointMeshes,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/" +"code]在ç€è‰²å™¨ä¸è®¿é—®ï¼Œæˆ–者通过设置[member SpatialMaterial." +"flags_use_point_size]å’Œå˜é‡[member SpatialMaterial.params_point_size]在" +"[SpatialMaterial]ä¸è®¿é—®ã€‚\n" +"当使用PointMeshes时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除" +"é¢ã€‚" #: doc/classes/Polygon2D.xml:4 msgid "A 2D polygon." msgstr "一个2D多边形。" #: doc/classes/Polygon2D.xml:7 -#, fuzzy msgid "" "A Polygon2D is defined by a set of points. Each point is connected to the " "next, with the final point being connected to the first, resulting in a " @@ -52019,9 +52500,13 @@ msgid "" "[member ProjectSettings.rendering/limits/buffers/" "canvas_polygon_index_buffer_size_kb]." msgstr "" -"一个Polygon2D是由一组点定义的.æ¯ä¸ªç‚¹ä¸Žä¸‹ä¸€ä¸ªç‚¹ç›¸è¿ž,最åŽä¸€ä¸ªç‚¹ä¸Žç¬¬ä¸€ä¸ªç‚¹ç›¸è¿ž," -"从而形æˆä¸€ä¸ªå°é—的多边形.Polygon2Då¯ä»¥ç”¨é¢œè‰²(纯色或æ¸å˜)å¡«å……,也å¯ä»¥ç”¨ç»™å®šçš„è´´" -"图填充." +"Polygon2D 由一组点定义。æ¯ä¸ªç‚¹éƒ½è¿žæŽ¥åˆ°ä¸‹ä¸€ä¸ªç‚¹ï¼Œæœ€åŽä¸€ä¸ªç‚¹è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹ï¼Œä»Ž" +"而形æˆå°é—的多边形。 Polygon2Dså¯ä»¥å¡«å……颜色(纯色或æ¸å˜è‰²ï¼‰æˆ–填充给定的纹" +"ç†ã€‚\n" +"[b]注:[/b] 默认情况下,Godot 一次最多åªèƒ½ç»˜åˆ¶ 4096 个多边形点。è¦å¢žåŠ æ¤é™" +"åˆ¶ï¼Œè¯·æ‰“å¼€é¡¹ç›®è®¾ç½®å¹¶å¢žåŠ [member ProjectSettings.rendering/limits/buffers/" +"canvas_polygon_buffer_size_kb] å’Œ [member ProjectSettings.rendering/limits/" +"buffers/canvas_polygon_index_buffer_size_kb]。" #: doc/classes/Polygon2D.xml:18 msgid "" @@ -52090,15 +52575,14 @@ msgid "The offset applied to each vertex." msgstr "应用于æ¯ä¸ªé¡¶ç‚¹çš„ä½ç½®åç§»é‡." #: doc/classes/Polygon2D.xml:92 -#, fuzzy msgid "" "The polygon's list of vertices. The final point will be connected to the " "first.\n" "[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a " "reference." msgstr "" -"多边形顶点的列表.最åŽä¸€ä¸ªç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹.\n" -"[b]注æ„:[/b]这将返回[PoolVector2Array]的拷è´,è€Œä¸æ˜¯å¼•用." +"多边形的顶点列表。最åŽä¸€ç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªã€‚\n" +"[b]注æ„:[/b] 这将返回 [PoolVector2Array] çš„å‰¯æœ¬è€Œä¸æ˜¯å¼•用。" #: doc/classes/Polygon2D.xml:100 msgid "" @@ -52149,53 +52633,45 @@ msgstr "" "如果数é‡å°‘,则未定义的顶点将使用[code]color[/code]." #: doc/classes/PoolByteArray.xml:4 -#, fuzzy msgid "A pooled [Array] of bytes." -msgstr "一个打包的å—节[Array]。" +msgstr "[Array] å—节集åˆã€‚" #: doc/classes/PoolByteArray.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold bytes. Optimized for memory usage, " "does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"一个专门用æ¥ä¿å˜å—节的[Array]。它紧密地包裹数æ®ï¼Œæ‰€ä»¥å½“æ•°ç»„å°ºå¯¸è¾ƒå¤§æ—¶ï¼Œè¯¥æ ¼å¼" -"将节çœä¸€ç¬”内å˜ã€‚\n" -"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。" +"一个 [Array] 专门设计用于ä¿å˜å—节。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" +"片。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•ç”¨ä¼ é€’ã€‚" #: doc/classes/PoolByteArray.xml:17 -#, fuzzy msgid "" "Constructs a new [PoolByteArray]. Optionally, you can pass in a generic " "[Array] that will be converted." -msgstr "" -"构建一个新的[PackedByteArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" +msgstr "构建新的[PoolByteArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolByteArray.xml:29 -#, fuzzy msgid "Appends a [PoolByteArray] at the end of this array." -msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ«ç«¯æ·»åŠ ä¸€ä¸ª[PackedByteArray]。" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolByteArray]。" #: doc/classes/PoolByteArray.xml:36 -#, fuzzy msgid "" "Returns a new [PoolByteArray] with the data compressed. Set the compression " "mode using one of [enum File.CompressionMode]'s constants." msgstr "" -"返回一个新的带有压缩数æ®çš„[PackedByteArray]。使用[enum File.CompressionMode]" -"ä¸çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚" +"返回新的[PoolByteArray],其ä¸çš„æ•°æ®è¢«åŽ‹ç¼©ã€‚ä½¿ç”¨[enum File.CompressionMode]ä¸" +"的一个常数æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚" #: doc/classes/PoolByteArray.xml:44 -#, fuzzy msgid "" "Returns a new [PoolByteArray] with the data decompressed. Set " "[code]buffer_size[/code] to the size of the uncompressed data. Set the " "compression mode using one of [enum File.CompressionMode]'s constants." msgstr "" -"返回一个新的[PackedByteArray],并对数æ®è¿›è¡Œè§£åŽ‹ã€‚ä½¿ç”¨[code]buffer_size[/code]" -"æ¥è®¾ç½®æœªåŽ‹ç¼©æ•°æ®çš„大å°ã€‚使用[enum File.CompressionMode]ä¸çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©" -"模å¼ã€‚" +"返回新的 [PoolByteArray] 解压数æ®ã€‚ [code]buffer_size[/code] 设置未压缩数æ®çš„" +"大å°ã€‚使用 [enum File.CompressionMode] 常é‡ä¹‹ä¸€è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚" #: doc/classes/PoolByteArray.xml:52 msgid "" @@ -52214,6 +52690,16 @@ msgid "" "will allow for unbounded output. If any positive value is passed, and the " "decompression exceeds that ammount in bytes, then an error will be returned." msgstr "" +"返回数æ®è§£åŽ‹åŽçš„æ–° [PoolByteArray] 。使用 [enum File.CompressionMode] 的常数" +"之一设置压缩模å¼ã€‚[b]æ¤æ–¹æ³•ä»…æŽ¥å— gzip å’Œdeflate压缩模å¼ã€‚[/b]\n" +"æ¤æ–¹æ³•å¯èƒ½æ¯” [code] decompress [/code] æ…¢ï¼Œå› ä¸ºå®ƒå¯èƒ½éœ€è¦åœ¨è§£åŽ‹æ—¶å¤šæ¬¡é‡æ–°åˆ†é…" +"å…¶è¾“å‡ºç¼“å†²å™¨ï¼Œå› ä¸º [code] decompress [/code] 从一开始就知é“它的输出缓冲器大" +"å°ã€‚\n" +"\n" +"GZIP 的最大压缩比为 1032:1,这æ„味ç€å°åž‹åŽ‹ç¼©æœ‰æ•ˆè½½è·æžæœ‰å¯èƒ½å‡åŽ‹åˆ°æ½œåœ¨çš„éžå¸¸" +"大输出。为了防æ¢è¿™ç§æƒ…况,您å¯ä»¥æä¾›æœ€å¤§å°ºå¯¸ï¼Œå…许æ¤å‡½æ•°é€šè¿‡ " +"[code]max_output_size [/code] 以å—节进行分é…。通过 -1 å°†å…è®¸æ— é™åˆ¶è¾“出。如果" +"通过任何æ£å€¼ï¼Œå¹¶ä¸”解压超过给定的å—节值,则将返回错误。" #: doc/classes/PoolByteArray.xml:67 msgid "" @@ -52240,7 +52726,6 @@ msgstr "" "数。" #: doc/classes/PoolByteArray.xml:79 -#, fuzzy msgid "" "Returns a hexadecimal representation of this array as a [String].\n" "[codeblock]\n" @@ -52250,7 +52735,7 @@ msgid "" msgstr "" "返回该数组的åå…进制,表示为一个[String]。\n" "[codeblock]\n" -"var array = PackedByteArray([11, 46, 255])\n" +"var array = PoolByteArray([11, 46, 255])\n" "print(array.hex_encode()) # Prints: 0b2eff\n" "[/codeblock]" @@ -52277,7 +52762,6 @@ msgstr "从数组ä¸åˆ 除ä½äºŽç´¢å¼•çš„å…ƒç´ ã€‚" #: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67 #: doc/classes/PoolRealArray.xml:67 -#, fuzzy msgid "" "Sets the size of the array. If the array is grown, reserves elements at the " "end of the array. If the array is shrunk, truncates the array to the new " @@ -52285,8 +52769,9 @@ msgid "" "[b]Note:[/b] Added elements are not automatically initialized to 0 and will " "contain garbage, i.e. indeterminate values." msgstr "" -"设置数组的大å°ã€‚如果数组被增大,则ä¿ç•™æ•°ç»„æœ«ç«¯çš„å…ƒç´ ã€‚å¦‚æžœæ•°ç»„è¢«ç¼©å°ï¼Œåˆ™å°†æ•°" -"组截æ–到新的大å°ã€‚" +"设置数组的大å°ã€‚如果数组增长,则ä¿ç•™æ•°ç»„æœ«å°¾çš„å…ƒç´ ã€‚å¦‚æžœæ•°ç»„ç¼©å°ï¼Œåˆ™å°†æ•°ç»„截" +"æ–为新大å°ã€‚\n" +"[b]注æ„:[/b] æ·»åŠ çš„å…ƒç´ ä¸ä¼šè‡ªåЍåˆå§‹åŒ–为 0,并且会包å«åžƒåœ¾ï¼Œå³ä¸ç¡®å®šå€¼ã€‚" #: doc/classes/PoolByteArray.xml:122 msgid "Changes the byte at the given index." @@ -52299,43 +52784,37 @@ msgid "Returns the size of the array." msgstr "返回数组的大å°ã€‚" #: doc/classes/PoolByteArray.xml:136 -#, fuzzy msgid "" "Returns the slice of the [PoolByteArray] between indices (inclusive) as a " "new [PoolByteArray]. Any negative index is considered to be from the end of " "the array." msgstr "" -"返回索引(包括其本身)之间的[PackedByteArray]的片æ–为一个新的" -"[PackedByteArray]。任何负的索引都被认为是从数组的末端开始的。" +"返回索引(包括)之间的[PoolByteArray]的片æ–为一个新的[PoolByteArray]。任何负" +"的索引都被认为是从数组的末端开始的。" #: doc/classes/PoolColorArray.xml:4 -#, fuzzy msgid "A pooled [Array] of [Color]." -msgstr "一个包装好的[Color]çš„[Array]。" +msgstr "[Color]çš„[Array]的集åˆã€‚" #: doc/classes/PoolColorArray.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold [Color]. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"一个专门为容纳[Color]而设计的[Array]。紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将" -"节çœå†…å˜ã€‚\n" -"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。" +"专门用于ä¿å˜[Color]çš„[Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolColorArray.xml:17 -#, fuzzy msgid "" "Constructs a new [PoolColorArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"æž„é€ ä¸€ä¸ªæ–°çš„[PackedColorArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" +"构建新的[PoolColorArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolColorArray.xml:29 -#, fuzzy msgid "Appends a [PoolColorArray] at the end of this array." -msgstr "将一个[PackedColorArray]è¿½åŠ åˆ°è¯¥æ•°ç»„çš„å°¾éƒ¨ã€‚" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ ä¸€ä¸ª[PoolColorArray]。" #: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55 msgid "Appends a value to the array." @@ -52356,12 +52835,10 @@ msgid "Changes the [Color] at the given index." msgstr "更改给定索引处的[Color]。" #: doc/classes/PoolIntArray.xml:4 -#, fuzzy msgid "A pooled [Array] of integers ([int])." -msgstr "一个32使•´æ•°çš„压缩[Array]。" +msgstr "æ•´æ•°[int]çš„[Array]的集åˆã€‚" #: doc/classes/PoolIntArray.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold integer values ([int]). Optimized " "for memory usage, does not fragment the memory.\n" @@ -52372,50 +52849,42 @@ msgid "" "around. In comparison, [int] uses signed 64-bit integers which can hold much " "larger values." msgstr "" -"一个专门用于ä¿å˜32使•´æ•°å€¼çš„[阵列]。紧密地包装数æ®ï¼Œæ‰€ä»¥å®ƒä¸ºå¤§çš„æ•°ç»„尺寸节çœ" -"了内å˜ã€‚\n" -"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。\n" -"[b]注æ„:[/b] 该类型å˜å‚¨æœ‰ç¬¦å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒå¯ä»¥åœ¨[code][-2^31, 2^31 " -"- 1][/code]之间å–值,å³[code][-2147483648, 2147483647][/code]。超过这些界é™å°±" -"会被包起æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—å¤šçš„å€¼ã€‚å¦‚æžœä½ éœ€" -"è¦ä¸¥æ ¼æ‰“包64使•´æ•°ï¼Œè¯·å‚阅[PackedInt64Array]。" +"一个专门用于ä¿å˜æ•´æ•°å€¼çš„[Array]([int])。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜" +"碎片化。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。\n" +"[b]注æ„:[/b] 这个类型仅é™äºŽæœ‰ç¬¦å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒåªèƒ½åœ¨[code][-2^31, " +"2^31 - 1][/code]的区间å–值,å³[code][-2147483648, 2147483647][/code]。超过这" +"些界é™å°±ä¼šè¢«åŒ…èµ·æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—多的值。" #: doc/classes/PoolIntArray.xml:18 -#, fuzzy msgid "" "Constructs a new [PoolIntArray]. Optionally, you can pass in a generic " "[Array] that will be converted." -msgstr "" -"构建一个新的[PackedInt32Array]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转" -"æ¢ã€‚。" +msgstr "构建新的[PoolIntArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolIntArray.xml:30 -#, fuzzy msgid "Appends a [PoolIntArray] at the end of this array." -msgstr "åœ¨æ•°ç»„çš„æœ«å°¾è¿½åŠ ä¸€ä¸ª[PackedInt32Array]。" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolIntArray]。" #: doc/classes/PoolIntArray.xml:44 -#, fuzzy msgid "" "Inserts a new int at a given position in the array. The position must be " "valid, or at the end of the array ([code]idx == size()[/code])." msgstr "" -"在数组的给定ä½ç½®æ’入一个新的整数。ä½ç½®å¿…须是有效的,或者ä½äºŽæ•°ç»„的末尾" -"([code]idx == size()[/code])。" +"在数组ä¸çš„æŒ‡å®šä½ç½®æ’入一个新的int。这个ä½ç½®å¿…须是有效的,或者在数组的末端" +"([code]idx == size()[/code])。" #: doc/classes/PoolIntArray.xml:75 -#, fuzzy msgid "Changes the int at the given index." -msgstr "改å˜ç»™å®šç´¢å¼•处的整数。" +msgstr "更改给定索引处的 int。" #: doc/classes/PoolIntArray.xml:81 msgid "Returns the array size." msgstr "返回数组大å°ã€‚" #: doc/classes/PoolRealArray.xml:4 -#, fuzzy msgid "A pooled [Array] of reals ([float])." -msgstr "一个包装好的[Color]çš„[Array]。" +msgstr "实数 [float] çš„[Array]集åˆã€‚" #: doc/classes/PoolRealArray.xml:7 msgid "" @@ -52430,59 +52899,60 @@ msgid "" "store [float]s will use roughly 6 times more memory compared to a " "[PoolRealArray]." msgstr "" +"专门设计用于ä¿å˜æµ®ç‚¹å€¼çš„ [Array] 。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" +"片。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•ç”¨ä¼ é€’ã€‚\n" +"[b]注æ„:[/b] 与 64 ä½åŽŸå§‹ [float] ä¸åŒï¼Œå˜å‚¨åœ¨ [PoolRealArray] ä¸çš„æ•°å—是 " +"32 使µ®ç‚¹æ•°ã€‚è¿™æ„味ç€ä¸ŽåŽŸå§‹ [float] 相比,å˜å‚¨åœ¨ [PoolRealArray] ä¸çš„值具有较" +"低的精度。如果您需è¦åœ¨æ•°ç»„ä¸å˜å‚¨ 64 使µ®ç‚¹æ•°ï¼Œè¯·ä½¿ç”¨å…·æœ‰ [float] å…ƒç´ çš„é€šç”¨ " +"[Array]ï¼Œå› ä¸ºè¿™äº›å…ƒç´ ä»ä¸º 64 ä½ã€‚但是,与 [PoolRealArray] 相比,使用通用 " +"[Array] å˜å‚¨ [float] 将使用大约 6 å€çš„内å˜ã€‚" #: doc/classes/PoolRealArray.xml:18 -#, fuzzy msgid "" "Constructs a new [PoolRealArray]. Optionally, you can pass in a generic " "[Array] that will be converted." -msgstr "" -"æž„é€ ä¸€ä¸ªæ–°çš„[PackedColorArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" +msgstr "构建新的[PoolRealArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolRealArray.xml:30 -#, fuzzy msgid "Appends a [PoolRealArray] at the end of this array." -msgstr "将一个[PackedColorArray]è¿½åŠ åˆ°è¯¥æ•°ç»„çš„å°¾éƒ¨ã€‚" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolRealArray]。" #: doc/classes/PoolRealArray.xml:75 msgid "Changes the float at the given index." msgstr "更改给定索引处的浮点数。" #: doc/classes/PoolStringArray.xml:4 -#, fuzzy msgid "A pooled [Array] of [String]." -msgstr "一个由压缩的[String]组æˆçš„[Array]。" +msgstr "[String] çš„ [Array] 集åˆã€‚" #: doc/classes/PoolStringArray.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold [String]s. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"一个专门设计用æ¥ä¿å˜å—符串的[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这" -"将节çœä¸€å®šå†…å˜ã€‚\n" -"[b]注æ„:[/b]è¯¥ç±»åž‹æ˜¯é€šè¿‡å€¼è€Œä¸æ˜¯å¼•ç”¨ä¼ é€’çš„ã€‚" +"[Array] 专门设计用于ä¿å˜ [String]。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" +"片。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’ï¼Œè€Œä¸æ˜¯å¼•ç”¨ä¼ é€’ã€‚" #: doc/classes/PoolStringArray.xml:18 -#, fuzzy msgid "" "Constructs a new [PoolStringArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"æž„é€ ä¸€ä¸ªæ–°çš„[PackedStringArray]。或者,您å¯ä»¥ä¼ 入将被转æ¢çš„通用[Array]。" +"构建新的[PoolStringArray]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolStringArray.xml:30 -#, fuzzy msgid "Appends a [PoolStringArray] at the end of this array." -msgstr "åœ¨æ¤æ•°ç»„æœ«å°¾è¿½åŠ [PackedStringArray]。" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolStringArray]。" #: doc/classes/PoolStringArray.xml:56 -#, fuzzy msgid "" "Returns a [String] with each element of the array joined with the given " "[code]delimiter[/code]." -msgstr "返回与给定[code] id [/code]å…³è”的点的æƒé‡æ¯”例。" +msgstr "" +"返回一个[String],数组的æ¯ä¸ªå…ƒç´ 都用给定的[code]delimiter[/code]分隔符连接。" #: doc/classes/PoolStringArray.xml:62 msgid "Appends a string element at end of the array." @@ -52493,20 +52963,17 @@ msgid "Changes the [String] at the given index." msgstr "更改给定索引处的[String]。" #: doc/classes/PoolVector2Array.xml:4 -#, fuzzy msgid "A pooled [Array] of [Vector2]." -msgstr "[Vector2]的压缩[Array]。" +msgstr "[Vector2] çš„ [Array] 集åˆã€‚" #: doc/classes/PoolVector2Array.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold [Vector2]. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门设计用æ¥å®¹çº³Vector2çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将" -"节çœä¸€å®šå†…å˜ã€‚\n" -"[b] 注æ„:[/b]æ¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•ç”¨ä¼ é€’çš„ã€‚" +"专门用æ¥ä¿å˜[Vector2]çš„[Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15 #: doc/classes/TileSet.xml:15 @@ -52514,17 +52981,15 @@ msgid "https://godotengine.org/asset-library/asset/519" msgstr "https://godotengine.org/asset-library/asset/519" #: doc/classes/PoolVector2Array.xml:18 -#, fuzzy msgid "" "Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"æž„é€ ä¸€ä¸ªæ–°çš„[PackedVector2Array]。或者,您å¯ä»¥ä¼ 入将被转æ¢çš„通用[Array]。" +"构建新的[PoolVector2Array]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolVector2Array.xml:30 -#, fuzzy msgid "Appends a [PoolVector2Array] at the end of this array." -msgstr "åœ¨æ¤æ•°ç»„æœ«å°¾è¿½åŠ ä¸€ä¸ª[PackedVector2Array]。" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector2Array]。" #: doc/classes/PoolVector2Array.xml:55 msgid "Inserts a [Vector2] at the end." @@ -52535,33 +53000,29 @@ msgid "Changes the [Vector2] at the given index." msgstr "在给定索引处更改[Vector2]。" #: doc/classes/PoolVector3Array.xml:4 -#, fuzzy msgid "A pooled [Array] of [Vector3]." -msgstr "[Vector3]的压缩[Array]。" +msgstr "[Vector3] çš„ [Array] 集åˆã€‚" #: doc/classes/PoolVector3Array.xml:7 -#, fuzzy msgid "" "An [Array] specifically designed to hold [Vector3]. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门设计用æ¥å®¹çº³Vector3çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将" -"节çœä¸€å®šå†…å˜ã€‚\n" -"[b] 注æ„:[/b]æ¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•ç”¨ä¼ é€’çš„ã€‚" +"专门设计æ¥å®¹çº³[Vector3]çš„[Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡" +"化。\n" +"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolVector3Array.xml:17 -#, fuzzy msgid "" "Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"æž„é€ ä¸€ä¸ªæ–°çš„[PackedVector3Array]。或者,您å¯ä»¥ä¼ 入将被转æ¢çš„通用[Array]。" +"构建新的[PoolVector3Array]ã€‚ä½ å¯ä»¥é€‰æ‹©ä¼ 入一个通用的[Array],它将被转æ¢ã€‚" #: doc/classes/PoolVector3Array.xml:29 -#, fuzzy msgid "Appends a [PoolVector3Array] at the end of this array." -msgstr "åœ¨æ¤æ•°ç»„æœ«å°¾è¿½åŠ ä¸€ä¸ª[PackedVector3Array]。" +msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector3Array]。" #: doc/classes/PoolVector3Array.xml:54 msgid "Inserts a [Vector3] at the end." @@ -52576,18 +53037,18 @@ msgid "Base container control for popups and dialogs." msgstr "用于弹出窗å£å’Œå¯¹è¯æ¡†çš„基本容器控件。" #: doc/classes/Popup.xml:7 -#, fuzzy msgid "" "Popup is a base [Control] used to show dialogs and popups. It's a subwindow " "and modal by default (see [Control]) and has helpers for custom popup " "behavior. All popup methods ensure correct placement within the viewport." msgstr "" -"å¼¹å‡ºæ¡†æ˜¯ä¸€ä¸ªç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå…¶ä»–弹出框的基类[Control].默认,它是一个å窗å£å’Œæ¨¡" -"æ€(å‚阅[Control]),并且有自定义弹出动作的帮助程åº." +"Popup 是基本的 [Control]ï¼Œç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå¼¹å‡ºçª—å£ã€‚默认情况下,它是一个å窗" +"å£å’Œæ¨¡æ€ï¼Œå‚阅 [Control],并具有自定义弹出行为的辅助程åºã€‚所有弹出方法都确ä¿" +"åœ¨è§†çª—ä¸æ£ç¡®æ”¾ç½®ã€‚" #: doc/classes/Popup.xml:16 msgid "Popup (show the control in modal form)." -msgstr "" +msgstr "弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ã€‚" #: doc/classes/Popup.xml:23 msgid "" @@ -52595,6 +53056,8 @@ msgid "" "to its current canvas transform, at the current size, or at a size " "determined by [code]size[/code]." msgstr "" +"æ ¹æ®ç›¸å¯¹äºŽå½“å‰ç”»å¸ƒè½¬æ¢ã€å½“å‰å¤§å°æˆ–ç”± [code]size[/code] 确定的大å°ï¼Œåœ¨å±å¹•ä¸å¤®" +"弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§åˆ¶ï¼‰ã€‚" #: doc/classes/Popup.xml:31 msgid "" @@ -52603,6 +53066,9 @@ msgid "" "then ensuring the popup is no larger than the viewport size multiplied by " "[code]fallback_ratio[/code]." msgstr "" +"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•ä¸å¤®å¼¹å‡ºï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œå°†å¤§å°é™åˆ¶ä¸º" +"[code]size[/code],并确ä¿å¼¹å‡ºçª—å£ä¸å¤§äºŽè§†å£å¤§å°ä¹˜ä»¥[code] fallback_ratio[/" +"code]。" #: doc/classes/Popup.xml:38 msgid "" @@ -52610,16 +53076,20 @@ msgid "" "to the current canvas transform, ensuring the size is never smaller than " "[code]minsize[/code]." msgstr "" +"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•ä¸å¤®å¼¹å‡ºï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œç¡®ä¿å°ºå¯¸æ°¸è¿œä¸ä¼šå°äºŽ " +"[code]minsize[/code]。" #: doc/classes/Popup.xml:45 msgid "" "Popup (show the control in modal form) in the center of the screen relative " "to the current canvas transform, scaled at a ratio of size of the screen." msgstr "" +"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•ä¸å¤®å¼¹å‡ºï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼ŒæŒ‰å±å¹•大å°çš„æ¯”例缩" +"放。" #: doc/classes/Popup.xml:51 msgid "Shrink popup to keep to the minimum size of content." -msgstr "" +msgstr "缩å°å¼¹å‡ºçª—å£ä»¥ä¿æŒå†…容的最å°å¤§å°ã€‚" #: doc/classes/Popup.xml:57 msgid "" @@ -52631,6 +53101,12 @@ msgid "" "ConfirmationDialog.get_cancel] and hide the buttons in question by setting " "their [member CanvasItem.visible] property to [code]false[/code]." msgstr "" +"如果[code]true[/code],当点击事件å‘生在它之外,或者当它收到[code]ui_cancel[/" +"code]动作事件时,弹出窗å£ä¸ä¼šè¢«éšè—。\n" +"[b]注æ„:[/b] å¯ç”¨æ¤å±žæ€§ä¸ä¼šå½±å“从æ¤ç±»ç»§æ‰¿çš„å¯¹è¯æ¡†ä¸å…³é—æˆ–å–æ¶ˆæŒ‰é’®çš„行为。作" +"为解决方法,您å¯ä»¥ä½¿ç”¨ [method WindowDialog.get_close_button] 或 [method " +"ConfirmationDialog.get_cancel] 并通过将其 [member CanvasItem.visible] 属性设" +"置为 [code]false[/code] æ¥éšè—有问题的按钮。" #: doc/classes/Popup.xml:65 msgid "" @@ -52638,35 +53114,33 @@ msgid "" "to clear the list of options then create a new one according to the current " "context." msgstr "" +"当弹出窗å£å³å°†æ˜¾ç¤ºæ—¶å‘出。这通常在 [PopupMenu] ä¸ç”¨äºŽæ¸…é™¤é€‰é¡¹åˆ—è¡¨ï¼Œç„¶åŽæ ¹æ®å½“" +"å‰ä¸Šä¸‹æ–‡åˆ›å»ºä¸€ä¸ªæ–°é€‰é¡¹ã€‚" #: doc/classes/Popup.xml:70 msgid "Emitted when a popup is hidden." msgstr "当弹出窗å£è¢«éšè—æ—¶å‘出." #: doc/classes/Popup.xml:76 -#, fuzzy msgid "Notification sent right after the popup is shown." -msgstr "节点被实例化时收到的通知。" +msgstr "åœ¨å¼¹å‡ºçª—å£æ˜¾ç¤ºåŽç«‹å³å‘é€é€šçŸ¥ã€‚" #: doc/classes/Popup.xml:79 -#, fuzzy msgid "Notification sent right after the popup is hidden." -msgstr "节点被实例化时收到的通知。" +msgstr "在弹出窗å£è¢«éšè—åŽç«‹å³å‘é€é€šçŸ¥ã€‚" #: doc/classes/PopupDialog.xml:4 -#, fuzzy msgid "Base class for popup dialogs." -msgstr "分离器的基类。" +msgstr "å¼¹å‡ºå¯¹è¯æ¡†çš„基类。" #: doc/classes/PopupDialog.xml:7 msgid "" "PopupDialog is a base class for popup dialogs, along with [WindowDialog]." -msgstr "" +msgstr "PopupDialog æ˜¯å¼¹å‡ºå¯¹è¯æ¡†çš„基类,与 [WindowDialog] 一起。" #: doc/classes/PopupDialog.xml:17 -#, fuzzy msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]." -msgstr "为 [SpinBox] 的上下ç®å¤´è®¾ç½®è‡ªå®šä¹‰ [Texture2D]。" +msgstr "为[PopupDialog]çš„é¢æ¿è®¾ç½®è‡ªå®šä¹‰çš„[StyleBox]。" #: doc/classes/PopupMenu.xml:4 msgid "PopupMenu displays a list of options." @@ -52826,7 +53300,7 @@ msgstr "" "code]定义。\n" "å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›" "[code]id[/code],将从索引ä¸åˆ›å»ºä¸€ä¸ªã€‚如果没有æä¾›[code]accel[/code],则默认的" -"[code]0[/code]将被分é…ç»™å®ƒã€‚æœ‰å…³åŠ é€Ÿå™¨çš„æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅[方法" +"[code]0[/code]将被分é…ç»™å®ƒã€‚æœ‰å…³åŠ é€Ÿå™¨çš„æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅[method " "get_item_accelerator]。" #: doc/classes/PopupMenu.xml:129 @@ -52968,11 +53442,10 @@ msgid "" msgstr "返回与指定索引 [code]idx[/code]å…³è”的工具æç¤ºã€‚" #: doc/classes/PopupMenu.xml:258 -#, fuzzy msgid "" "Returns [code]true[/code] if the popup will be hidden when the window loses " "focus or not." -msgstr "返回[code]true[/code],如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶ï¼Œå¼¹å‡ºçª—å£ä¼šè¢«éšè—。" +msgstr "如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶æ˜¯å¦éšè—弹出窗å£ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/PopupMenu.xml:265 msgid "" @@ -53267,7 +53740,7 @@ msgstr "未选ä¸çš„å•选按钮项目的 [Texture] å›¾æ ‡ã€‚" #: doc/classes/PopupMenu.xml:545 msgid "[StyleBox] used for the separators. See [method add_separator]." -msgstr "用于分隔符的[StyleBox]。请å‚阅[方法add_separator]。" +msgstr "用于分隔符的[StyleBox]。请å‚阅[method add_separator]。" #: doc/classes/PopupMenu.xml:548 msgid "[Texture] icon for the submenu arrow." @@ -53318,16 +53791,25 @@ msgid "" "There is no need to place an opposite portal in an adjacent room, links are " "made two-way automatically." msgstr "" +"[Portal] 是一ç§ç‰¹æ®Šç±»åž‹çš„ [MeshInstance],å…许门户剔除系统从一个空间“看到â€åˆ°" +"å¦ä¸€ä¸ªç©ºé—´ã€‚å®ƒä»¬é€šå¸¸å¯¹åº”äºŽæ°´å¹³å‡ ä½•ä¸çš„门窗。åªå…许 [Camera] é€è¿‡ä¼ é€é—¨çœ‹åˆ°ï¼Œ" +"è¿™å…è®¸ç³»ç»Ÿå‰”é™¤ç©ºé—´ä¸æ— 法é€è¿‡ä¼ é€é—¨çœ‹åˆ°çš„æ‰€æœ‰ç‰©ä½“。这是[b]鮿Œ¡å‰”除[/b]的一ç§å½¢" +"å¼ï¼Œå¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ã€‚\n" +"Portalçš„å½¢å¼æœ‰ä¸€äº›é™åˆ¶ï¼š\n" +"它们必须是å•é¢å‡¸å¤šè¾¹å½¢ï¼Œå¹¶ä¸”通常您会将它们的æ£é¢ [b] å‘外 [/b] 从它们所在的 " +"[Room] 定å‘。顶点应该ä½äºŽä¸€ä¸ªå¹³é¢ä¸Šï¼ˆå°½ç®¡å®ƒä»¬çš„ä½ç½®ä¸å¿…完美)。\n" +"æ— éœ€åœ¨ç›¸é‚»ç©ºé—´æ”¾ç½®å¯¹é¢çš„ä¼ é€é—¨ï¼Œå®ƒä»¬ä¼šè‡ªåŠ¨å»ºç«‹åŒå‘链接。" #: doc/classes/Portal.xml:20 doc/classes/Room.xml:21 msgid "Sets individual points. Primarily for use by the editor." -msgstr "" +msgstr "设置å•个点。主è¦ä¾›ç¼–辑器使用。" #: doc/classes/Portal.xml:26 msgid "" "This is a shortcut for setting the linked [Room] in the name of the [Portal] " "(the name is used during conversion)." msgstr "" +"这是在[Portal]çš„åç§°ä¸è®¾ç½®é“¾æŽ¥[Room]çš„å¿«æ·æ–¹å¼ï¼ˆå称在转æ¢è¿‡ç¨‹ä¸ä½¿ç”¨ï¼‰ã€‚" #: doc/classes/Portal.xml:29 msgid "" @@ -53337,12 +53819,17 @@ msgid "" "[Portal] node's [member Spatial.global_transform].\n" "[b]Note:[/b] These raw points are sanitized for winding order internally." msgstr "" +"定义 [Portal] 多边形形状的点(应该是凸é¢ï¼‰ã€‚\n" +"这些是在 2D ä¸å®šä¹‰çš„,[code]0,0[/code] 是 [Portal] 节点的 [member Spatial." +"global_transform] 的原点。\n" +"[b]注æ„:[/b] 这些原始点会被整ç†ä»¥ä¾¿åœ¨å†…éƒ¨ç¼ ç»•é¡ºåºã€‚" #: doc/classes/Portal.xml:34 msgid "" "Visibility through [Portal]s can be turned on and off at runtime - this is " "useful for having closable doors." msgstr "" +"å¯ä»¥åœ¨è¿è¡Œæ—¶æ‰“开和关é—通过 [Portal] çš„å¯è§æ€§ - 这对于具有å¯å…³é—的门很有用。" #: doc/classes/Portal.xml:37 msgid "" @@ -53351,12 +53838,17 @@ msgid "" "to be assigned to neighbouring rooms, you can assign an extra margin through " "the [Portal] to allow objects to breach without sprawling." msgstr "" +"有些物体éžå¸¸å¤§ï¼Œä»¥è‡³äºŽå®ƒä»¬å¯èƒ½ä¼šå‡ºçŽ°åœ¨ä¸æ¢ä¸€ä¸ª [Room]ä¸ï¼ˆâ€œè”“å»¶â€ï¼‰ã€‚由于我们通" +"常ä¸å¸Œæœ›å°†*åªæ˜¯*çªç ´è¾¹ç¼˜çš„对象分é…ç»™ç›¸é‚»çš„æˆ¿é—´ï¼Œå› æ¤æ‚¨å¯ä»¥é€šè¿‡ [Portal] 分é…" +"é¢å¤–的边è·ï¼Œä»¥å…许对象在ä¸è”“延的情况下çªç ´ã€‚" #: doc/classes/Portal.xml:40 msgid "" "Portals default to being two way - see through in both directions, however " "you can make them one way, visible from the source room only." msgstr "" +"Portal默认为åŒå‘ - 在两个方å‘都å¯ä»¥çœ‹åˆ°ï¼Œä½†æ˜¯æ‚¨å¯ä»¥å°†å®ƒä»¬è®¾ä¸ºä¸€ç§ä»Žæºæˆ¿é—´å¯è§" +"的方å¼ã€‚" #: doc/classes/Portal.xml:43 msgid "" @@ -53365,6 +53857,10 @@ msgid "" "If you want to override this default, set this value to [code]false[/code], " "and the local [member portal_margin] will take effect." msgstr "" +"在大多数情况下,您会希望在Portalä¸ä½¿ç”¨é»˜è®¤çš„ [Portal] è¾¹è·ï¼ˆè¿™æ˜¯åœ¨ " +"[RoomManager] ä¸è®¾ç½®çš„)。\n" +"如果è¦è¦†ç›–这个默认值,把这个值设置为[code]false[/code],本地的[member " +"portal_margin]就会生效。" #: doc/classes/Position2D.xml:4 msgid "Generic 2D position hint for editing." @@ -53429,16 +53925,15 @@ msgstr "" "[/codeblock]" #: doc/classes/PrimitiveMesh.xml:29 -#, fuzzy msgid "" "If set, the order of the vertices in each triangle are reversed resulting in " "the backside of the mesh being drawn.\n" "This gives the same result as using [constant SpatialMaterial.CULL_BACK] in " "[member SpatialMaterial.params_cull_mode]." msgstr "" -"如果设置,æ¯ä¸ªä¸‰è§’å½¢ä¸é¡¶ç‚¹çš„顺åºé¢ å€’ï¼Œå¯¼è‡´ç½‘æ ¼çš„èƒŒé¢è¢«ç»˜åˆ¶ã€‚\n" -"这给出了与使用[constant BaseMaterial3D相åŒçš„结果。在[member BaseMaterial3D." -"cull_mode]ä¸çš„CULL_BACK]。" +"如果设置,则æ¯ä¸ªä¸‰è§’å½¢ä¸é¡¶ç‚¹çš„顺åºä¼šé¢ å€’ï¼Œä»Žè€Œç»˜åˆ¶ç½‘æ ¼çš„èƒŒé¢ã€‚\n" +"这与在 [member SpatialMaterial.params_cull_mode] ä¸ä½¿ç”¨ [constant " +"SpatialMaterial.CULL_BACK] 的结果相åŒã€‚" #: doc/classes/PrimitiveMesh.xml:33 msgid "The current [Material] of the primitive mesh." @@ -53471,13 +53966,11 @@ msgid "Number of added edge loops along the X axis." msgstr "沿Xè½´æ·»åŠ çš„è¾¹å¾ªçŽ¯æ•°ã€‚" #: doc/classes/ProceduralSky.xml:4 -#, fuzzy msgid "" "Type of [Sky] that is generated procedurally based on user input parameters." -msgstr "与[Sky]一起使用的[Material]æ ¹æ®ç”¨æˆ·è¾“入傿•°ç”ŸæˆèƒŒæ™¯ã€‚" +msgstr "æ ¹æ®ç”¨æˆ·è¾“å…¥çš„å‚æ•°æŒ‰ç¨‹åºç”Ÿæˆçš„[Sky]类型。" #: doc/classes/ProceduralSky.xml:7 -#, fuzzy msgid "" "ProceduralSky provides a way to create an effective background quickly by " "defining procedural parameters for the sun, the sky and the ground. The sky " @@ -53494,20 +53987,18 @@ msgid "" "relatively frequently, as it is updated on a background thread when multi-" "threading is available." msgstr "" -"ProceduralSkyMaterial通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„程åºå‚数,æä¾›äº†ä¸€ç§å¿«é€Ÿåˆ›å»ºæœ‰" -"效背景的方法。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬ç”±åœ°å¹³çº¿ä¸Šçš„一ç§é¢œè‰²ã€å¦ä¸€ç§é¢œè‰²ä»¥åŠæœ€" -"åŽæ’入这两ç§é¢œè‰²ä¹‹é—´çš„缓和曲线æ¥å®šä¹‰ã€‚类似地,太阳由天空ä¸çš„ä½ç½®ã€é¢œè‰²å’Œç¼“å’Œ" -"æ›²çº¿æ¥æè¿°ã€‚ç„¶è€Œï¼Œå¤ªé˜³è¿˜å®šä¹‰äº†æœ€å°å’Œæœ€å¤§è§’度,这两个值定义了缓和曲线从太阳开" -"始和结æŸçš„è·ç¦»ï¼Œä»Žè€Œæœ€ç»ˆå®šä¹‰äº†å¤ªé˜³åœ¨å¤©ç©ºä¸çš„大å°ã€‚\n" -"[ProceduralSkyMaterial]使用轻é‡çº§ç€è‰²å™¨ç»˜åˆ¶å¤©ç©ºï¼Œå› æ¤é€‚åˆå®žæ—¶æ›´æ–°ã€‚å½“ä½ ä¸éœ€è¦" -"一个ä¸çŽ°å®žçš„å¿«é€Ÿå¤©ç©ºæ—¶ï¼Œè¿™æ˜¯ä¸€ä¸ªå¾ˆå¥½çš„é€‰æ‹©ã€‚\n" -"[ProceduralSkyMaterial]最多支æŒ4个太阳。æ¯ä¸ªå¤ªé˜³éƒ½ä»Žåœºæ™¯ä¸ç›¸åº”çš„" -"[DirectionalLight3D]获å–其颜色ã€èƒ½é‡å’Œæ–¹å‘。" +"ProceduralSkyæä¾›äº†ä¸€ç§æ–¹æ³•,通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„ç¨‹åºæ€§å‚数,以快速创建" +"一个有效的背景。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬æ˜¯ç”±åœ°å¹³çº¿ä¸Šçš„两ç§é¢œè‰²ä»¥åŠåœ¨è¿™ä¸¤ç§é¢œ" +"色之间æ’值æ¸å˜æ›²çº¿æ¥å®šä¹‰ã€‚åŒæ ·ï¼Œå¤ªé˜³ä¹Ÿæ˜¯ç”±å¤©ç©ºä¸çš„ä½ç½®ã€é¢œè‰²å’Œå¹³ç¼“æ›²çº¿æ¥æ" +"è¿°ã€‚åŒæ—¶ï¼Œå¤ªé˜³ä¹Ÿå®šä¹‰äº†æœ€å°å’Œæœ€å¤§çš„角度,这两个值定义了太阳从开始和结æŸçš„è·ç¦»" +"的平缓曲线,进而,最终定义了天空ä¸å¤ªé˜³çš„大å°ã€‚\n" +"åœ¨å‚æ•°æ”¹å˜åŽï¼Œç¨‹åºæ€§å¤©ç©ºä¼šåœ¨CPU上更新。它被å˜å‚¨åœ¨ä¸€ä¸ªçº¹ç†ä¸ï¼Œç„¶åŽåœ¨åœºæ™¯ä¸ä½œä¸º" +"背景显示。这使得它相对æ¥è¯´ï¼Œä¸é€‚åˆåœ¨æ¸¸æˆè¿›è¡Œè¿‡ç¨‹ä¸å®žæ—¶æ›´æ–°ã€‚但,如果纹ç†å°ºå¯¸" +"足够å°ï¼Œå®ƒä»ç„¶å¯ä»¥ç›¸å¯¹é¢‘ç¹åœ°æ›´æ–°ï¼Œå› 为当多线程å¯ç”¨æ—¶ï¼Œå®ƒæ˜¯åœ¨åŽå°çº¿ç¨‹ä¸Šã€‚" #: doc/classes/ProceduralSky.xml:16 -#, fuzzy msgid "Color of the ground at the bottom." -msgstr "æ ‡é¢˜æ–‡å—的颜色。" +msgstr "底部地é¢çš„颜色。" #: doc/classes/ProceduralSky.xml:19 msgid "" @@ -53546,40 +54037,38 @@ msgid "Distance from center of sun where it fades out completely." msgstr "è·ç¦»å¤ªé˜³ä¸å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚" #: doc/classes/ProceduralSky.xml:43 -#, fuzzy msgid "Distance from sun where it goes from solid to starting to fade." -msgstr "è·ç¦»å¤ªé˜³ä¸å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚" +msgstr "太阳从å‡å›ºåˆ°å¼€å§‹è¤ªè‰²çš„è·ç¦»ã€‚" #: doc/classes/ProceduralSky.xml:46 msgid "The sun's color." msgstr "太阳的颜色。" #: doc/classes/ProceduralSky.xml:49 -#, fuzzy msgid "" "How quickly the sun fades away between [member sun_angle_min] and [member " "sun_angle_max]." -msgstr "太阳在太阳圆盘边缘和 [member sun_angle_max]之间消失的速度有多快。" +msgstr "" +"在 [member sun_angle_min] å’Œ [member sun_angle_max] 之间,太阳消é€çš„速度。" #: doc/classes/ProceduralSky.xml:52 -#, fuzzy msgid "Amount of energy contribution from the sun." -msgstr "æ¥è‡ªå¤©ç©ºçš„能é‡è´¡çŒ®é‡ã€‚" +msgstr "æ¥è‡ªå¤ªé˜³çš„能é‡è´¡çŒ®é‡ã€‚" #: doc/classes/ProceduralSky.xml:55 msgid "The sun's height using polar coordinates." msgstr "用æžåæ ‡è®¡ç®—å¤ªé˜³çš„é«˜åº¦ã€‚" #: doc/classes/ProceduralSky.xml:58 -#, fuzzy msgid "The direction of the sun using polar coordinates." -msgstr "ç¢°æ’žç‚¹ï¼Œä»¥å…¨å±€åæ ‡è¡¨ç¤ºã€‚" +msgstr "用æžåæ ‡è¡¨ç¤ºå¤ªé˜³çš„æ–¹å‘。" #: doc/classes/ProceduralSky.xml:61 msgid "" "Size of [Texture] that the ProceduralSky will generate. The size is set " "using [enum TextureSize]." msgstr "" +"ProceduralSky将生æˆçš„[Texture]的大å°ã€‚è¯¥å¤§å°æ˜¯ç”¨[enum TextureSize]æ¥è®¾ç½®çš„。" #: doc/classes/ProceduralSky.xml:66 msgid "Sky texture will be 256x128." @@ -53645,7 +54134,6 @@ msgid "Contains global variables accessible from everywhere." msgstr "包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚" #: doc/classes/ProjectSettings.xml:7 -#, fuzzy msgid "" "Contains global variables accessible from everywhere. Use [method " "get_setting], [method set_setting] or [method has_setting] to access them. " @@ -53669,16 +54157,22 @@ msgid "" "[i]also[/i] override the setting with the desired feature tags if you want " "them to override base project settings on all platforms and configurations." msgstr "" -"包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting],[method " +"包å«å¯ä»¥ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting]ã€[method " "set_setting]或[method has_setting]æ¥è®¿é—®å®ƒä»¬ã€‚å˜å‚¨åœ¨[code]project.godot[/" -"code]ä¸çš„å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettingsä¸ï¼Œè¿™ä½¿å¾—这个对象对于读å–自定义游æˆé…" -"置选项éžå¸¸æœ‰ç”¨ã€‚\n" -"命å项目设置属性时,请使用包å«ç±»åˆ«çš„设置的完整路径。例如,项目åç§°çš„ " -"[code]\"application/config/name\"[/code]。类别和属性åç§°å¯ä»¥åœ¨â€œé¡¹ç›®è®¾ç½®â€å¯¹è¯" -"æ¡†ä¸æŸ¥çœ‹ã€‚\n" -"[b]覆盖:[/b]é€šè¿‡åœ¨é¡¹ç›®çš„æ ¹ç›®å½•ä¸åˆ›å»ºå为[code]override.cfg[/code]的文件,å¯ä»¥" -"覆盖任何项目设置。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目ä¸ä½¿ç”¨ï¼Œæ–¹æ³•是将该文件与项目二进制文件" -"放在åŒä¸€ä¸ªç›®å½•ä¸ã€‚" +"code]ä¸çš„å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettingsä¸ï¼Œä½¿å¾—这个对象对于读å–自定义游æˆé…ç½®" +"选项时éžå¸¸æœ‰ç”¨ã€‚\n" +"当命å一个项目设置属性时,使用设置的完整路径,包括类别。例如," +"[code]\"application/config/name\"[/code]为项目å称。类别和属性åç§°å¯ä»¥åœ¨é¡¹ç›®" +"è®¾ç½®å¯¹è¯æ¡†ä¸æŸ¥çœ‹ã€‚\n" +"[b]ç‰¹æ€§æ ‡ç¾ï¼š[/b] å¯ä»¥ä½¿ç”¨[url=https://docs.godotengine.org/zh_CN/latest/" +"tutorials/export/feature_tags.html]ç‰¹æ€§æ ‡ç¾[/url]为特定的平å°å’Œé…置(调试ã€å‘" +"布...)覆盖项目设置。\n" +"[b]覆盖:[/b] 任何项目设置都å¯ä»¥é€šè¿‡åœ¨é¡¹ç›®çš„æ ¹ç›®å½•下创建一个å为 " +"[code]override.cfg[/code] 的文件æ¥è¦†ç›–。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目ä¸ä½¿ç”¨ï¼ŒæŠŠè¿™ä¸ªæ–‡" +"件放在与项目二进制文件相åŒçš„目录下。覆盖ä»ä¼šè€ƒè™‘基本项目设置[url=https://" +"docs.godotengine.org/zh_CN/latest/tutorials/export/feature_tags.html]åŠŸèƒ½æ ‡ç¾" +"[/url]ã€‚å› æ¤ï¼Œå¦‚æžœä½ æƒ³è®©å®ƒä»¬åœ¨æ‰€æœ‰å¹³å°å’Œé…置上覆盖基本项目设置,请确ä¿[i]也[/" +"i]ç”¨æ‰€éœ€çš„ç‰¹æ€§æ ‡ç¾è¦†ç›–该设置。" #: doc/classes/ProjectSettings.xml:22 msgid "" @@ -53772,13 +54266,33 @@ msgid "" " path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n" "[/codeblock]" msgstr "" +"返回与本地化 [code]path[/code](以 [code]res://[/code] 或 [code]user://[/" +"code] 开头)相对应的ç»å¯¹åŽŸç”Ÿ OS è·¯å¾„ã€‚è¿”å›žçš„è·¯å¾„å°†å› æ“作系统和用户首选项而" +"异。请å‚阅 [url=https://docs.godotengine.org/zh_CN/stable/tutorials/io/" +"data_paths.html]Godot 项目ä¸çš„æ–‡ä»¶è·¯å¾„[/url] 以查看这些路径转æ¢ä¸ºä»€ä¹ˆã€‚å¦è§" +"[method localize_path]。\n" +"[b]注æ„:[/b] [method globalize_path] with [code]res://[/code] 在导出的项目ä¸" +"ä¸èµ·ä½œç”¨ã€‚相å,当从导出的项目è¿è¡Œæ—¶ï¼Œå°†å¯æ‰§è¡Œæ–‡ä»¶çš„åŸºç›®å½•æ·»åŠ åˆ°è·¯å¾„ä¸ï¼š\n" +"[codeblock]\n" +"var path = \"\"\n" +"if OS.has_feature(\"editor\"):\n" +" # 从编辑器二进制文件è¿è¡Œã€‚\n" +" # `path` 将包å«ä½äºŽé¡¹ç›®æ ¹ç›®å½•ä¸çš„ `hello.txt` çš„ç»å¯¹è·¯å¾„。\n" +" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n" +"else:\n" +" # 从导出的项目è¿è¡Œã€‚\n" +" # `path` 将包å«å¯æ‰§è¡Œæ–‡ä»¶æ—边的 `hello.txt` çš„ç»å¯¹è·¯å¾„。\n" +" # 这与使用 `ProjectSettings.globalize_path()` å’Œ `res://` 路径*ä¸*相" +"åŒï¼Œ\n" +" # 但在目的上足够接近。\n" +" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n" +"[/codeblock]" #: doc/classes/ProjectSettings.xml:91 msgid "Returns [code]true[/code] if a configuration value is present." msgstr "如果å˜åœ¨é…置值,则返回[code]true[/code]。" #: doc/classes/ProjectSettings.xml:100 -#, fuzzy msgid "" "Loads the contents of the .pck or .zip file specified by [code]pack[/code] " "into the resource filesystem ([code]res://[/code]). Returns [code]true[/" @@ -53791,11 +54305,13 @@ msgid "" "specify the offset in bytes to the start of the resource pack. This is only " "supported for .pck files." msgstr "" -"将由[code]pack[/code]指定的*.pck或*.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿ" -"([code]res://[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n" -"[b]注æ„:[/b] 如果[code]pack[/code]ä¸çš„æ–‡ä»¶ä¸Žèµ„æºæ–‡ä»¶ç³»ç»Ÿä¸å·²ç»å˜åœ¨çš„æ–‡ä»¶æœ‰ç›¸" -"åŒçš„è·¯å¾„ï¼Œä»»ä½•è¯•å›¾åŠ è½½è¯¥æ–‡ä»¶çš„å°è¯•将使用[code]pack[/code]ä¸çš„æ–‡ä»¶ï¼Œé™¤éž" -"[code]replace_files[/code]被设置为[code]false[/code]。" +"å°†[code]pack[/code]指定的.pck或.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿï¼ˆ[code]res://" +"[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n" +"[b]注æ„:[/b] 如果[code]pack[/code]ä¸çš„æ–‡ä»¶ä¸Žå·²ç»åœ¨èµ„æºæ–‡ä»¶ç³»ç»Ÿä¸çš„æ–‡ä»¶è·¯å¾„相" +"åŒï¼Œå°è¯•åŠ è½½è¯¥æ–‡ä»¶æ—¶ï¼Œå°†ä½¿ç”¨[code]pack[/code]ä¸çš„æ–‡ä»¶ï¼Œé™¤éž" +"[code]replace_files[/code] 被设置为[code]false[/code]。\n" +"[b]注æ„:[/b] å¯é€‰çš„[code]offset[/code]傿•°ï¼Œå¯ä»¥ç”¨æ¥æŒ‡å®šèµ„æºåŒ…开始的å—节åç§»" +"é‡ã€‚è¿™åªæ”¯æŒ.pck文件。" #: doc/classes/ProjectSettings.xml:109 msgid "" @@ -53803,6 +54319,8 @@ msgid "" "to the absolute, native OS [code]path[/code]. See also [method " "globalize_path]." msgstr "" +"返回对应于ç»å¯¹åŽŸç”Ÿ OS [code]path[/code] 的本地化路径(以 [code]res://[/code] " +"开头)。å¦è§[method globalize_path]。" #: doc/classes/ProjectSettings.xml:116 msgid "" @@ -53825,9 +54343,12 @@ msgid "" "want to change project settings in exported projects, use [method " "save_custom] to save [code]override.cfg[/code] file." msgstr "" +"å°†é…ç½®ä¿å˜åˆ° [code]project.godot[/code] 文件ä¸ã€‚\n" +"[b]注æ„:[/b]æ¤æ–¹æ³•是为编辑器æ’ä»¶ä½¿ç”¨çš„ï¼Œå› ä¸ºä¿®æ”¹åŽçš„[ProjectSettings]æ— æ³•åœ¨" +"è¿è¡Œçš„应用程åºä¸åŠ è½½å›žæ¥ã€‚å¦‚æžœè¦æ›´æ”¹å¯¼å‡ºé¡¹ç›®ä¸çš„项目设置,请使用 [method " +"save_custom] ä¿å˜ [code]override.cfg[/code] 文件。" #: doc/classes/ProjectSettings.xml:137 -#, fuzzy msgid "" "Saves the configuration to a custom file. The file extension must be [code]." "godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/" @@ -53835,8 +54356,10 @@ msgid "" "code] file, which is also text, but can be used in exported projects unlike " "other formats." msgstr "" -"å°†é…ç½®ä¿å˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ä¸ã€‚文件扩展å必须是[code].godot[/code](以基于文本的" -"[ConfigFile]æ ¼å¼ä¿å˜)或[code].binary[/code](ä»¥äºŒè¿›åˆ¶æ ¼å¼ä¿å˜)。" +"å°†é…ç½®ä¿å˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ã€‚文件扩展å必须是[code].godot[/code](以基于文本的" +"[ConfigFile]æ ¼å¼ä¿å˜ï¼‰æˆ–[code].binary[/code]ï¼ˆä»¥äºŒè¿›åˆ¶æ ¼å¼ä¿å˜ï¼‰ã€‚ä½ ä¹Ÿå¯ä»¥ä¿" +"å˜ä¸º[code]override.cfg[/code]æ–‡ä»¶ï¼Œå®ƒä¹Ÿæ˜¯æ–‡æœ¬ï¼Œä½†ä¸Žå…¶ä»–æ ¼å¼ä¸åŒï¼Œå¯ä»¥åœ¨å¯¼å‡ºçš„" +"项目ä¸ä½¿ç”¨ã€‚" #: doc/classes/ProjectSettings.xml:145 msgid "" @@ -53876,6 +54399,13 @@ msgid "" "export preset under [code]Plugins[/code] section. The singleton to access in " "code was also renamed to [code]GodotPayment[/code]." msgstr "" +"逗å·åˆ†éš”的自定义 Android 模å—列表(必须已在 Android 导出模æ¿ä¸æž„建)使用其 " +"Java 包路径,例如[code]\"org/godotengine/godot/MyCustomSingleton,com/example/" +"foo/FrenchFriesFactory\"[/code]。\n" +"[b]注æ„:[/b] 自 Godot 3.2.2 起,[code]org/godotengine/godot/GodotPaymentV3[/" +"code] 模å—被弃用,å–而代之的是 [code]GodotPayment[/code] æ’件,该æ’件应在 " +"Android ä¸å¯ç”¨åœ¨ [code]Plugins[/code] 部分下导出预设。在代ç ä¸è®¿é—®çš„å•例也被" +"é‡å‘½å为 [code]GodotPayment[/code]。" #: doc/classes/ProjectSettings.xml:175 msgid "Background color for the boot splash." @@ -53935,13 +54465,12 @@ msgid "" msgstr "ç”¨äºŽé¡¹ç›®çš„å›¾æ ‡ï¼Œåœ¨é¡¹ç›®åŠ è½½æ—¶è®¾ç½®ã€‚å¯¼å‡ºæ—¶ä¹Ÿå°†å°½å¯èƒ½ä½¿ç”¨æ¤å›¾æ ‡ã€‚" #: doc/classes/ProjectSettings.xml:197 -#, fuzzy msgid "" "Icon set in [code].icns[/code] format used on macOS to set the game's icon. " "This is done automatically on start by calling [method OS.set_native_icon]." msgstr "" -"设置[code].icns[/code]æ ¼å¼å›¾æ ‡ï¼Œç”¨äºŽåœ¨macOS上设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡è°ƒ" -"用[method DisplayServer.set_native_icon]自动完æˆçš„。" +"在macOS上使用的[code].icns[/code]æ ¼å¼çš„å›¾æ ‡é›†ï¼Œç”¨äºŽè®¾ç½®æ¸¸æˆçš„å›¾æ ‡ã€‚è¿™åœ¨å¯åŠ¨æ—¶" +"通过调用[method OS.set_native_icon]自动完æˆã€‚" #: doc/classes/ProjectSettings.xml:200 msgid "" @@ -53957,9 +54486,15 @@ msgid "" "tutorials/io/data_paths.html]Data paths[/url] in the documentation for more " "information." msgstr "" +"项目å称。它由项目ç»ç†å’Œå‡ºå£å•†ä½¿ç”¨ã€‚å¯ä»¥é€šè¿‡ç¿»è¯‘本地化文件ä¸çš„值æ¥ç¿»è¯‘项目å" +"ç§°ã€‚çª—å£æ ‡é¢˜å°†è®¾ç½®ä¸ºåœ¨å¯åŠ¨æ—¶è‡ªåŠ¨åŒ¹é…项目å称。\n" +"[b]注æ„:[/b] 如果 [member application/config/use_custom_user_dir] 为 " +"[code]false[/code],更改æ¤å€¼ä¹Ÿä¼šæ›´æ”¹ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹çš„路径。é‡å‘½å项目åŽï¼Œæ‚¨å°†" +"æ— æ³•å†è®¿é—® [code]user://[/code] ä¸çš„现有数æ®ï¼Œé™¤éžæ‚¨é‡å‘½åæ—§æ–‡ä»¶å¤¹ä»¥åŒ¹é…æ–°é¡¹" +"ç›®å称。有关更多信æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://docs.godotengine.org/zh_CN/" +"stable/tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]。" #: doc/classes/ProjectSettings.xml:204 -#, fuzzy msgid "" "Specifies a file to override project settings. For example: [code]user://" "custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] " @@ -53967,9 +54502,10 @@ msgid "" "[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/" "code] will still be read to override the project settings." msgstr "" -"æŒ‡å®šè¦æ›¿ä»£é¡¹ç›®è®¾ç½®çš„æ–‡ä»¶ã€‚例如:[code]user://custom_settings.cfg[/code]。\n" -"[b] 注æ„:[/b]æ— è®ºæ¤è®¾ç½®çš„值是多少,[code]res://override.cfg[/code]ä»å°†è¢«è¯»å–" -"以覆盖项目设置(请å‚阅顶部的æ¤ç±»è¯´æ˜Žï¼‰ã€‚" +"指定一个文件æ¥è¦†ç›–项目设置。比如说。[code]user://custom_settings.cfg[/code]。" +"å‚è§[ProjectSettings]顶部类æè¿°ä¸çš„ \"Overriding\" ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n" +"[b]注æ„:[/b]ä¸ç®¡è¿™ä¸ªè®¾ç½®çš„值如何,[code]res://override.cfg[/code]ä»ç„¶ä¼šè¢«è¯»" +"å–æ¥è¦†ç›–项目设置。" #: doc/classes/ProjectSettings.xml:208 msgid "" @@ -54000,15 +54536,21 @@ msgid "" "default can impact compatibility with some external tools or plugins which " "expect the default [code].import[/code] folder." msgstr "" +"如果 [code]true[/code],项目将使用一个éšè—目录([code].import[/code])æ¥å˜å‚¨" +"项目特定的数æ®ï¼ˆå…ƒæ•°æ®ã€ç€è‰²å™¨ç¼“å˜ç‰ï¼‰ã€‚\n" +"如果 [code]false[/code],将使用éžéšè—目录 ([code]import[/code])。\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®åŽé‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºã€‚\n" +"[b]注æ„:[/b] 更改æ¤å€¼æœ‰åŠ©äºŽåœ¨å¹³å°ä¸Šæˆ–使用ä¸å…许éšè—目录模å¼çš„第三方工具。仅" +"å½“æ‚¨çŸ¥é“æ‚¨çš„çŽ¯å¢ƒéœ€è¦æ—¶æ‰ä¿®æ”¹æ¤è®¾ç½®ï¼Œå› 为更改默认设置会影å“与æŸäº›éœ€è¦é»˜è®¤ " +"[code].import[/code] 文件夹的外部工具或æ’件的兼容性。" #: doc/classes/ProjectSettings.xml:217 -#, fuzzy msgid "" "Icon set in [code].ico[/code] format used on Windows to set the game's icon. " "This is done automatically on start by calling [method OS.set_native_icon]." msgstr "" -"设置[code].ico[/code]æ ¼å¼å›¾æ ‡ï¼Œåœ¨Windows上用于设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡" -"调用[method DisplayServer.set_native_icon]自动完æˆçš„。" +"以[code].ico[/code]æ ¼å¼è®¾ç½®çš„å›¾æ ‡ï¼Œåœ¨Windows上用于设置游æˆçš„å›¾æ ‡ã€‚è¿™åœ¨å¯åŠ¨æ—¶" +"通过调用[method OS.set_native_icon]自动完æˆã€‚" #: doc/classes/ProjectSettings.xml:220 msgid "" @@ -54023,6 +54565,13 @@ msgid "" "initially activated. It will only be active on machines where performance is " "adequate to render frames at the refresh rate." msgstr "" +"帧增é‡çš„æ—¶é—´æ ·æœ¬ä¼šå—到平å°å¼•å…¥çš„éšæœºå˜åŒ–的影å“,å³ä½¿ç”±äºŽ V-Sync 以固定间隔显" +"示帧也是如æ¤ã€‚这会导致抖动。通过过滤输入增é‡ä»¥æ ¡æ£åˆ·æ–°çŽ‡çš„å¾®å°æ³¢åŠ¨ï¼Œå¢žé‡å¹³æ»‘" +"通常å¯ä»¥æä¾›æ›´å¥½çš„结果。\n" +"[b]注æ„:[/b] Delta 平滑仅在 [member display/window/vsync/use_vsync] 开坿—¶å°" +"è¯•ï¼Œå› ä¸ºå®ƒåœ¨æ²¡æœ‰ V-Sync çš„æƒ…å†µä¸‹æ— æ³•æ£å¸¸å·¥ä½œã€‚\n" +"åœ¨æœ€åˆæ¿€æ´»å¹³æ»‘之å‰ï¼Œä»¥ç¨³å®šçš„帧速率å¯èƒ½éœ€è¦å‡ 秒钟的时间。它åªä¼šåœ¨æ€§èƒ½è¶³ä»¥ä»¥åˆ·" +"新率渲染帧的机器上激活。" #: doc/classes/ProjectSettings.xml:225 msgid "" @@ -54030,6 +54579,8 @@ msgid "" "just after the drawing has taken place. This may lead to more consistent " "deltas and a reduction in frame stutters." msgstr "" +"[b]实验性的。[/b] å°†æ¯ä¸€å¸§çš„delta时间的测é‡è½¬ç§»åˆ°ç»˜å›¾å‘生之åŽã€‚è¿™å¯èƒ½ä¼šå¯¼è‡´æ›´" +"一致的延迟和å‡å°‘帧的åœé¡¿ã€‚" #: doc/classes/ProjectSettings.xml:228 msgid "" @@ -54039,6 +54590,10 @@ msgid "" "application/run/disable_stdout].\n" "Changes to this setting will only be applied upon restarting the application." msgstr "" +"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†é”™è¯¯ã€‚如果 [code]true[/code],这也会" +"éšè—ç”± [method @GDScript.push_error] å’Œ [method @GDScript.push_warning] 打å°" +"的错误和è¦å‘Šæ¶ˆæ¯ã€‚å¦è§[member application/run/disable_stdout]。\n" +"对æ¤è®¾ç½®çš„æ›´æ”¹åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。" #: doc/classes/ProjectSettings.xml:232 msgid "" @@ -54047,6 +54602,10 @@ msgid "" "command line argument. See also [member application/run/disable_stderr].\n" "Changes to this setting will only be applied upon restarting the application." msgstr "" +"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†è¾“出。这相当于使用 [code]--quiet[/" +"code] å‘½ä»¤è¡Œå‚æ•°å¯åŠ¨ç¼–è¾‘å™¨æˆ–é¡¹ç›®ã€‚å¦è§[member application/run/" +"disable_stderr]。\n" +"对æ¤è®¾ç½®çš„æ›´æ”¹åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。" #: doc/classes/ProjectSettings.xml:236 msgid "" @@ -54063,6 +54622,15 @@ msgid "" "([code]stderr[/code]) is always flushed when a line is printed to it.\n" "Changes to this setting will only be applied upon restarting the application." msgstr "" +"如果 [code]true[/code]ï¼Œåˆ™æ¯æ¬¡æ‰“å°ä¸€è¡Œæ—¶åˆ·æ–°æ ‡å‡†è¾“出æµã€‚这会影å“终端日志记录" +"和文件日志记录。\n" +"è¿è¡Œé¡¹ç›®æ—¶ï¼Œå¦‚果希望由 systemd/journalctl ç‰æœåŠ¡ç®¡ç†å™¨æ”¶é›†æ—¥å¿—,则必须å¯ç”¨æ¤" +"设置。默认情况下,在å‘布版本ä¸ç¦ç”¨æ¤è®¾ç½®ï¼Œå› ä¸ºå¦‚æžœå¿«é€Ÿè¿žç»æ‰“å°å¤§é‡è¡Œï¼Œåˆ™åœ¨æ¯" +"个打å°è¡Œä¸Šåˆ·æ–°éƒ½ä¼šå¯¹æ€§èƒ½äº§ç”Ÿè´Ÿé¢å½±å“。æ¤å¤–,如果å¯ç”¨æ¤è®¾ç½®ï¼Œå¦‚果应用程åºå´©æºƒ" +"或以其他方å¼è¢«ç”¨æˆ·æ€æ»ï¼ˆä¸ä¼šâ€œæ£å¸¸â€å…³é—),则ä»ä¼šæˆåŠŸå†™å…¥æ—¥å¿—æ–‡ä»¶ã€‚\n" +"[b]注æ„:[/b] æ— è®ºæ¤è®¾ç½®å¦‚ä½•ï¼Œæ ‡å‡†é”™è¯¯æµ ([code]stderr[/code]) 在打å°ä¸€è¡Œæ—¶æ€»" +"是被刷新。\n" +"对æ¤è®¾ç½®çš„æ›´æ”¹åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。" #: doc/classes/ProjectSettings.xml:242 msgid "" @@ -54070,6 +54638,9 @@ msgid "" "performance is less important during debugging.\n" "Changes to this setting will only be applied upon restarting the application." msgstr "" +"调试构建覆盖[member application/run/flush_stdout_on_print]ï¼Œå› ä¸ºåœ¨è°ƒè¯•è¿‡ç¨‹ä¸" +"性能ä¸é‚£ä¹ˆé‡è¦ã€‚\n" +"ä»…åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用æ¤è®¾ç½®çš„æ›´æ”¹ã€‚" #: doc/classes/ProjectSettings.xml:246 msgid "" @@ -54151,14 +54722,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -"音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPUä½¿ç”¨çŽ‡å¢žåŠ ã€‚è¾ƒ" -"低的值å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„å£°éŸ³ç ´è£‚ã€‚" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." @@ -54166,14 +54741,14 @@ msgstr "" "在网络平å°ä¸æ›´å®‰å…¨åœ°è¦†ç›– [member audio/output_latency],以é¿å…音频问题,尤其" "是在移动设备上。" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" "æ’æ”¾è§†é¢‘时设置为硬编ç 音频延迟。除éžä½ 知é“自己在åšä»€ä¹ˆï¼Œå¦åˆ™æœ€å¥½ä¸è¦åŠ¨å®ƒã€‚" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -54186,7 +54761,7 @@ msgstr "" "ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级" "别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -54199,7 +54774,7 @@ msgstr "" "ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级" "别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -54208,7 +54783,7 @@ msgstr "" "Zstandard的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导" "致文件å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." @@ -54216,7 +54791,7 @@ msgstr "" "在Zstandardä¸å¯ç”¨ [url=https://github.com/facebook/zstd/releases/tag/" "v1.3.2]long-distance matching[/url] 。" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " @@ -54225,7 +54800,7 @@ msgstr "" "使用与Zstandard的长è·ç¦»åŒ¹é…进行压缩时,å…许的最大大å°é™åˆ¶(2的幂)。更高的值å¯" "ä»¥äº§ç”Ÿæ›´å¥½çš„åŽ‹ç¼©ï¼Œä½†æ˜¯åœ¨åŽ‹ç¼©å’Œè§£åŽ‹ç¼©æ—¶éœ€è¦æ›´å¤šçš„内å˜ã€‚" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -54236,19 +54811,19 @@ msgstr "" "ä¸ªè®¾ç½®æ˜¯ä¸ºäº†åœ¨ç§»æ¤æ—§é¡¹ç›®(戈多2)æ—¶ä½¿ç”¨ï¼Œå› ä¸ºä½¿ç”¨æˆå‘˜å˜é‡æ˜¯ä»Žæˆˆå¤š3开始的首选风" "æ ¼ã€‚" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "如果[code]true[/code],则当常é‡ç”¨ä½œå‡½æ•°æ—¶ä¼šå‘出è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" "如果[code]true[/code],当使用已废弃的关键å—如[code]slave[/code]时,å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " @@ -54257,7 +54832,7 @@ msgstr "" "如果[code]true[/code],则å¯ç”¨ç‰¹å®šçš„GDScriptè¦å‘Š(请å‚阅[code]debug/gdscript/" "warnings/*[/code]设置)。如果[code]为false[/code],则ç¦ç”¨æ‰€æœ‰GDScriptè¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." @@ -54265,13 +54840,13 @@ msgstr "" "如果[code]true[/code],则[code]res://addons[/code]文件夹ä¸çš„脚本ä¸ä¼šç”Ÿæˆè¦" "告。" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "如果为[code]true[/code],当函数被声明为与常é‡åŒå时,å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " @@ -54280,7 +54855,7 @@ msgstr "" "如果为[code]true[/code], 当一个函数与一个å˜é‡åŒå声明时,å¯ç”¨è¦å‘Šã€‚在未æ¥çš„版" "本ä¸ï¼Œå½“GDScript支æŒç¬¬ä¸€ç±»å‡½æ•°æ—¶ï¼Œè¿™å°†å˜æˆä¸€ä¸ªé”™è¯¯ã€‚" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." @@ -54288,20 +54863,20 @@ msgstr "" "如果[code]为true[/code],则当分é…ç»™å˜é‡çš„函数å¯èƒ½äº§ç”Ÿå¹¶è¿”回函数状æ€è€Œä¸æ˜¯å€¼" "时,å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "如果[code]true[/code],则在使用函数时å¯ç”¨è¦å‘Šï¼Œå°±åƒå®ƒæ˜¯å±žæ€§ä¸€æ ·ã€‚" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" "如果[code]true[/code],则当三元è¿ç®—符å¯èƒ½å‘出类型ä¸å…¼å®¹çš„值时,将å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." @@ -54309,7 +54884,7 @@ msgstr "" "如果[code]为true[/code],则在用一个整数除以å¦ä¸€ä¸ªæ•´æ•°æ—¶å¯ç”¨è¦å‘Š(å°æ•°éƒ¨åˆ†å°†è¢«" "丢弃)。" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " @@ -54318,13 +54893,13 @@ msgstr "" "如果[code]为true[/code]ï¼Œåˆ™åœ¨å°†æµ®ç‚¹å€¼ä¼ é€’ç»™éœ€è¦æ•´æ•°çš„函数时å¯ç”¨è¦å‘Š(它将被转" "æ¢å¹¶å¤±åŽ»ç²¾åº¦)。" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "如果[code]true[/code],则在将属性当作函数使用时å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -54335,7 +54910,7 @@ msgstr "" "傿•°)调用函数时å¯ç”¨è¦å‘Šã€‚è¿™æ ·çš„è¿”å›žå€¼æœ‰æ—¶ä½¿ç”¨[enum Error] 枚举æ¥è¡¨ç¤ºå¯èƒ½çš„é”™" "误。" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " @@ -54344,7 +54919,7 @@ msgstr "" "如果[code]true[/code],则在定义局部或åç±»æˆå‘˜å˜é‡æ—¶å¯ç”¨è¦å‘Šï¼Œè¯¥å±€éƒ¨æˆ–åç±»æˆå‘˜" "å˜é‡å°†åœ¨ä¸Šå±‚阴影å˜é‡(如æˆå‘˜å˜é‡)。" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " @@ -54353,7 +54928,7 @@ msgstr "" "如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è¦å‘Šï¼Œä¾‹å¦‚å°†" "[code]2 + 2[/code]写æˆè¯å¥ã€‚" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " @@ -54362,18 +54937,18 @@ msgstr "" "如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„ä¸‰å…ƒè¡¨è¾¾å¼æ—¶å¯ç”¨è¦å‘Šï¼Œä¾‹å¦‚" "å°†[code]42(如果激活else 0[/code])写入è¯å¥ã€‚" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "如果[code]true[/code],所有è¦å‘Šå°†è¢«æŠ¥å‘Šä¸ºé”™è¯¯ã€‚" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä½¿ç”¨ä»¥å‰æ²¡æœ‰èµ‹å€¼çš„å˜é‡æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " @@ -54382,7 +54957,7 @@ msgstr "" "如果[code]true[/code],则在使用赋值æ“作符[code]+=[/code](如果å˜é‡ä¹‹å‰æ²¡æœ‰èµ‹" "值)为å˜é‡èµ‹å€¼æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." @@ -54390,7 +54965,7 @@ msgstr "" "如果[code]true[/code],则在检测到ä¸å¯è¾¾çš„ä»£ç æ—¶å¯ç”¨è¦å‘Š(例如在始终执行的" "[code]return[/code]è¯å¥ä¹‹åŽ)。" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." @@ -54398,52 +54973,52 @@ msgstr "" "如果[code]true[/code],则在使用类型å¯èƒ½ä¸ŽæœŸæœ›çš„å‡½æ•°å‚æ•°ä¸å…¼å®¹çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è¦" "告。" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "如果[code]true[/code],则在执行ä¸å®‰å…¨çš„å¼ºåˆ¶è½¬æ¢æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" "如果[code]true[/code],则在调用类ä¸ä¸èƒ½ä¿è¯åœ¨ç¼–译时å˜åœ¨çš„æ–¹æ³•æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" "如果[code]true[/code],则在访问类ä¸ä¸èƒ½ä¿è¯åœ¨ç¼–译时å˜åœ¨çš„属性时å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:378 -#, fuzzy +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." -msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è¦å‘Šã€‚" +msgstr "如果[code]true[/code]ï¼Œå½“ä¸€ä¸ªå‡½æ•°å‚æ•°æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:381 -#, fuzzy +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." -msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è¦å‘Šã€‚" +msgstr "如果[code]true[/code],当一个æˆå‘˜å˜é‡æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" +"如果 [code]true[/code],则在声明与函数åŒåçš„å˜é‡æ—¶å¯ç”¨è¦å‘Šã€‚当 GDScript 支æŒ" +"一æµå‡½æ•°æ—¶ï¼Œè¿™å°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸å˜æˆé”™è¯¯ã€‚" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." @@ -54451,12 +55026,11 @@ msgstr "" "如果[code]true[/code],则在将返回[code]void[/code]的函数的结果赋值给å˜é‡æ—¶å¯" "用è¦å‘Šã€‚" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "å½“å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨å›žæº¯ä¹‹å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚" -#: doc/classes/ProjectSettings.xml:399 -#, fuzzy +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -54466,25 +55040,25 @@ msgid "" "VSync, e.g. to perform non-real-time rendering of static frames, or test the " "project under lag conditions." msgstr "" -"æ¯ç§’å…è®¸çš„æœ€å¤§å¸§æ•°ã€‚å¦‚æžœæ¸¸æˆæ˜¯å¡é¡¿çš„,æ¯ç§’的实际帧数å¯èƒ½ä»ç„¶ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n" -"如果[member display/window/vsync/use_vsync]被å¯ç”¨ï¼Œå®ƒå°†ä¼˜å…ˆä¸”强制帧数ä¸èƒ½è¶…过" -"监视器的刷新率。\n" -"å› æ¤ï¼Œè¿™ä¸ªè®¾ç½®ä¸»è¦ç”¨äºŽå°†æœ€å¤§FPSé™ä½Žåˆ°åž‚ç›´åŒæ¥ä»¥ä¸‹ï¼Œä¾‹å¦‚æ‰§è¡Œé™æ€å¸§çš„éžå®žæ—¶æ¸²" -"染,或在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。" +"å…许的æ¯ç§’最大帧数。如果游æˆå»¶è¿Ÿï¼Œå®žé™…çš„æ¯ç§’帧数å¯èƒ½ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n" +"如果å¯ç”¨[member display/window/vsync/use_vsync],这将优先考虑,强制的FPS值ä¸" +"能超过显示器的刷新率。\n" +"å› æ¤ï¼Œè¿™ä¸ªè®¾ç½®ä¸»è¦æ˜¯é™ä½Žä½ŽäºŽVSync的最大FPSï¼Œä¾‹å¦‚ï¼Œå¯¹é™æ€å¸§è¿›è¡Œéžå®žæ—¶æ¸²æŸ“,或" +"者在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "调试GDScriptæ—¶å…è®¸çš„æœ€å¤§è°ƒç”¨å †æ ˆã€‚" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "åˆ†æžæ—¶æ¯ä¸ªå¸§å…许的最大函数数é‡ã€‚" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "æ¯ç§’钟打å°å¸§åˆ°æ ‡å‡†è¾“出。" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " @@ -54493,70 +55067,70 @@ msgstr "" "è¿è¡Œæ—¶æ‰“å°æ›´å¤šä¿¡æ¯åˆ°æ ‡å‡†è¾“å‡ºã€‚å®ƒæ˜¾ç¤ºè¯¸å¦‚å†…å˜æ³„æ¼ã€å“ªäº›åœºæ™¯å’Œèµ„æºæ£åœ¨åŠ è½½ç‰ä¿¡" "æ¯ã€‚" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "最大的å¯è§†è„šæœ¬è°ƒç”¨å †æ ˆï¼Œä»¥é¿å…æ— é™é€’归。" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "碰撞形状之间接触点的颜色,在调试èœå•ä¸å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚" -#: doc/classes/ProjectSettings.xml:422 -#, fuzzy +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." -msgstr "碰撞形状的颜色,当在调试èœå•ä¸å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚" +msgstr "" +"设置当调试èœå•ä¸çš„å¯ç”¨ \"å¯è§çš„碰撞形状\" 时,2Dç‰©ç†æ˜¯å¦ä¼šåœ¨æ¸¸æˆä¸æ˜¾ç¤ºç¢°æ’žè½®" +"廓。" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "当在调试èœå•ä¸å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œç¢°æ’žå½¢çŠ¶ä¹‹é—´æ˜¾ç¤ºçš„æœ€å¤§æŽ¥è§¦ç‚¹æ•°ã€‚" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "碰撞形状的颜色,当在调试èœå•ä¸å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "被ç¦ç”¨çš„å¯¼èˆªå‡ ä½•å›¾å½¢çš„é¢œè‰²ï¼Œåœ¨è°ƒè¯•èœå•ä¸å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "å¯¼èˆªå‡ ä½•å›¾å½¢çš„é¢œè‰²ï¼Œåœ¨è°ƒè¯•èœå•ä¸å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "é¼ æ ‡å…‰æ ‡çš„è‡ªå®šä¹‰å›¾åƒ(最大256×256)。" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "è‡ªå®šä¹‰é¼ æ ‡å…‰æ ‡å›¾åƒçš„çƒç‚¹ã€‚" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "工具æç¤ºç›¸å¯¹äºŽé¼ æ ‡å…‰æ ‡çƒç‚¹çš„ä½ç½®åç§»é‡ã€‚" -#: doc/classes/ProjectSettings.xml:446 -#, fuzzy +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -"如果[code]true[/code],å…许在Windowså’ŒmacOS上显示HiDPI。这个设置对桌é¢Linux没" -"有影å“ï¼Œå› ä¸ºdpi感知回退在那里ä¸å—支æŒã€‚" +"如果[code]true[/code],å…许在Windowsã€macOSå’ŒHTML5å¹³å°ä¸Šæ˜¾ç¤ºHiDPI。这个设置对" +"桌é¢Linux没有影å“ï¼Œå› ä¸ºå®ƒä¸æ”¯æŒDPI感知回退。" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." @@ -54564,7 +55138,7 @@ msgstr "" "如果[code]true[/code]ï¼Œåˆ™ä¿æŒå±å¹•打开(å³ä½¿åœ¨ä¸æ´»åŠ¨çš„æƒ…å†µä¸‹)ï¼Œå› æ¤å±å¹•ä¿æŠ¤ç¨‹åº" "ä¸ä¼šæŽ¥ç®¡ã€‚适用于桌é¢å’Œç§»åЍ平å°ã€‚" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -54572,8 +55146,12 @@ msgid "" "you have to set [member display/window/size/width] and [member display/" "window/size/height] accordingly." msgstr "" +"在移动设备上使用的默认å±å¹•æ–¹å‘。\n" +"[b]注æ„:[/b]è®¾ç½®ä¸ºçºµå‘æ—¶ï¼Œæ¤é¡¹ç›®è®¾ç½®ä¸ä¼šè‡ªåŠ¨ç¿»è½¬é¡¹ç›®åˆ†è¾¨çŽ‡çš„å®½åº¦å’Œé«˜åº¦ã€‚ç›¸" +"å,您必须相应地设置 [member display/window/size/width] å’Œ [member display/" +"window/size/height]。" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." @@ -54581,7 +55159,7 @@ msgstr "" "如果[code]true[/code],主指示器将自动éšè—。这åªä¼šå½±å“没有物ç†home键的iOS设" "备。" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -54590,28 +55168,41 @@ msgid "" "[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, " "and Android." msgstr "" +"如果 [code]true[/code],则å…许窗å£èƒŒæ™¯çš„é€åƒç´ 逿˜Žåº¦ã€‚è¿™ä¼šå½±å“æ€§èƒ½ï¼Œå› æ¤é™¤éž" +"需è¦ï¼Œå¦åˆ™å°†å…¶ä¿ç•™ä¸º [code]false[/code]。\n" +"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS." +"window_per_pixel_transparency_enabled]。\n" +"[b]注æ„:[/b] æ¤åŠŸèƒ½åœ¨ HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" "[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, " "and Android." msgstr "" +"å¯åŠ¨æ—¶å°†çª—å£èƒŒæ™¯è®¾ç½®ä¸ºé€æ˜Žã€‚\n" +"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS." +"window_per_pixel_transparency_enabled]。\n" +"[b]注æ„:[/b] æ¤åŠŸèƒ½åœ¨ HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" +"强制主窗å£å§‹ç»ˆåœ¨é¡¶éƒ¨ã€‚\n" +"[b]注æ„:[/b] æ¤è®¾ç½®åœ¨ iOSã€Android å’Œ HTML5 上被忽略。" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" +"å¼ºåˆ¶ä¸»çª—å£æ— 边框。\n" +"[b]注æ„:[/b] æ¤è®¾ç½®åœ¨ iOSã€Android å’Œ HTML5 上被忽略。" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -54624,8 +55215,15 @@ msgid "" "fullscreen mode.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" +"项目å¯åŠ¨æ—¶å°†ä¸»çª—å£è®¾ç½®ä¸ºå…¨å±ã€‚请注æ„ï¼Œè¿™ä¸æ˜¯ [i] 独立 çš„[/i] 免屿˜¾ç¤ºã€‚在 " +"Windows å’Œ Linux ä¸Šï¼Œæ— è¾¹æ¡†çª—å£ç”¨äºŽæ¨¡æ‹Ÿå…¨å±ã€‚在 macOS 上,会创建一个新的桌é¢" +"用于显示æ£åœ¨è¿è¡Œçš„项目。\n" +"æ— è®ºå¹³å°å¦‚何,å¯ç”¨å…¨å±éƒ½ä¼šæ›´æ”¹çª—å£å¤§å°ä»¥åŒ¹é…显示器的大å°ã€‚å› æ¤ï¼Œè¯·ç¡®ä¿æ‚¨çš„项" +"目在å¯ç”¨å…¨å±æ¨¡å¼æ—¶æ”¯æŒ [url=https://docs.godotengine.org/zh_CN/stable/" +"tutorials/rendering/multiple_resolutions.html]多ç§åˆ†è¾¨çއ[/url]。\n" +"[b]注æ„:[/b] 在 iOSã€Android å’Œ HTML5 上忽略æ¤è®¾ç½®ã€‚" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " @@ -54634,26 +55232,27 @@ msgstr "" "设置游æˆçš„主视窗高度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®" "时,也使用æ¤å‚数作为å‚考。" -#: doc/classes/ProjectSettings.xml:485 -#, fuzzy +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." -msgstr "默认情况下å…许窗å£å¯è°ƒæ•´å¤§å°ã€‚" +msgstr "" +"å…许窗å£é»˜è®¤å¯è°ƒæ•´å¤§å°ã€‚\n" +"[b]注æ„:[/b] 这个设置在iOSå’ŒAndroid上将忽略。" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£é«˜åº¦ã€‚用于测试拉伸模å¼ã€‚" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£å®½åº¦ã€‚用于测试拉伸模å¼ã€‚" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " @@ -54662,13 +55261,13 @@ msgstr "" "设置游æˆçš„主视窗宽度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®" "时,也使用æ¤å‚数作为å‚考。" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "指定è¦ä½¿ç”¨çš„å¹³æ¿é©±åŠ¨ç¨‹åºã€‚如果为空,将使用默认驱动程åºã€‚" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -54680,7 +55279,7 @@ msgstr "" "较高的输入延迟和较低的帧率为代价。如果[code]false[/code]ï¼Œåž‚ç›´åŒæ¥å°†è¢«ç¦ç”¨ï¼Œ" "然而,许多平å°ä»å°†æ‰§è¡Œå®ƒ(如手机平å°å’ŒHTML5)。" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -54696,7 +55295,7 @@ msgstr "" "[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使" "ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -54711,18 +55310,26 @@ msgid "" "prime-run %command%\n" "[/codeblock]" msgstr "" +"è¿è¡Œé¡¹ç›®æ—¶é™„åŠ åˆ° Godot è‡ªå·±çš„å‘½ä»¤è¡Œçš„å‘½ä»¤è¡Œå‚æ•°ã€‚è¿™ä¸ä¼šå½±å“编辑器本身。\n" +"å¯ä»¥ä½¿ç”¨ [code]%command%[/code] å ä½ç¬¦ä½¿å¦ä¸€ä¸ªå¯æ‰§è¡Œæ–‡ä»¶è¿è¡Œ Godot。å ä½ç¬¦å°†" +"替æ¢ä¸º Godot 自己的命令行。程åºç‰¹å®šçš„傿•°åº”该放在 [i] å ä½ç¬¦ä¹‹å‰ [/i],而 " +"Godot ç‰¹å®šå‚æ•°åº”该放在 [i] å ä½ç¬¦ä¹‹åŽ [/i]。\n" +"例如,这å¯ç”¨äºŽå¼ºåˆ¶é¡¹ç›®åœ¨ Linux 上的 NVIDIA Optimus 系统ä¸çš„专用 GPU 上è¿" +"行:\n" +"[codeblock]\n" +"prime-run %command%\n" +"[/codeblock]" -#: doc/classes/ProjectSettings.xml:516 -#, fuzzy +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -"æœç´¢ç‰¹å®šäºŽé¡¹ç›®çš„脚本模æ¿è·¯å¾„。脚本模æ¿å°†åœ¨ç‰¹å®šäºŽç¼–辑器的路径和特定于项目的路" -"径ä¸è¿›è¡Œæœç´¢ã€‚" +"对于项目特定的脚本模æ¿çš„æœç´¢è·¯å¾„ã€‚ Godot 将在编辑器的特定路径和æ¤é¡¹ç›®çš„路径ä¸" +"æœç´¢ã€‚" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -54733,7 +55340,7 @@ msgstr "" "[code]tscn[/code]ï¼Œå¦‚æžœä½ ä¹Ÿæƒ³è§£æžä½ çš„åœºæ™¯æ–‡ä»¶ï¼Œç‰¹åˆ«æ˜¯å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯åœ¨åœºæ™¯æ–‡ä»¶" "ä¸åºåˆ—化的内置脚本。" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." @@ -54741,16 +55348,15 @@ msgstr "" "[member ScrollContainer.scroll_deadzone],它将用于所有[ScrollContainer]s,除" "éžé‡å†™ã€‚" -#: doc/classes/ProjectSettings.xml:525 -#, fuzzy +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -"如果[code]为true[/code],则切æ¢Windowså’ŒUWPå¯¹è¯æ¡†ä¸çš„Cancelå’ŒOK按钮,以éµå¾ªç•Œ" -"é¢çº¦å®šã€‚" +"如果[code]true[/code],在Windowså’ŒUWPçš„å¯¹è¯æ¡†ä¸äº¤æ¢ç¡®å®šå’Œå–消按钮,以éµå¾ªç•Œé¢" +"惯例。" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." @@ -54758,31 +55364,31 @@ msgstr "" "用于项目的自定义[Theme]èµ„æºæ–‡ä»¶çš„路径([code]theme[/code]或通用[code]tres[/" "code]/[code]res[/code]扩展å)。" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "自定义[Font]资æºçš„路径,用于项目的所有GUIå…ƒç´ çš„é»˜è®¤å—体。" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "如果[code]true[/code],确ä¿ä½¿ç”¨çš„主题将在HiDPI下工作。" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "在[Tree], [ItemList]ç‰æŽ§ä»¶ä¸ä¸ºå¢žé‡æœç´¢è®¾ç½®è®¡æ—¶å™¨(以毫秒为å•ä½)。" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "检测[TextEdit]空闲的计时器(å•ä½ä¸ºç§’)。" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -54794,7 +55400,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -54805,7 +55411,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -54816,7 +55422,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -54830,7 +55436,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -54843,7 +55449,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -54856,7 +55462,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -54870,7 +55476,7 @@ msgstr "" "[b]注æ„:[/b] 默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬å¯¹äºŽå‡ ä¸ª" "[Control]的内部逻辑是必è¦çš„。然而,分é…给动作的事件å¯ä»¥è¢«ä¿®æ”¹ã€‚" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -54881,7 +55487,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -54895,7 +55501,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -54909,7 +55515,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -54920,7 +55526,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -54932,7 +55538,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -54943,7 +55549,7 @@ msgstr "" "[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„" "内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -54954,465 +55560,446 @@ msgid "" "because they can't run at the target frame rate.\n" "[b]Note:[/b] Currently implemented only in Android." msgstr "" +"如果 [code]true[/code],按键/触摸/æ“纵æ†äº‹ä»¶å°†åœ¨æ¯ä¸ªç©ºé—²å¸§å’Œç‰©ç†å¸§ä¹‹å‰åˆ·" +"新。\n" +"如果 [code]false[/code],æ¤ç±»äº‹ä»¶å°†åœ¨å¼•擎è¿ä»£ä¹‹é—´æ¯ä¸ªç©ºé—²å¸§ä»…刷新一次。\n" +"å¯ç”¨æ¤åŠŸèƒ½å¯ä»¥å¤§å¤§æé«˜å¯¹è¾“入的å“åº”èƒ½åŠ›ï¼Œç‰¹åˆ«æ˜¯åœ¨éœ€è¦æ¯ä¸ªå¯è§ï¼ˆç©ºé—²ï¼‰å¸§è¿è¡Œå¤š" +"个物ç†å¸§çš„设备ä¸ï¼Œå› ä¸ºå®ƒä»¬æ— æ³•ä»¥ç›®æ ‡å¸§é€ŸçŽ‡è¿è¡Œã€‚\n" +"[b]注:[/b] ç›®å‰ä»…在 Android ä¸å®žçŽ°ã€‚" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ç‚¹å‡»æˆ–æ»‘åŠ¨è§¦æ‘¸å±æ—¶å‘é€é¼ æ ‡è¾“å…¥äº‹ä»¶ã€‚" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ç‚¹å‡»æˆ–æ‹–åŠ¨é¼ æ ‡æ—¶å‘é€è§¦æ‘¸è¾“入事件。" -#: doc/classes/ProjectSettings.xml:612 -#, fuzzy +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "2D物ç†å±‚1çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "2D物ç†å±‚10çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "2D物ç†å±‚11çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "2D物ç†å±‚12çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "2D物ç†å±‚13çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "2D物ç†å±‚14çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "2D物ç†å±‚15çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "2D物ç†å±‚16çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "2D物ç†å±‚17çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "2D物ç†å±‚18çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "2D物ç†å±‚19çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "2D物ç†å±‚20çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:654 -#, fuzzy +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D 物ç†å±‚ 21 çš„å¯é€‰åç§° ." -#: doc/classes/ProjectSettings.xml:657 -#, fuzzy +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚22 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:660 -#, fuzzy +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚23çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:663 -#, fuzzy +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚24çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:666 -#, fuzzy +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚25çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:669 -#, fuzzy +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚26çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:672 -#, fuzzy +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚27çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:675 -#, fuzzy +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚28çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:678 -#, fuzzy +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." -msgstr "2D物ç†å±‚2çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚29çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "2D物ç†å±‚3çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:684 -#, fuzzy +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." -msgstr "2D物ç†å±‚3çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚30çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:687 -#, fuzzy +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." -msgstr "2D物ç†å±‚3çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚31çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:690 -#, fuzzy +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." -msgstr "2D物ç†å±‚3çš„å¯é€‰å称。" +msgstr "2D物ç†å±‚32çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "2D物ç†å±‚4çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "2D物ç†å±‚5çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "2D物ç†å±‚6çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "2D物ç†å±‚7çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "2D物ç†å±‚8çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "2D物ç†å±‚9çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "2D物ç†å±‚1çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "2D渲染层10çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "2D渲染层11çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "2D渲染层12çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "2D渲染层13çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "2D渲染层14çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "2D渲染层15çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "2D渲染层16çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "2D渲染层17çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "2D渲染层18çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "2D渲染层19çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "2D 渲染层 2 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "2D 渲染层 20 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "2D 渲染层 3 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "2D 渲染层 4 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "2D 渲染层 5 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "2D 渲染层 6 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "2D 渲染层 7 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "2D 渲染层 8 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "2D 渲染层 9 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "3D物ç†å±‚1 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "3D物ç†å±‚10 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "3D物ç†å±‚11 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "3D物ç†å±‚12 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "3D物ç†å±‚13 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "3D物ç†å±‚14 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "3D物ç†å±‚15 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "3D物ç†å±‚16 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "3D物ç†å±‚17 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "3D物ç†å±‚18 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "3D物ç†å±‚19 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "3D物ç†å±‚20 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:810 -#, fuzzy +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚ 21 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:813 -#, fuzzy +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚22 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:816 -#, fuzzy +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚23 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:819 -#, fuzzy +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚24 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:822 -#, fuzzy +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚ 25 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:825 -#, fuzzy +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚26 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:828 -#, fuzzy +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚27 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:831 -#, fuzzy +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚28 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:834 -#, fuzzy +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." -msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚29 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:840 -#, fuzzy +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." -msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚30 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:843 -#, fuzzy +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." -msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚31 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:846 -#, fuzzy +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." -msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。" +msgstr "3D物ç†å±‚32 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "3D物ç†å±‚4 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "3D物ç†å±‚5 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "3D物ç†å±‚6 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "3D物ç†å±‚7 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "3D物ç†å±‚8 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "3D物ç†å±‚9 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "3D渲染层1 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "3D渲染层10 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "3D渲染层11 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "3D渲染层12 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "3D渲染层13 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "3D渲染层14 çš„å¯é€‰åç§°" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "3D渲染层15 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "3D渲染层16 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "3D渲染层17 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "3D渲染层18 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "3D渲染层19 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "3D渲染层2 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "3D渲染层20 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "3D渲染层3 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "3D渲染层4 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "3D渲染层5 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "3D渲染层6 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "3D渲染层7 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "3D渲染层8 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "3D渲染层9 çš„å¯é€‰å称。" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." @@ -55420,33 +56007,35 @@ msgstr "" "如果给定è¯è¨€çš„翻译ä¸å¯ç”¨ï¼Œåˆ™ä½¿ç”¨é»˜è®¤åœ°åŸŸã€‚如果留空,将使用 [code]en[/code]," "å³è‹±æ–‡ã€‚" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "如果ä¸ä¸ºç©ºï¼Œé‚£ä¹ˆå½“从编辑器ä¸è¿è¡Œé¡¹ç›®æ—¶ï¼Œå°†ä½¿ç”¨è¯¥è¯è¨€ã€‚" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "如果[code]true[/code],将所有输出记录到文件ä¸ã€‚" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" +"[member logging/file_logging/enable_file_logging] 的桌é¢è¦†ç›–ï¼Œå› ä¸ºåœ¨ 移动 / " +"Web å¹³å°ä¸Šä¸å®¹æ˜“访问日志文件。" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." -msgstr "项目ä¸çš„æ—¥å¿—的路径。建议使用[code]user://[/code]作为路径。" +msgstr "é¡¹ç›®ä¸æ—¥å¿—的路径。建议使用 [code]user://[/code] 路径。" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." -msgstr "指定å…许的日志文件的最大数é‡(用于旋转)。" +msgstr "指定å…许的最大日志文件数é‡ï¼ˆç”¨äºŽè½®æ¢ï¼‰ã€‚" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." @@ -55454,7 +56043,7 @@ msgstr "" "Godot使用一个消æ¯é˜Ÿåˆ—æ¥å»¶è¿Ÿä¸€äº›å‡½æ•°è°ƒç”¨ã€‚å¦‚æžœä½ çš„ç©ºé—´ç”¨å®Œäº†ï¼ˆä½ ä¼šçœ‹åˆ°ä¸€ä¸ªé”™" "è¯¯ï¼‰ï¼Œä½ å¯ä»¥åœ¨è¿™é‡Œå¢žåР大å°ã€‚" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -55465,7 +56054,7 @@ msgstr "" "以é¿å…åœ¨çº¿ç¨‹ä¸Šåœæ¢è¯·æ±‚它们的æœåŠ¡å™¨ã€‚å¦‚æžœåœ¨çº¿ç¨‹ä¸åŠ è½½èµ„æºæ—¶æœåС噍ç»å¸¸å¡é¡¿ï¼Œè¯·" "å¢žåŠ æ¤æ•°å—。" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " @@ -55474,90 +56063,84 @@ msgstr "" "å…许调试器输出的最大å—符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的" "è¿žæŽ¥åœæ»žã€‚" -#: doc/classes/ProjectSettings.xml:956 -#, fuzzy +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -"å…许调试器å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器的" -"è¿žæŽ¥åœæ»žã€‚" +"å…许作为调试器输出å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过æ¤å€¼ï¼Œå†…å®¹å°†è¢«åˆ é™¤ã€‚è¿™æœ‰åŠ©äºŽé¿å…调试" +"å™¨çš„è¿žæŽ¥åœæ»žã€‚" -#: doc/classes/ProjectSettings.xml:959 -#, fuzzy +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -"å…许调试器输出的最大å—符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的" -"è¿žæŽ¥åœæ»žã€‚" +"å…许作为调试器输出å‘é€çš„æœ€å¤§æ¶ˆæ¯é‡ã€‚超过æ¤å€¼ï¼Œå†…å®¹å°†è¢«åˆ é™¤ã€‚è¿™æœ‰åŠ©äºŽé¿å…调试" +"å™¨çš„è¿žæŽ¥åœæ»žã€‚" -#: doc/classes/ProjectSettings.xml:962 -#, fuzzy +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -"å…许从调试器å‘é€çš„æœ€å¤§è¦å‘Šæ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器" -"çš„è¿žæŽ¥åœæ»žã€‚" +"å…许作为调试器输出å‘é€çš„æœ€å¤§è¦å‘Šæ•°ã€‚超过æ¤å€¼ï¼Œå†…å®¹å°†è¢«åˆ é™¤ã€‚è¿™æœ‰åŠ©äºŽé¿å…调试" +"å™¨çš„è¿žæŽ¥åœæ»žã€‚" -#: doc/classes/ProjectSettings.xml:965 -#, fuzzy +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -"用于ååºåˆ—化Godotæ•°æ®çš„æ•°æ®åŒ…å¯¹ç‰æµçš„默认大å°ã€‚超过这个大å°ï¼Œæ•°æ®ä¼šè¢«ä¸¢å¼ƒã€‚" +"用于ååºåˆ—化 Godot æ•°æ®çš„æ•°æ®åŒ…å¯¹ç‰æµ (stream) 的默认大å°ï¼ˆä»¥å—节为å•ä½ï¼ŒæŒ‡å®š" +"为 2 的幂)。默认值 [code]16[/code] ç‰äºŽ 65,536 å—节。超过æ¤å¤§å°ï¼Œæ•°æ®å°†è¢«ä¸¢" +"弃。" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "使用TCP的连接å°è¯•的超时(以秒为å•ä½ï¼‰ã€‚" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå—节)。" -#: doc/classes/ProjectSettings.xml:974 -#, fuzzy +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." -msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå—节)。" +msgstr "[WebSocketClient] 输入缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." -msgstr "" +msgstr "[WebSocketClient] 的最大并å‘输入数æ®åŒ…数。" -#: doc/classes/ProjectSettings.xml:980 -#, fuzzy +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." -msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå—节)。" +msgstr "[WebSocketClient]输出缓冲区的最大尺寸,以kiB为å•ä½ã€‚" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." -msgstr "" +msgstr "[WebSocketClient]的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚" -#: doc/classes/ProjectSettings.xml:986 -#, fuzzy +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." -msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå—节)。" +msgstr "[WebSocketServer]输入缓冲区的最大尺寸,以kiB为å•ä½ã€‚" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." -msgstr "" +msgstr "[WebSocketServer] 的最大并å‘输入数æ®åŒ…æ•°é‡ã€‚" -#: doc/classes/ProjectSettings.xml:992 -#, fuzzy +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." -msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå—节)。" +msgstr "[WebSocketServer] 输出缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." -msgstr "" +msgstr "[WebSocketServer] 的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." @@ -55565,11 +56148,11 @@ msgstr "" "对远程文件系统的预读å–é‡ã€‚更高的值å¯ä»¥å‡å°‘延迟的影å“,但代价是更高的带宽消" "耗。" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "远程文件系统使用的页é¢å¤§å°ï¼ˆå—节)。" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -55583,35 +56166,39 @@ msgstr "" "certificates.crt]Mozillaè¯ä¹¦åŒ…[/url]。如果留空,将使用默认的è¯ä¹¦åŒ…。\n" "如果有疑问,让这个设置为空。" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" "当自动创建节点å称时,在这个项目ä¸è®¾ç½®å¤§å°å†™çš„ç±»åž‹ã€‚è¿™ä¸»è¦æ˜¯ç¼–辑器设置。" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "用什么æ¥åˆ†éš”节点å称和编å·ã€‚è¿™ä¸»è¦æ˜¯ä¸€ä¸ªç¼–辑器的设置。" -#: doc/classes/ProjectSettings.xml:1014 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." -msgstr "用于broad-phase 2D å“ˆå¸Œç½‘æ ¼ç®—æ³•çš„å“ˆå¸Œè¡¨çš„å¤§å°ã€‚" +msgstr "" +"用于宽相 2D å“ˆå¸Œç½‘æ ¼ç®—æ³•çš„å“ˆå¸Œè¡¨çš„å¤§å°ã€‚\n" +"[b]注æ„:[/b] 如果å¯ç”¨äº† [member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿" +"用。" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" +"用于宽相2Då“ˆå¸Œç½‘æ ¼ç®—æ³•çš„å•元尺寸,åƒç´ å•ä½ã€‚\n" +"[b]注æ„:[/b] 如果å¯ç”¨[member ProjectSettings.physics/2D/use_bvh],则ä¸ä½¿ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -55623,9 +56210,15 @@ msgid "" "common/physics_fps], [code]60[/code] by default) will bring the object to a " "stop in one iteration." msgstr "" +"2D ä¸çš„默认角阻尼。\n" +"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 " +"[code]0[/code] 时,对象将继ç»ä»¥ç›¸åŒçš„速度移动。大于 [code]1[/code] 的值将旨在" +"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在在" +"åŠç§’内将速度é™ä½Žåˆ° [code]0[/code]。ç‰äºŽæˆ–大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿ä»£" +"ä¸åœæ¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 " +"[code]60[/code]。" -#: doc/classes/ProjectSettings.xml:1026 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -55636,17 +56229,16 @@ msgid "" "Physics2DServer.AREA_PARAM_GRAVITY, 98)\n" "[/codeblock]" msgstr "" -"2Dä¸é»˜è®¤çš„é‡åŠ›å¼ºåº¦ã€‚\n" -"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨" -"以下代ç 示例。\n" +"2Dä¸é»˜è®¤çš„é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šæ¯ç§’平方åƒç´ 。\n" +"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥" +"下代ç 示例:\n" "[codeblock]\n" "# 设置默认的é‡åŠ›å¼ºåº¦ä¸º98。\n" -"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), " -"PhysicsServer2D.area_PARAM_GRAVITY, 98)\n" +"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), " +"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1034 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -55657,16 +56249,16 @@ msgid "" "Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n" "[/codeblock]" msgstr "" -"2Dä¸é»˜è®¤çš„é‡åŠ›æ–¹å‘。\n" -"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·" -"使用下é¢çš„代ç 示例。\n" +"2D ä¸çš„默认é‡åŠ›æ–¹å‘。\n" +"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹" +"代ç 示例:\n" "[codeblock]\n" -"# 设置默认的é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n" -"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), " -"PhysicsServer2D.area_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n" +"# 设置默认é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n" +"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), " +"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -55678,50 +56270,54 @@ msgid "" "common/physics_fps], [code]60[/code] by default) will bring the object to a " "stop in one iteration." msgstr "" +"2D ä¸çš„默认线性阻尼。\n" +"[b]注:[/b]良好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/" +"code] 时,对象将继ç»ä»¥ç›¸åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’" +"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速" +"度é™ä½Žåˆ° [code]0[/code]。ç‰äºŽæˆ–大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿ä»£ä¸åœæ¢ï¼Œ" +"[member ProjectSettings.physics/common/physics_fps],默认情况下为 [code]60[/" +"code]。" -#: doc/classes/ProjectSettings.xml:1046 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -"在broad-phase 2Då“ˆå¸Œç½‘æ ¼ç®—æ³•ä¸ï¼Œå®šä¹‰ç›¸å¯¹äºŽå•元而言的构æˆå¤§åž‹ç‰©ä½“的表é¢å°ºå¯¸çš„" -"阈值。" +"定义构æˆå¤§å¯¹è±¡çš„表é¢å°ºå¯¸çš„阈值,与宽相 2D æ•£åˆ—ç½‘æ ¼ç®—æ³•ä¸çš„å•元有关。\n" +"[b]注æ„:[/b]如果å¯ç”¨äº†[member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿" +"用。" -#: doc/classes/ProjectSettings.xml:1050 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -"设置用于2D物ç†çš„物ç†å¼•擎。\n" -"\"DEFAULT \"å’Œ \"GodotPhysics2D \"æ˜¯ä¸€æ ·çš„ï¼Œå› ä¸ºç›®å‰è¿˜æ²¡æœ‰ä½¿ç”¨å…¶ä»–çš„2D物ç†å¼•" -"擎。" +"设置用于 2D 物ç†çš„物ç†å¼•擎。\n" +"\"DEFAULT\" å’Œ \"GodotPhysics\" æ˜¯ä¸€æ ·çš„ï¼Œå› ä¸ºç›®å‰æ²¡æœ‰å®žçް坿›¿ä»£çš„ 2D ç‰©ç†æœ" +"务。" -#: doc/classes/ProjectSettings.xml:1054 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -"角速度阈值。在æ¤é˜ˆå€¼ä»¥ä¸‹ï¼Œ2D物ç†ä½“å°†è¢«è§†ä¸ºä¸æ´»åŠ¨ã€‚å‚阅[constant " -"physicsServer2D.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。" +"阈值角速度,在该阈值下 2D 物ç†ä½“å°†è¢«è§†ä¸ºéžæ´»åŠ¨ã€‚å‚阅 [constant " +"Physics2DServer.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。" -#: doc/classes/ProjectSettings.xml:1057 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -"线性速度的阈值。在æ¤é˜ˆå€¼ä¸‹äºŒç»´ç‰©ç†ä½“è¢«è®¤ä¸ºæ˜¯ä¸æ´»åŠ¨çš„ã€‚å‚阅[constant " +"线性速度的阈值。在æ¤é˜ˆå€¼ä¸‹2D物ç†ä½“è¢«è®¤ä¸ºæ˜¯éžæ´»åŠ¨çš„ã€‚å‚阅[constant " "PhysicsServer2D.SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]。" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -55735,30 +56331,31 @@ msgstr "" "[b]è¦å‘Šï¼š[/b] 从Godot 3.2开始,关于物ç†è¿ç®—使用多线程的å馈ä¸ä¸€ã€‚请务必评估它" "是å¦ç¡®å®žç»™ä½ 带æ¥äº†é¢å¤–的性能,并且在使用它时没有过时。" -#: doc/classes/ProjectSettings.xml:1064 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -"2D物ç†ç‰©ä½“䏿´»åŠ¨çš„æ—¶é—´ï¼ˆä»¥ç§’ä¸ºå•ä½ï¼‰ã€‚在æ¤ä¹‹å‰ï¼Œ2D物ç†ä½“将进入ç¡çœ 状æ€ã€‚å‚阅" +"2D物ç†ç‰©ä½“éžæ´»åŠ¨çš„æ—¶é—´ï¼Œä»¥ç§’ä¸ºå•ä½ã€‚在æ¤ä¹‹å‰ï¼Œ2D物ç†ç‰©ä½“å°†è¿›å…¥ä¼‘çœ çŠ¶æ€ã€‚å‚阅" "[constant PhysicsServer2D.SPACE_PARAM_BODY_TIME_TO_SLEEP]。" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" +"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯æ•£åˆ—ç½‘æ ¼ï¼Œç”¨äºŽ 2D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„" +"性能。" -#: doc/classes/ProjectSettings.xml:1070 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -"设置三维物ç†ä¸–ç•Œçš„åˆ›å»ºæ˜¯å¦æ”¯æŒ[SoftBody3D]物ç†è¿ç®—(åªé€‚用于Bullet物ç†å¼•擎)。" +"设置是å¦åœ¨æ”¯æŒ [SoftBody] 物ç†çš„æƒ…况下创建 3D 物ç†ä¸–界。仅适用于 Bullet 物ç†" +"引擎。" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -55770,9 +56367,15 @@ msgid "" "common/physics_fps], [code]60[/code] by default) will bring the object to a " "stop in one iteration." msgstr "" +"3D ä¸çš„默认角阻尼。\n" +"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 " +"[code]0[/code] 时,对象将继ç»ä»¥ç›¸åŒçš„速度移动。大于 [code]1[/code] 的值将旨在" +"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠ" +"秒内将速度é™ä½Žåˆ° [code]0[/code]。ç‰äºŽæˆ–大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿ä»£ä¸" +"åœæ¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 " +"[code]60[/code]。" -#: doc/classes/ProjectSettings.xml:1077 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -55783,17 +56386,16 @@ msgid "" "PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n" "[/codeblock]" msgstr "" -"3Dä¸é»˜è®¤çš„é‡åŠ›å¼ºåº¦ã€‚\n" -"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨" -"以下代ç 示例。\n" +"3D ä¸çš„默认é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šç±³/秒平方。\n" +"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹ä»£ç " +"示例:\n" "[codeblock]\n" -"# 设置默认的é‡åŠ›å¼ºåº¦ä¸º9.8。\n" -"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), " -"PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n" +"# 设置默认é‡åŠ›å¼ºåº¦ä¸º9.8。\n" +"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), " +"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1085 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -55804,16 +56406,16 @@ msgid "" "PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n" "[/codeblock]" msgstr "" -"3Dä¸é»˜è®¤çš„é‡åŠ›æ–¹å‘。\n" -"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·" -"使用下é¢çš„代ç 示例。\n" +"3D ä¸çš„默认é‡åŠ›æ–¹å‘。\n" +"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹" +"代ç 示例:\n" "[codeblock]\n" -"# 设置默认的é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n" -"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), " -"PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n" +"# 设置默认é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n" +"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), " +"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n" "[/codeblock]" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -55825,30 +56427,38 @@ msgid "" "common/physics_fps], [code]60[/code] by default) will bring the object to a " "stop in one iteration." msgstr "" +"3D ä¸çš„默认线性阻尼。\n" +"[b]注:[/b]好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/" +"code] 时,对象将继ç»ä»¥ç›¸åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’" +"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速" +"度é™ä½Žåˆ° [code]0[/code]。ç‰äºŽæˆ–大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿ä»£ä¸åœæ¢ï¼Œ" +"[member ProjectSettings.physics/common/physics_fps]默认情况下为 [code]60[/" +"code]。" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" +"å…è®¸ä½¿ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘进行 3D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„" +"性能。" -#: doc/classes/ProjectSettings.xml:1100 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " "physics engine. The \"GodotPhysics\" engine is still supported as an " "alternative." msgstr "" -"设置3D物ç†å¦çš„物ç†å¼•擎。\n" -"ç›®å‰ \"DEFAULT \"是[url=https://bulletphysics.org]Bullet[/url]物ç†å¼•擎。ä»ç„¶" -"æ”¯æŒ \"GodotPhysics3D \"引擎作为替代。" +"设置用于 3D 物ç†çš„物ç†å¼•擎。\n" +"\"DEFAULT\"ç›®å‰æ˜¯ [url=https://bulletphysics.org]Bullet[/url] 物ç†å¼•擎。ä»ç„¶" +"支æŒ\"GodotPhysics\"引擎作为替代。" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "åœ¨æ ¹è§†å›¾ä¸Šå¯ç”¨ [member Viewport.physics_object_picking]。" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -55861,8 +56471,15 @@ msgid "" "picking input events during pause (so nodes won't get them) and flushing " "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" +"如果å¯ç”¨ï¼Œ2D å’Œ 3D 物ç†pickåœ¨æš‚åœæ—¶ä¼šè¿™æ ·è¡¨çŽ°ï¼š\n" +"- æš‚åœå¼€å§‹æ—¶ï¼Œæ‚¬åœæˆ–æ•获的æ¯ä¸ªç¢°æ’žå¯¹è±¡ï¼ˆä»…é™ 3D)都会从该状æ€ä¸é‡Šæ”¾å‡ºæ¥ï¼ŒèŽ·å¾—" +"ç›¸å…³çš„é¼ æ ‡é€€å‡ºå›žè°ƒï¼Œé™¤éžå…¶æš‚åœæ¨¡å¼ä½¿å…¶å…于暂åœã€‚\n" +"- åœ¨æš‚åœæœŸé—´ï¼Œpickåªè€ƒè™‘ä¸å—æš‚åœçš„碰撞对象,å‘é€è¾“入事件和输入/退出回调到他们" +"预期。\n" +"如果ç¦ç”¨ï¼Œåˆ™ä½¿ç”¨è¿‡åŽ»çš„è¡Œä¸ºï¼ŒåŒ…æ‹¬åœ¨æš‚åœæœŸé—´æŽ’队ç‰å¾…pickè¾“å…¥äº‹ä»¶ï¼ˆå› æ¤èŠ‚ç‚¹ä¸ä¼š" +"获å–它们),并在æ¢å¤æ—¶æ ¹æ®2D/3D世界的状æ€åˆ·æ–°è¯¥é˜Ÿåˆ—。" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -55875,8 +56492,7 @@ msgstr "" "[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置" "[member Engine.iterations_per_second]æ¥ä»£æ›¿ã€‚" -#: doc/classes/ProjectSettings.xml:1117 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -55891,12 +56507,17 @@ msgid "" "[b]Note:[/b] This property is only read when the project starts. To change " "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿä¸Žå®žæ—¶åŒæ¥çš„程度。为0æˆ–æ›´å°‘ï¼Œåˆ™æ˜¯åŒæ¥çš„ã€‚è¿™æ ·çš„å€¼å»ºè®®ç”¨äºŽç½‘ç»œæ¸¸" -"æˆï¼Œå› ä¸ºæ—¶é’ŸåŒæ¥å¾ˆé‡è¦ã€‚较高的数值会导致游æˆä¸çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿæœ‰è¾ƒå¤§çš„å差," -"但å…许平滑帧率抖动。默认值0.5对大多数人æ¥è¯´åº”该是没有问题的;高于2的值å¯èƒ½ä¼š" -"导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,ä¸å»ºè®®ä½¿ç”¨ã€‚" +"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿå®žæ—¶åŒæ¥çš„程度。如果是0æˆ–æ›´å°‘ï¼Œæ—¶é’Ÿæ˜¯åŒæ¥çš„ã€‚è¿™æ ·çš„å€¼å»ºè®®ç”¨äºŽç½‘ç»œ" +"游æˆï¼Œå› ä¸ºæ—¶é’Ÿçš„åŒæ¥æ€§å¾ˆé‡è¦ã€‚较高的值会导致游æˆä¸çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿçš„å差较" +"大,但å¯ä»¥å¹³æ»‘帧速率的抖动。默认值0.5对大多数人æ¥è¯´åº”是ä¸é”™çš„;超过2的值å¯èƒ½" +"会导致游æˆå¯¹æŽ‰å¸§çš„ååº”æœ‰æ˜Žæ˜¾çš„å»¶è¿Ÿï¼Œå› æ¤ä¸å»ºè®®ä½¿ç”¨ã€‚\n" +"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值解决方案时,应该通过将" +"[member physics/common/physics_jitter_fix]设置为[code]0[/code]æ¥ç¦ç”¨ç‰©ç†æŠ–动" +"ä¿®å¤ã€‚\n" +"[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置" +"[member Engine.physics_jitter_fix]。" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -55905,8 +56526,12 @@ msgid "" "exports. A non-default setting that works better on your machine may " "adversely affect performance for end users." msgstr "" +"[b]实验性的。[/b]åœ¨ä¸Šä¼ æ‰¹å¤„ç†æ•°æ®ä¹‹å‰ä½¿ç”¨NULLæ•°æ®è°ƒç”¨[code]glBufferData[/" +"code]。这å¯èƒ½ä¸æ˜¯å¿…需的,但å¯ä»¥ç”¨äºŽå®‰å…¨ã€‚\n" +"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好" +"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -55915,8 +56540,12 @@ msgid "" "exports. A non-default setting that works better on your machine may " "adversely affect performance for end users." msgstr "" +"[b]实验性的。[/b] 如果设置为 on,则使用 [code]GL_STREAM_DRAW[/code] æ ‡å¿—è¿›è¡Œ" +"批处ç†ç¼“å†²åŒºä¸Šä¼ ã€‚å¦‚æžœå…³é—,则使用 [code]GL_DYNAMIC_DRAW[/code] æ ‡å¿—ã€‚\n" +"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好" +"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -55926,8 +56555,13 @@ msgid "" "exports. A non-default setting that works better on your machine may " "adversely affect performance for end users." msgstr "" +"[b]实验性的。[/b]如果设置为,则适用缓冲å¤ç«‹ - [code]glBufferData [/code] 在上" +"ä¼ æ–°æ•°æ®ä¹‹å‰ä½¿ç”¨ NULL æ•°æ®å’Œå®Œæ•´ç¼“冲器大å°è¿›è¡Œè°ƒç”¨ã€‚这对于é¿å…æŸäº›ç¡¬ä»¶å‡ºçްåœ" +"滞éžå¸¸é‡è¦ã€‚\n" +"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将æ¤ä½œä¸ºå¯¼å‡ºçš„默认值。在机器上效果更好的éžé»˜è®¤" +"设置å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -55936,17 +56570,22 @@ msgid "" "exports. A non-default setting that works better on your machine may " "adversely affect performance for end users." msgstr "" +"[b] 实验性的。[/b] 如果设置为开å¯ï¼Œåˆ™ä½¿ç”¨ [code]GL_STREAM_DRAW[/code] æ ‡å¿—è¿›" +"è¡Œæ—§ç¼“å†²åŒºä¸Šä¼ ã€‚å¦‚æžœå…³é—,则使用 [code]GL_DYNAMIC_DRAW[/code] æ ‡å¿—ã€‚\n" +"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好" +"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" "Not available in GLES3 when [member rendering/batching/options/use_batching] " "is off." msgstr "" +"在固定模å¼å’Œç¼©æ”¾æ¨¡å¼ä¹‹é—´è¿›è¡Œé€‰æ‹©ï¼Œå‰è€…ä¿ç•™äº†ä¸Žå›¾ç¨¿(artwork)相匹é…的角缩放。\n" +"当[member rendering/batching/options/use_batching]关闿—¶ï¼Œåœ¨GLES3ä¸ä¸å¯ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1142 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -55956,14 +56595,13 @@ msgid "" "NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 " "rendering, but only on desktop platforms." msgstr "" -"一些NVIDIA GPU驱动有一个bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯" -"在[TileMap]ä¸ä½¿ç”¨æ—¶ã€‚详情请å‚考[url=https://github.com/godotengine/godot/" +"一些NVIDIA GPU驱动有bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯åœ¨" +"[TileMap]ä¸ä½¿ç”¨æ—¶ã€‚详情å‚阅[url=https://github.com/godotengine/godot/" "issues/9913]GitHub issue 9913[/url]。\n" -"如果为[code]true[/code],该选项将为æ¤ç±»NVIDIA GPUå¯ç”¨ä¸€ä¸ª \"安全 \"的代ç è·¯" -"径,但会牺牲性能。这个选项åªå½±å“GLES2渲染åŽç«¯ï¼Œè€Œä¸”åªå½±å“桌é¢å¹³å°ã€‚在使用" -"VulkanåŽç«¯æ—¶ï¼Œå®ƒæ˜¯ä¸å¿…è¦çš„。" +"如果[code]为true[/code],该选项将为æ¤ç±»NVIDIA GPUå¯ç”¨ \"安全\" 的代ç 路径,但" +"会牺牲性能。这个选项会影å“GLES2å’ŒGLES3的渲染,但åªåœ¨æ¡Œé¢å¹³å°ä¸Šã€‚" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -55977,8 +56615,16 @@ msgid "" "with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] " "skinning." msgstr "" +"如果 [code]true[/code],则在 CPU è€Œéž GPU 上执行 2D 蒙皮。这æä¾›äº†ä¸Žå„ç§ç¡¬ä»¶" +"的更大兼容性,并且在æŸäº›æƒ…况下也å¯èƒ½æ›´å¿«ã€‚\n" +"当å‰ä»…在 [member rendering/batching/options/use_batching] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶å¯" +"用。\n" +"[b]注æ„:[/b] 䏿”¯æŒæŠ—锯齿软件蒙皮多边形,将在没有抗锯齿的情况下渲染。\n" +"[b]注æ„:[/b] 使用内置 [code]VERTEX[/code] 的自定义ç€è‰²å™¨åœ¨åº”用蒙皮 [i]之åŽ[/" +"i]以 [code]VERTEX[/code] ä½ç½®è¿è¡Œ ,而使用硬件蒙皮,[code] VERTEX[/code] 是被" +"应用蒙皮 [i]ä¹‹å‰ [/i] çš„ä½ç½®ã€‚" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -55986,14 +56632,19 @@ msgid "" "Consider using the project setting [member rendering/batching/precision/" "uv_contract] to prevent artifacts." msgstr "" +"如果 [code]true[/code],则在 2D 渲染ä¸å¼ºåˆ¶å°†é¡¶ç‚¹å¯¹é½åˆ°åƒç´ 。å¯èƒ½æœ‰åŠ©äºŽæŸäº›åƒ" +"ç´ è‰ºæœ¯é£Žæ ¼ã€‚\n" +"è¿™ç§æ•æ‰æ˜¯åœ¨é¡¶ç‚¹ç€è‰²å™¨ä¸çš„ GPU 上执行的。\n" +"考虑使用项目设置[member rendering/batching/precision/uv_contract] æ¥é˜²æ¢å‡ºçް" +"伪影。" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." -msgstr "" +msgstr "å½“æ‰¹å¤„ç†æ‰“开时,这会定期打å°å¸§è¯Šæ–日志。请注æ„,这会é™ä½Žæ€§èƒ½ã€‚" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -56001,8 +56652,11 @@ msgid "" "on each frame. This makes it easy to identify visual differences. " "Performance will be degraded." msgstr "" +"[b] 实验性的。[/b] 用于针对旧渲染器的回归测试。如果打开并设置 " +"[code]use_batching[/code],渲染器将在æ¯ä¸€å¸§ä¸Šäº¤æ›¿ä½¿ç”¨æ—§æ¸²æŸ“å™¨å’Œæ‰¹å¤„ç†æ¸²æŸ“器。" +"这使得识别视觉差异å˜å¾—容易。性能会下é™ã€‚" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -56011,8 +56665,11 @@ msgid "" "off. With large values the cost of overlap tests may lead to diminishing " "returns." msgstr "" +"ç¯æœ‰å¯èƒ½é˜»æ¢è¿žæŽ¥é¡¹ç›®ï¼Œå¹¶ç ´å批处ç†çš„许多性能优势。æ¤è®¾ç½®å¯ç”¨äº†ä¸€äº›å¤æ‚的逻" +"辑,如果它们的照明相似,并且é‡å 测试通过,则å…è®¸åŠ å…¥é¡¹ç›®ã€‚è¿™å¯ä»¥æ˜¾ç€æé«˜æŸäº›" +"游æˆçš„æ€§èƒ½ã€‚设置为 0 以关é—。对于较大的值,é‡å æµ‹è¯•çš„æˆæœ¬å¯èƒ½ä¼šå¯¼è‡´æ”¶ç›Šé€’å‡ã€‚" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -56023,8 +56680,12 @@ msgid "" "to give the threshold. This can reduce fill rate requirements in scenes with " "a lot of lighting." msgstr "" +"设置必须由剪切æ“作ä¿å˜ä»¥æ¿€æ´»å…‰å‰ªåˆ‡çš„æ€»å±å¹•区域的比例(以åƒç´ 为å•ä½ï¼‰ã€‚è¿™å¯ä»¥" +"防æ¢éƒ¨åˆ†ç‰©ä½“被渲染到光照区域之外。较低的值会让剪切更强。值为 1 ä¸å‰ªåˆ‡ä»»ä½•项," +"值为 0 剪切æ¯ä¸ªé¡¹ã€‚使用该值的4的幂,以强调较低的范围,并乘以以åƒç´ 为å•ä½çš„æ€»" +"å±å¹•é¢ç§¯ä»¥ç»™å‡ºé˜ˆå€¼ã€‚è¿™å¯ä»¥é™ä½Žå…·æœ‰å¤§é‡ç…§æ˜Žçš„场景ä¸çš„å¡«å……çŽ‡è¦æ±‚。" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -56033,25 +56694,31 @@ msgid "" "turn this off unless you can guarantee your target hardware will work with " "this method." msgstr "" +"å¯ç”¨æ¤è®¾ç½®ä½¿ç”¨ä¼ 统方法绘制仅包å«ä¸€ä¸ªçŸ©å½¢çš„æ‰¹æ¬¡ã€‚ä¼ ç»Ÿæ–¹æ³•æ›´å¿«ï¼ˆå¤§çº¦å¿«ä¸¤å€ï¼‰ï¼Œ" +"但å¯èƒ½ä¼šå¯¼è‡´æŸäº›ç³»ç»Ÿå‡ºçŽ°é—ªçƒã€‚ä¸ºäº†ç›´æŽ¥ä¸Žéžæ‰¹å¤„ç†æ¸²æŸ“器比较性能,您å¯ä»¥å°†å…¶è®¾" +"置为 true,但建议将其关é—ï¼Œé™¤éžæ‚¨å¯ä»¥ä¿è¯æ‚¨çš„ç›®æ ‡ç¡¬ä»¶å¯ä»¥ä½¿ç”¨æ¤æ–¹æ³•。" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" +"æ‰“å¼€å’Œå…³é— 2D 批处ç†ã€‚批处ç†é€šè¿‡å‡å°‘图形 API ç»˜åˆ¶è°ƒç”¨çš„æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." -msgstr "" +msgstr "åœ¨ç¼–è¾‘å™¨ä¸æ‰“å¼€ 2D 批处ç†ã€‚" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" +"为批处ç†é¡¶ç‚¹ä¿ç•™çš„缓冲区大å°ã€‚æ›´å¤§çš„å°ºå¯¸æ”¯æŒæ›´å¤§çš„æ‰¹æ¬¡ï¼Œä½†æ‰€ç”¨å†…å˜çš„æ”¶ç›Šé€’" +"å‡ã€‚这应该åªä¼šå¯¹æ€§èƒ½äº§ç”Ÿå¾ˆå°çš„å½±å“。" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -56059,16 +56726,22 @@ msgid "" "code] above which vertices will be translated to colored format. A value of " "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" +"åœ¨é¡¶ç‚¹æ ¼å¼ä¸åŒ…å«é¢œè‰²æ˜¯æœ‰ä»£ä»·çš„,但是,ä¸åŒ…å«é¢œè‰²ä¼šé˜»æ¢è·¨é¢œè‰²æ›´æ”¹è¿›è¡Œæ‰¹å¤„ç†ã€‚" +"æ¤é˜ˆå€¼ä¼šç¡®å®š [code] 顶点颜色更改次数 / 顶点总数 [/code] 的比率,高于该值的顶" +"点将被转æ¢ä¸ºå½©è‰²æ ¼å¼ã€‚值 0 将始终使用彩色顶点,1 永远ä¸ä¼šä½¿ç”¨å½©è‰²é¡¶ç‚¹ã€‚" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " "however for each item lookahead, so there is a trade off, with diminishing " "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" +"在æŸäº›æƒ…况下,批处ç†ç¨‹åºå¯ä»¥é‡æ–°æŽ’åºé¡¹ç›®ä»¥ä¾¿æ›´å¥½åœ°åŠ å…¥å®ƒä»¬ã€‚è¿™å¯èƒ½ä¼šæœ‰æ›´å¥½çš„" +"性能。然而,æ¯ä¸ªé¡¹çš„预先查看(lookahead)都需è¦é‡å 测试,但收益递å‡ï¼Œå› æ¤éœ€è¦æƒ" +"衡。如果您没有得到任何好处,将æ¤è®¾ç½®ä¸º 0 将关é—它。" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -56076,8 +56749,11 @@ msgid "" "this has diminishing returns and has a runtime cost so a small value is " "recommended." msgstr "" +"设置命令数以预先查看(lookahead)ï¼Œä»¥ç¡®å®šæ˜¯å¦æ‰¹é‡æ¸²æŸ“项目。值为 1 å¯ä»¥åŠ å…¥ç”±å•" +"个命令组æˆçš„项目,0 å…³é—连接。ç†è®ºä¸Šï¼Œè¾ƒé«˜çš„值更有å¯èƒ½åŠ å…¥ï¼Œä½†è¿™ä¼šé™ä½Žå›žæŠ¥ï¼Œ" +"并且具有è¿è¡Œæˆæœ¬ï¼Œå› æ¤å»ºè®®ä½¿ç”¨å°‘é‡å€¼ã€‚" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -56086,53 +56762,60 @@ msgid "" "coordinates used. Note that this can result in a slight squashing of border " "texels." msgstr "" +"在æŸäº›å¹³å°ï¼ˆå°¤å…¶æ˜¯ç§»åЍ平å°ï¼‰ä¸Šï¼Œç€è‰²å™¨ä¸çš„精度问题å¯èƒ½ä¼šå¯¼è‡´è¯»å– 1 texel 超出" +"边界,尤其是在缩放 rect çš„æƒ…å†µä¸‹ã€‚è¿™å°¤å…¶ä¼šå¯¼è‡´ç“·ç –åœ°å›¾ä¸ç“·ç –周围的边界伪" +"影。\n" +"æ¤è°ƒæ•´é€šè¿‡å¯¹ä½¿ç”¨çš„ UV åæ ‡è¿›è¡Œå°å¹…收缩æ¥å¯¹æ¤è¿›è¡Œæ ¡æ£ã€‚请注æ„,这å¯èƒ½ä¼šå¯¼è‡´è¾¹" +"界纹ç†çš„轻微挤压。" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " "both ranged from 0.0 to 1.0.\n" "Use the default unless correcting for a problem on particular hardware." msgstr "" +"UV收缩é‡ã€‚这个数å—除以1000000,是总纹ç†å°ºå¯¸çš„一个比例,宽度和高度都在0.0到1.0" +"之间。\n" +"除éžä¸ºäº†çº æ£ç‰¹å®šç¡¬ä»¶ä¸Šçš„问题,å¦åˆ™è¯·ä½¿ç”¨é»˜è®¤å€¼ã€‚" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." -msgstr "" +msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_HIGH] æ—¶é‡‡é›†çš„å…‰æ ·æœ¬é‡ã€‚" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." -msgstr "" +msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_LOW] æ—¶é‡‡é›†çš„å…‰æ ·æœ¬é‡ã€‚" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." -msgstr "" +msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_MEDIUM] æ—¶é‡‡é›†çš„å…‰æ ·æœ¬é‡ã€‚" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." -msgstr "" +msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_ULTRA] æ—¶é‡‡é›†çš„å…‰æ ·æœ¬é‡ã€‚" -#: doc/classes/ProjectSettings.xml:1210 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " "Environment.background_color] in particular. To change this default color " "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用[Environment]å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅[member " -"Environment.background_mode]å’Œ[member Environment.background_color]。è¦ä»¥ä»£ç " -"æ–¹å¼æ›´æ”¹æ¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨use [method RenderingServer." -"set_default_clear_color]。" +"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用 [Environment] å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅 " +"[member Environment.background_mode] å’Œ [member Environment." +"background_color]。è¦ä»¥ä»£ç æ–¹å¼æ›´æ”¹æ¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨ [method " +"RenderingServer.set_default_clear_color]。" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -56145,61 +56828,73 @@ msgstr "" "å¢ƒï¼Œéƒ½ä¼šåœ¨åœºæ™¯åŠ è½½æ—¶åŠ è½½é»˜è®¤çŽ¯å¢ƒã€‚å¦‚æžœä¸ä¾èµ–é»˜è®¤çŽ¯å¢ƒï¼Œæœ€å¥½åˆ é™¤" "[code]default_env.tres[/code],或者在这里指定ä¸åŒçš„默认环境。" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" +"使用åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©å¯èƒ½ä¼šåœ¨æŸäº›å¹³å°ä¸Šäº§ç”Ÿæ¸²æŸ“错误(尤其是iOS)。这些在粒å" +"ä¸å°¤ä¸ºæ˜Žæ˜¾ã€‚ç¦ç”¨åŠç²¾åº¦æµ®ç‚¹å¯èƒ½ä¼šè§£å†³è¿™äº›é—®é¢˜ã€‚" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" +"对[member rendering/gles2/compatibility/disable_half_float]çš„iOS特定é‡å†™ï¼Œå› " +"为在许多设备上对åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©çš„æ”¯æŒä¸ä½³ã€‚" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" "[b]Warning:[/b] High floating point precision can be extremely slow on older " "devices and is often not available at all. Use with caution." msgstr "" +"如果 [code]true[/code] å¹¶ä¸”åœ¨ç›®æ ‡ Android 设备上å¯ç”¨ï¼Œåˆ™ä¸º GLES2 ä¸çš„æ‰€æœ‰ç€è‰²" +"器计算å¯ç”¨é«˜æµ®ç‚¹ç²¾åº¦ã€‚\n" +"[b]è¦å‘Šï¼š[/b] 高浮点精度在旧设备上å¯èƒ½éžå¸¸æ…¢ï¼Œè€Œä¸”é€šå¸¸æ ¹æœ¬ä¸å¯ç”¨ã€‚谨慎使用。" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." -msgstr "" +msgstr "æ··åˆå½¢çŠ¶çš„æœ€å¤§ç¼“å†²åŒºå¤§å°ã€‚任何比这更大的混åˆå½¢çŠ¶éƒ½ä¸èµ·ä½œç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." -msgstr "" +msgstr "绘制多边形的最大缓冲区大å°ã€‚任何大于æ¤çš„多边形都ä¸èµ·ä½œç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." -msgstr "" +msgstr "绘制多边形的最大索引缓冲区大å°ã€‚任何大于æ¤çš„多边形都ä¸èµ·ä½œç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" +"用于绘制直接对象(ImmediateGeometry 节点)的最大缓冲区大å°ã€‚使用超过æ¤å¤§å°çš„" +"èŠ‚ç‚¹å°†æ— æ³•å·¥ä½œã€‚" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " "(especially mobile) only support 102. Setting this low will slightly reduce " "memory usage and may decrease shader compile times." msgstr "" +"æ¯ä¸ªå¯¹è±¡å¯æ¸²æŸ“的最大ç¯å…‰æ•°ã€‚这进一æ¥å—到硬件支æŒçš„é™åˆ¶ã€‚å¤§å¤šæ•°è®¾å¤‡ä»…æ”¯æŒ 409 " +"个ç¯å…‰ï¼Œè€Œè®¸å¤šè®¾å¤‡ï¼ˆå°¤å…¶æ˜¯ç§»åŠ¨è®¾å¤‡ï¼‰ä»…æ”¯æŒ 102 ç¯ã€‚å°†æ¤è®¾ç½®ä¸ºä½Žä¼šç•¥å¾®å‡å°‘内å˜" +"使用并å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间。" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -56208,8 +56903,12 @@ msgid "" "web. For most uses, the default value is suitable, but consider lowering as " "much as possible on web export." msgstr "" +"一帧ä¸å¯æ¸²æŸ“å…ƒç´ çš„æœ€å¤§æ•°é‡ã€‚如果æ¯å¸§å¯è§æ›´å¤šå…ƒç´ ,则ä¸ä¼šç»˜åˆ¶å®ƒä»¬ã€‚请记ä½ï¼Œå…ƒ" +"ç´ æ˜¯æŒ‡ç½‘æ ¼è¡¨é¢è€Œä¸æ˜¯ç½‘æ ¼æœ¬èº«ã€‚å°†æ¤å€¼è®¾ç½®å¾—较低会略微å‡å°‘内å˜ä½¿ç”¨é‡å¹¶å¯èƒ½å‡å°‘" +"ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 " +"Web 导出时尽å¯èƒ½é™ä½Žã€‚" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -56217,8 +56916,11 @@ msgid "" "uses, the default value is suitable, but consider lowering as much as " "possible on web export." msgstr "" +"一帧ä¸å¯æ¸²æŸ“的最大ç¯å…‰æ•°ã€‚如果使用的ç¯å…‰æ•°è¶…è¿‡æ¤æ•°é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚å°†æ¤å€¼" +"设置得较低会略微å‡å°‘内å˜ä½¿ç”¨é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于" +"大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -56226,25 +56928,28 @@ msgid "" "particularly on web. For most uses, the default value is suitable, but " "consider lowering as much as possible on web export." msgstr "" +"一帧ä¸å¯æ¸²æŸ“的最大å射探针数。如果使用的åå°„æŽ¢é’ˆæ•°è¶…è¿‡æ¤æ•°é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½" +"略。将æ¤å€¼è®¾ç½®å¾—较低会略微å‡å°‘内å˜ä½¿ç”¨é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 " +"Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" +"ç€è‰²å™¨æœ‰ä¸€ä¸ªä¸æ–å¢žåŠ çš„æ—¶é—´å˜é‡ã€‚在æŸäº›æ—¶å€™ï¼Œå®ƒéœ€è¦å›žæ»šåˆ°é›¶ä»¥é¿å…ç€è‰²å™¨åŠ¨ç”»çš„" +"精度错误。æ¤è®¾ç½®ç”¨äºŽè®¾å®šæ—¶é—´ï¼ˆä»¥ç§’为å•ä½ï¼‰ã€‚" -#: doc/classes/ProjectSettings.xml:1253 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨S3纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥VRAM压缩的纹ç†ã€‚è¿™ç§" -"算法åªåœ¨æ¡Œé¢å¹³å°å’Œæ¸¸æˆæœºä¸Šæ”¯æŒã€‚" +"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨PNGæ ¼å¼å¯¼å…¥æ— æŸçº¹ç†ã€‚å¦åˆ™ï¼Œå°†é»˜è®¤ä½¿ç”¨" +"WebP。" -#: doc/classes/ProjectSettings.xml:1256 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -56252,19 +56957,21 @@ msgid "" "Note that compression levels above 6 are very slow and offer very little " "savings." msgstr "" -"Zlib的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导致文" -"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级" -"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。" +"æ— æŸWebP的默认压缩级别。更高的级别会产生更å°çš„æ–‡ä»¶ï¼Œä½†ä¼šç‰ºç‰²åŽ‹ç¼©é€Ÿåº¦ã€‚è§£åŽ‹é€Ÿ" +"度大多ä¸å—压缩级别的影å“。支æŒçš„值是0到9。请注æ„,高于6的压缩级别是éžå¸¸æ…¢çš„," +"而且节çœçš„å 用éžå¸¸å°‘。" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " "attributes data. Recommended to be enabled if targeting mobile devices. " "Requires manual reimport of meshes after toggling." msgstr "" +"å¯¼å…¥æ—¶ï¼Œç½‘æ ¼é¡¶ç‚¹æ•°æ®å°†åœ¨å•个顶点缓冲区内分æˆä¸¤ä¸ªæµï¼Œä¸€ä¸ªç”¨äºŽä½ç½®æ•°æ®ï¼Œå¦ä¸€ä¸ª" +"用于交错属性数æ®ã€‚如果用于移动设备,建议å¯ç”¨ã€‚切æ¢åŽéœ€è¦æ‰‹åЍ釿–°å¯¼å…¥ç½‘æ ¼ã€‚" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -56272,8 +56979,11 @@ msgid "" "choose from these the most relevant based on a screen space metric, in order " "to give the best overall performance." msgstr "" +"确定将在任何时候使用的çƒä½“鮿Œ¡å™¨çš„æœ€å¤§æ•°é‡ã€‚\n" +"尽管一个场景ä¸å¯ä»¥æœ‰è®¸å¤šé®æŒ¡ç‰©ï¼Œä½†ç³»ç»Ÿä¼šæ ¹æ®å±å¹•空间度é‡ä»Žè¿™äº›é®æŒ¡ç‰©ä¸é€‰æ‹©æœ€" +"相关的æ¯ä¸€å¸§ï¼Œä»¥æä¾›æœ€ä½³çš„æ•´ä½“性能。" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -56282,24 +56992,30 @@ msgid "" "It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial " "convertion to [Portal] nodes." msgstr "" +"默认的惯例是,portal的法线从æºç©ºé—´å‘外。\n" +"å¦‚æžœä½ åœ¨å»ºé€ å…³å¡æ—¶ä¸å°å¿ƒå°†portalæœå‘了错误的方å‘,这个设置å¯ä»¥è§£å†³è¿™ä¸ªé—®" +"题。\n" +"它将在åˆå§‹è½¬æ¢ä¸º[Portal]节点时翻转命åçš„portalç½‘æ ¼ï¼ˆå³[code]-portal[/" +"code])。" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" +"æ˜¾ç¤ºè½¬æ¢æ—¥å¿—。\n" +"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1275 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -"如果[code]true[/code],图å—地图的碰撞将被当作è¿åЍ体处ç†ã€‚如果[code]false[/" -"code]ï¼Œç¢°æ’žå°†è¢«å½“ä½œé™æ€ä½“æ¥å¤„ç†ã€‚" +"如果 [code]true[/code],游æˆå›žè°ƒå°†ä½œä¸º [code] ä¿¡å· [/code] å‘é€ã€‚如果" +"[code]false[/code],它们将作为[code]通知[/code]å‘é€ã€‚" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -56307,14 +57023,19 @@ msgid "" "efficient, but can be switched off in case you wish to use empty [Spatial]s " "for markers or some other purpose." msgstr "" +"如果å¯ç”¨ï¼Œåœ¨åˆå¹¶ç½‘æ ¼æ—¶ï¼Œç³»ç»Ÿè¿˜å°†å°è¯•åˆ é™¤ä¸å†æœ‰ä»»ä½•å项的 [Spatial] 节点。\n" +"å‡å°‘åœºæ™¯æ ‘ä¸ [Node] 的数é‡å¯ä»¥æé«˜é历效率,但如果您希望将空的 [Spatial] 用于" +"æ ‡è®°æˆ–å…¶ä»–ç›®çš„ï¼Œåˆ™å¯ä»¥å°†å…¶å…³é—。" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" +"在 PVS ç”ŸæˆæœŸé—´æ˜¾ç¤ºæ—¥å¿—。\n" +"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -56323,31 +57044,37 @@ msgid "" "when it is set to [code]false[/code], i.e. there are problems with the " "default method." msgstr "" +"ä½¿ç”¨ç”Ÿæˆ PVS(潜在å¯è§é›†ï¼‰æ•°æ®çš„简化方法。当多个portal连接相邻空间时,结果å¯" +"能ä¸å‡†ç¡®ã€‚\n" +"[b]注æ„:[/b]ä¸€èˆ¬åªæœ‰åœ¨è®¾ç½®ä¸º[code]false[/code]æ—¶é‡åˆ°bug,å³é»˜è®¤æ–¹æ³•有问题" +"时,æ‰åº”该使用该选项。" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" +"如果 [code]true[/code],则分é…具有高动æ€èŒƒå›´ï¼ˆHDR)的主帧缓冲区。高动æ€èŒƒå›´å…" +"许使用大于 1 çš„ [Color] 值。\n" +"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1294 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/" -"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" +"由于性能问题或驱动支æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šçš„ [member rendering/quality/depth/hdr] çš„" +"低端覆盖。" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" "对一些GPU供应商(通常是移动设备)ç¦ç”¨æ·±åº¦é¢„处ç†ï¼Œå› 为他们的架构已ç»åšäº†è¿™ä¸ªã€‚" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " @@ -56356,7 +57083,7 @@ msgstr "" "如果 [code]true[/code],则在渲染æè´¨ä¹‹å‰æ‰§è¡Œå…ˆå‰çš„æ·±åº¦ä¼ é€’ã€‚å½“ä½¿ç”¨å¤æ‚çš„ææ–™" "和照明时,这会æé«˜é«˜é€æ”¯åœºæ™¯çš„æ€§èƒ½ã€‚" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " @@ -56365,7 +57092,7 @@ msgstr "" "æ–¹å‘æ€§é˜´å½±çš„大å°ï¼Œä»¥åƒç´ 为å•ä½ã€‚更高的值会导致更清晰的阴影,但会以性能为代" "价。该值将被四èˆäº”入到最接近的2次方。" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." @@ -56373,8 +57100,7 @@ msgstr "" "由于性能和驱动支æŒçš„问题,在移动设备上会对[member rendering/quality/" "directional_shadow/size] ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" -#: doc/classes/ProjectSettings.xml:1309 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -56383,14 +57109,13 @@ msgid "" "support GLES3 and falls back to GLES2. In such cases, this property is not " "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -"è¦ä½¿ç”¨çš„视频驱动(\"GLES2 \"或 \"Vulkan\")。\n" -"[b]注æ„:[/b] 使用ä¸çš„åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--rendering-driver[/code]命令" -"è¡Œå‚æ•°æ¥è¦†ç›–。\n" -"[b]修订说明:[/b] 在DisplayServer分离åŽä¸å†æœ‰æ•ˆã€‚\n" -"åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«æ›´æ–°ï¼Œæ‰€ä»¥ä½¿ç”¨[code]OS.get_current_video_driver[/" -"code]æ¥åœ¨è¿è¡Œæ—¶æŸ¥è¯¢å®ƒã€‚" +"è¦ä½¿ç”¨çš„视频驱动(\"GLES2\"或 \"GLES3\")。\n" +"[b]注æ„:[/b]使用ä¸çš„åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--video-driver[/code]命令行å‚" +"æ•°è€Œè¦†ç›–ï¼Œå¦‚æžœç›®æ ‡ç³»ç»Ÿä¸æ”¯æŒGLES3,è¦é€€å›žåˆ°GLES2,则å¯ä»¥é€šè¿‡[member " +"rendering/quality/driver/fallback_to_gles2]é€‰é¡¹ã€‚åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«" +"更新,所以在è¿è¡Œæ—¶ä½¿ç”¨[method OS.get_current_video_driver]æ¥æŸ¥è¯¢ã€‚" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -56401,28 +57126,35 @@ msgid "" "VRAM-compressed textures will be exported on Android and iOS, increasing the " "data pack's size." msgstr "" +"如果 [code]true[/code]ï¼Œä¸”ä¸æ”¯æŒ GLES3 驱动程åºï¼Œåˆ™å…许回退到 GLES2 驱动程" +"åºã€‚\n" +"[b]注æ„:[/b] 两个显å¡é©±åЍ䏿˜¯äº’相替代的,所以为 GLES3 设计的游æˆåœ¨å›žé€€åˆ° " +"GLES2 æ—¶å¯èƒ½æ— 法æ£å¸¸è¿è¡Œã€‚特别是,GLES3 åŽç«¯çš„æŸäº›åŠŸèƒ½åœ¨ GLES2 ä¸ä¸å¯ç”¨ã€‚å¯ç”¨" +"æ¤è®¾ç½®è¿˜æ„å‘³ç€ ETC å’Œ ETC2 VRAM 压缩纹ç†å°†åœ¨ Android å’Œ iOS ä¸Šå¯¼å‡ºï¼Œä»Žè€Œå¢žåŠ " +"æ•°æ®åŒ…的大å°ã€‚" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " "angles, at the cost of performance. Only power-of-two values are valid (2, " "4, 8, 16)." msgstr "" +"用于å¯ç”¨å„å‘异性的纹ç†çš„æœ€å¤§å„å‘异性过滤器级别。从倾斜角度查看时,较高的值将" +"导致更清晰的纹ç†ï¼Œä½†ä¼šç‰ºç‰²æ€§èƒ½ã€‚åªæœ‰äºŒçš„æŒ‡æ•°å€çš„值(如2ã€4ã€8ã€16)是有效。" -#: doc/classes/ProjectSettings.xml:1320 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " "but can be significantly slower on some hardware.\n" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -"设置è¦ä½¿ç”¨çš„MSAAæ ·æœ¬æ•°ï¼ˆ2çš„n次幂)。MSAA用于å‡å°‘多边形边缘的锯齿。较高的MSAA" -"值å¯ä»¥ä½¿è¾¹ç¼˜æ›´å¹³æ»‘,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n" +"设置è¦ä½¿ç”¨çš„MSAAæ ·æœ¬æ•°ã€‚MSAA用æ¥å‡å°‘多边形边缘的混å 。较高的MSAA值å¯ä»¥ä½¿è¾¹ç¼˜" +"更平滑,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n" "[b]注æ„:[/b] MSAA在使用GLES2åŽç«¯çš„HTML5导出ä¸ä¸å¯ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -56430,8 +57162,11 @@ msgid "" "Values around [code]0.5[/code] generally give the best results. See also " "[member rendering/quality/filters/use_fxaa]." msgstr "" +"如果设置为大于 [code]0.0[/code] 的值,对比度自适应é”化将应用于 3D 视å£ã€‚这具" +"æœ‰è¾ƒä½Žçš„æ€§èƒ½æˆæœ¬ï¼Œå¯ç”¨äºŽæ¢å¤ä½¿ç”¨ FXAA æ—¶æŸå¤±çš„一些é”度。 [code]0.5[/code] 附" +"近的值通常会给出最好的结果。å¦è§[member rendering/quality/filters/use_fxaa]。" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -56444,9 +57179,15 @@ msgid "" "mobile platforms. Due to this, it is recommended to leave this option " "disabled when targeting mobile platforms." msgstr "" +"如果 [code]true[/code],则使用快速åŽå¤„ç†è¿‡æ»¤å™¨ä½¿æ¡å¸¦æ˜Žæ˜¾ä¸é‚£ä¹ˆæ˜Žæ˜¾ã€‚在æŸäº›æƒ…" +"况下,去带å¯èƒ½ä¼šå¼•å…¥ç¨å¾®æ˜Žæ˜¾çš„æŠ–动模å¼ã€‚å»ºè®®ä»…åœ¨å®žé™…éœ€è¦æ—¶å¯ç”¨ debandingï¼Œå› " +"为抖动模å¼ä¼šä½¿æ— æŸåŽ‹ç¼©çš„å±å¹•截图更大。\n" +"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚ [member rendering/quality/depth/hdr] 也必" +"须为 [code]true[/code] æ‰èƒ½ä½¿åŽ»è‰²å¸¦æœ‰æ•ˆã€‚\n" +"[b]注æ„:[/b] 已知在移动平å°ä¸Šçš„去色带å˜åœ¨ç ´åæ¸²æŸ“çš„é—®é¢˜ã€‚å› æ¤ï¼Œå»ºè®®åœ¨ç”¨äºŽç§»" +"åŠ¨å¹³å°æ—¶ç¦ç”¨æ¤é€‰é¡¹ã€‚" -#: doc/classes/ProjectSettings.xml:1332 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -56455,11 +57196,12 @@ msgid "" "recovered by enabling contrast-adaptive sharpening (see [member rendering/" "quality/filters/sharpen_intensity])." msgstr "" -"使用快速的近似抗锯齿。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它的速度很快,但会" -"使图åƒçœ‹èµ·æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨è¾ƒä½Žçš„分辨率。在1440på’Œ4Kç‰å¤§åˆ†è¾¨çŽ‡ä¸‹ï¼Œä»ç„¶å¯ä»¥ç›¸" -"对良好地工作。" +"åœ¨æ ¹è§†çª—ä¸å¯ç”¨FXAA。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它速度快,但会使图åƒ" +"看起æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žåˆ†è¾¨çŽ‡ä¸‹ã€‚åœ¨1440på’Œ4Kè¿™æ ·çš„å¤§åˆ†è¾¨çŽ‡ä¸‹ï¼Œå¯ä»¥å·¥ä½œå¾—比较" +"好。一些æŸå¤±çš„é”度å¯ä»¥é€šè¿‡å¯ç”¨å¯¹æ¯”度适应性é”åŒ–æ¥æ¢å¤ï¼Œå‚阅[member rendering/" +"quality/filters/sharpen_intensity]。" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -56472,7 +57214,7 @@ msgstr "" "å¯èƒ½ä¼šæé«˜ç§»åŠ¨è®¾å¤‡çš„æ€§èƒ½ã€‚å¦‚æžœ [code]false[/code],则使用线性 mipmap 过滤(也" "称为“三线性过滤â€ï¼‰ã€‚" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -56486,7 +57228,7 @@ msgstr "" "[code]SCREEN_TEXTURE[/code]å’Œ[code]DEPTH_TEXTURE[/code]å°†ä¸èƒ½åœ¨ç€è‰²å™¨ä¸ä½¿ç”¨ï¼Œ" "而åŽå¤„ç†æ•ˆæžœå°†ä¸èƒ½åœ¨[Environment]ä¸ä½¿ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " @@ -56495,53 +57237,58 @@ msgstr "" "由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/" "intended_usage/framebuffer_allocation]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" +"在烘焙光照贴图ä¸å¯ç”¨åŒä¸‰æ¬¡é‡‡æ ·ã€‚这会导致更平滑的照明,但会å 用更多带宽。在 " +"GLES2 ä¸Šï¼Œåªæœ‰åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用对æ¤è®¾ç½®çš„æ›´æ”¹ã€‚" -#: doc/classes/ProjectSettings.xml:1347 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/" -"force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" +"在移动设备上对[member rendering/quality/lightmapping/use_bicubic_sampling]è¿›" +"行低端覆盖,以å‡å°‘带宽使用。" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" +"å射探针使用的图集的大å°ã€‚较大的尺寸å¯ä»¥å¸¦æ¥æ›´é«˜çš„视觉质é‡ï¼Œè€Œè¾ƒå°çš„尺寸会更" +"å¿«å¹¶å 用更少的内å˜ã€‚" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" +"用于å射图集的细分数。较高的数å—会é™ä½Žæ¯ä¸ªå›¾é›†çš„è´¨é‡ï¼Œä½†å…许您使用更多细分。" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" +"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å¤§é‡æ ·æœ¬æ¥åˆ›å»ºå射探针和全景背景(天空)的模糊" +"å˜ä½“。这些模糊的å˜ä½“å¯ä»¥è¢«ç²—ç³™çš„ææ–™ä½¿ç”¨ã€‚" -#: doc/classes/ProjectSettings.xml:1359 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -"ç”±äºŽæ€§èƒ½é—®é¢˜æˆ–é©±åŠ¨ç¨‹åºæ”¯æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/" -"reflections/ggx_samples] 以低性能数值覆盖。" +"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/" +"reflections/high_quality_ggx]进行低端覆盖。" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -56551,19 +57298,22 @@ msgid "" "[b]Note:[/b] Low and mid range hardware do not support complex irradiance " "maps well and may crash if this is set too high." msgstr "" +"é™åˆ¶è¾ç…§åº¦è´´å›¾çš„大å°ï¼Œé€šå¸¸ç”± [member Sky.radiance_size] 确定。与[member " +"rendering/quality/reflections/high_quality_ggx] 类似,更大的尺寸会产生更高质" +"é‡çš„è¾ç…§åº¦è´´å›¾ã€‚使用高频 HDRI 贴图时使用较高的值,å¦åˆ™è¯·å°½å¯èƒ½é™ä½Žè¯¥å€¼ã€‚\n" +"[b]注æ„:[/b] ä¸ä½Žæ¡£ç¡¬ä»¶ä¸èƒ½å¾ˆå¥½åœ°æ”¯æŒå¤æ‚çš„è¾ç…§åº¦è´´å›¾ï¼Œå¦‚果设置太高å¯èƒ½ä¼šå´©" +"溃。" -#: doc/classes/ProjectSettings.xml:1366 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -"如果 [code]true[/code],则对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯ " -"mipmap。这å‡å°‘了åå°„ä¸Šçš„æŠ–åŠ¨å™ªå£°å’Œæ”¾å¤§ä¼ªå½±ï¼Œä½†è®¡ç®—é€Ÿåº¦è¦æ…¢å¾—多,并且使用 " -"[member rendering/quality/reflections/roughness_layers]æ—¶è¦èŠ±è´¹æ›´å¤šçš„å†…å˜ã€‚" +"如果[code]true[/code],对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯" +"mipmaps。这å¯ä»¥å‡å°‘åå°„çš„æŠ–åŠ¨å™ªå£°ï¼Œä½†è¦æ¶ˆè€—更多的性能和内å˜ã€‚" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " @@ -56572,7 +57322,7 @@ msgstr "" "由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/" "reflections/texture_array_reflections]以低性能数值覆盖。" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." @@ -56580,7 +57330,7 @@ msgstr "" "如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Blinn æ¨¡åž‹è€Œä¸æ˜¯ GGX 模型" "æ¥ç”Ÿæˆæ¨¡ç³Šå射。" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " @@ -56589,7 +57339,7 @@ msgstr "" "由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/" "force_blinn_over_ggx]以低值覆盖。" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." @@ -56597,7 +57347,7 @@ msgstr "" "如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Lambert æè´¨ç…§æ˜Žæ¨¡åž‹è€Œä¸" "是 Burley。" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " @@ -56606,7 +57356,7 @@ msgstr "" "由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/" "force_lambert_over_burley]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " @@ -56615,7 +57365,7 @@ msgstr "" "如果 [code]true[/code],则为所有渲染强制顶点ç€è‰²ã€‚è¿™å¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ï¼Œä½†ä¹Ÿä¼š" "æžå¤§åœ°é™ä½Žè´¨é‡ã€‚å¯ç”¨äºŽä¼˜åŒ–低端移动设备的性能。" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " @@ -56624,7 +57374,7 @@ msgstr "" "由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/" "force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -56634,8 +57384,12 @@ msgid "" "energy or attenuation values.\n" "Changes to this setting will only be applied upon restarting the application." msgstr "" +"如果 [code]true[/code],则为 [OmniLight] å’Œ [SpotLight] å¯ç”¨æ–°çš„物ç†å…‰è¡°å‡ã€‚" +"这会以éžå¸¸å°çš„æ€§èƒ½æˆæœ¬èŽ·å¾—æ›´é€¼çœŸçš„ç…§æ˜Žå¤–è§‚ã€‚å¯ç”¨ç‰©ç†å…‰è¡°å‡åŽï¼Œç”±äºŽæ–°çš„è¡°å‡å…¬" +"å¼ï¼Œç¯å…‰ä¼šæ˜¾å¾—更暗。这å¯ä»¥é€šè¿‡è°ƒæ•´ç¯å…‰çš„èƒ½é‡æˆ–è¡°å‡å€¼æ¥è¡¥å¿ã€‚\n" +"对æ¤è®¾ç½®çš„æ›´æ”¹åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -56643,21 +57397,25 @@ msgid "" "Setting higher than a quarter of the [member rendering/quality/shadow_atlas/" "size] will not result in a perceptible increase in visual quality." msgstr "" +"立方体贴图的大å°ï¼Œåœ¨å°†é˜´å½±å¤åˆ¶åˆ°é˜´å½±å›¾é›†ä¸ä¹‹å‰å°†å…¶æ¸²æŸ“到其ä¸ã€‚当与更高的 " +"[member rendering/quality/shadow_atlas/size] 一起使用时,更高的数å—会导致更高" +"分辨率的阴影。设置高于 [member rendering/quality/shadow_atlas/size] 的四分之" +"一ä¸ä¼šå¯¼è‡´è§†è§‰è´¨é‡çš„æ˜Žæ˜¾æé«˜ã€‚" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "阴影贴图的细分象é™å¤§å°ã€‚请å‚é˜…é˜´å½±æ˜ å°„æ–‡æ¡£ã€‚" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "阴影图集的尺寸(用于OmniLightså’ŒSpotLightsï¼‰ã€‚è§æ–‡æ¡£ã€‚" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." @@ -56665,7 +57423,7 @@ msgstr "" "由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/" "shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -56675,24 +57433,30 @@ msgid "" "uses 16 samples to emulate linear filtering in the shader. This results in a " "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" +"阴影过滤模å¼ã€‚较高的质é‡è®¾ç½®ä¼šäº§ç”Ÿæ›´å¹³æ»‘çš„é˜´å½±ï¼Œåœ¨ç§»åŠ¨æ—¶é—ªçƒæ›´å°‘。\"ç¦ç”¨ \"是" +"最快的选项,但也有最低的质é‡ã€‚\"PCF5 \"更平滑,但也更慢。\"PCF13 \"是最平滑的" +"选项,但也是最慢的。\n" +"[b]注æ„:[/b] 当使用GLES2åŽç«¯æ—¶ï¼Œ\"PCF13 \"选项实际上使用16ä¸ªæ ·æœ¬æ¥æ¨¡æ‹Ÿç€è‰²å™¨" +"ä¸çš„线性滤波。这导致了与GLES3åŽç«¯äº§ç”Ÿçš„阴影外观相似。" -#: doc/classes/ProjectSettings.xml:1419 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/" -"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。" +"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹ [member rendering/quality/shadows/" +"filter_mode] 进行低端覆盖。" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" +"强制 [MeshInstance] 始终在 CPU 上执行蒙皮(适用于 GLES2 å’Œ GLES3)。\n" +"å¦è§[member rendering/quality/skinning/software_skinning_fallback]。" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -56703,48 +57467,57 @@ msgid "" "shaders will behave in a different way, because the bone transform will be " "already applied to the modelview matrix." msgstr "" +"å½“ç¡¬ä»¶ä¸æ”¯æŒ GLES2 的默认 GPU 蒙皮过程时,å…许 [MeshInstance] 在 CPU 上执行蒙" +"皮。\n" +"如果 [code]false[/code]ï¼Œåˆ™åœ¨è¿™ç§æƒ…况下使用 GPU 上的替代蒙皮过程(在大多数情" +"况下较慢)。\n" +"å¦è§[member rendering/quality/skinning/force_software_skinning]。\n" +"[b]注æ„:[/b] 当触å‘软件蒙皮回退时,自定义顶点ç€è‰²å™¨å°†ä»¥ä¸åŒçš„æ–¹å¼è¿è¡Œï¼Œå› 为" +"éª¨éª¼å˜æ¢å·²ç»åº”用于模型视图矩阵。" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" +"æ¸²æŸ“å…«å‰æ ‘(octree)的平衡å¯ä»¥æ”¹å˜ä¸ºæœ‰åˆ©äºŽæ›´å°çš„ ([code]0[/code]) 或更大的 " +"([code]1[/code]) 分支。\n" +"在æŸäº›é¡¹ç›®ä¸ï¼Œè¾ƒå¤§çš„分支å¯ä»¥æ˜¾ç€æé«˜æ€§èƒ½ã€‚" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" +"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘æ¥æ¸²æŸ“空间分区。这å¯èƒ½ä¼šå¸¦æ¥æ›´å¥½çš„æ€§èƒ½ã€‚" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." -msgstr "" +msgstr "æé«˜æ¬¡è¡¨é¢æ•£å°„的质é‡ï¼Œä½†æˆæœ¬æ˜¾ç€å¢žåŠ ã€‚" -#: doc/classes/ProjectSettings.xml:1442 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." -msgstr "地下散射效应的强度。" +msgstr "æ¬¡è¡¨é¢æ•£å°„的质é‡è®¾ç½®ï¼ˆé‡‡æ ·ï¼‰ã€‚" -#: doc/classes/ProjectSettings.xml:1445 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." -msgstr "地下散射效应的强度。" +msgstr "ç”¨äºŽæ¬¡è¡¨é¢æ•£å°„æ ·æœ¬çš„æœ€å¤§åŠå¾„。" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." -msgstr "" +msgstr "åŠ æƒæ¬¡è¡¨é¢æ•£å°„æ ·æœ¬ã€‚æœ‰åŠ©äºŽé¿å…从å±å¹•çš„ä¸ç›¸å…³éƒ¨åˆ†è¯»å–æ ·æœ¬ã€‚" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." -msgstr "" +msgstr "使用高质é‡çš„ä½“ç´ é”¥ä½“è¿½è¸ªã€‚è¿™ä¼šäº§ç”Ÿæ›´å¥½çœ‹çš„å射,但 GPU 消耗è¦é«˜å¾—多。" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " @@ -56753,16 +57526,18 @@ msgstr "" "渲染的线程模型。在线程上进行渲染å¯ä»¥æžå¤§åœ°æé«˜æ€§èƒ½ï¼Œä½†åŒæ¥åˆ°ä¸»çº¿ç¨‹ä¸Šä¼šå¯¼è‡´æ›´" "多的抖动。" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" "Try enabling this option if you see any visual anomalies in 3D (such as " "incorrect object visibility)." msgstr "" +"如果 [code]true[/code],则将在渲染和 Godot 物ç†ä¸ä½¿ç”¨çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬çš„ BVH(边界" +"体积层次结构)。\n" +"如果您在 3D ä¸çœ‹åˆ°ä»»ä½•è§†è§‰å¼‚å¸¸ï¼Œä¾‹å¦‚ä¸æ£ç¡®çš„å¯è§æ€§å¯¹è±¡ï¼Œè¯·å°è¯•å¯ç”¨æ¤é€‰é¡¹ã€‚" -#: doc/classes/ProjectSettings.xml:1461 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -56774,11 +57549,14 @@ msgid "" "located inside the project folder then restart the editor (see [member " "application/config/use_hidden_project_data_directory])." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹" -"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚" +"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ BPTC 算法导入 VRAM 压缩的纹ç†ã€‚æ¤çº¹" +"ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨æ¡Œé¢å¹³å°å¾—到支æŒï¼Œå¹¶ä¸”仅在使用 GLES3 渲染器时æ‰å—支æŒã€‚\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于" +"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件" +"夹,然åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼ˆå‚阅 [member application/config/" +"use_hidden_project_data_directory])。" -#: doc/classes/ProjectSettings.xml:1465 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -56789,11 +57567,14 @@ msgid "" "located inside the project folder then restart the editor (see [member " "application/config/use_hidden_project_data_directory])." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹" -"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚" +"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨Ericsson纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的" +"纹ç†ã€‚æ¤ç®—æ³•ä¸æ”¯æŒçº¹ç†ä¸çš„ alpha 通é“。\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于" +"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®ä¸çš„ [code].import/[/code] 文件夹,然" +"åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/" +"use_hidden_project_data_directory]。" -#: doc/classes/ProjectSettings.xml:1469 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -56804,11 +57585,14 @@ msgid "" "located inside the project folder then restart the editor (see [member " "application/config/use_hidden_project_data_directory])." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹" -"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚" +"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ Ericsson Texture Compression 2 算法" +"导入 VRAM 压缩的纹ç†ã€‚仅在使用 GLES3 æ¸²æŸ“å™¨æ—¶ï¼Œæ‰æ”¯æŒæ¤çº¹ç†åŽ‹ç¼©ç®—æ³•ã€‚\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®[i]ä¸[/i]会影å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于已" +"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®ä¸çš„ [code].import/[/code] 文件夹,然åŽ" +"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/" +"use_hidden_project_data_directory]。" -#: doc/classes/ProjectSettings.xml:1473 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -56819,11 +57603,14 @@ msgid "" "located inside the project folder then restart the editor (see [member " "application/config/use_hidden_project_data_directory])." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹" -"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚" +"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ PowerVR 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的" +"纹ç†ã€‚æ¤çº¹ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨ iOS ä¸Šå—æ”¯æŒã€‚\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于已" +"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®ä¸çš„ [code].import/[/code] 文件夹,然åŽ" +"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/" +"use_hidden_project_data_directory]。" -#: doc/classes/ProjectSettings.xml:1477 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -56834,15 +57621,19 @@ msgid "" "located inside the project folder then restart the editor (see [member " "application/config/use_hidden_project_data_directory])." msgstr "" -"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹" -"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚" +"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ S3 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的纹" +"ç†ã€‚æ¤ç®—法仅在桌é¢å¹³å°å’ŒæŽ§åˆ¶å°ä¸å—支æŒã€‚\n" +"[b]注æ„:[/b]更改æ¤è®¾ç½®[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于已" +"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®ä¸çš„ [code].import/[/code] 文件夹,然åŽ" +"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/" +"use_hidden_project_data_directory]。" -#: doc/classes/ProjectSettings.xml:1481 -#, fuzzy +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." -msgstr "用于[VisibilityNotifier2D]çš„äºŒç»´å“ˆå¸Œç½‘æ ¼çš„å•å…ƒæ ¼å¤§å°ã€‚" +msgstr "" +"用于 [VisibilityNotifier2D] 使用的 2D å“ˆå¸Œç½‘æ ¼çš„å•å…ƒæ ¼å¤§å°ï¼Œä»¥åƒç´ 为å•ä½ã€‚" #: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7 msgid "General-purpose proximity detection node." @@ -56869,9 +57660,8 @@ msgid "https://godotengine.org/asset-library/asset/129" msgstr "https://godotengine.org/asset-library/asset/129" #: doc/classes/QuadMesh.xml:17 -#, fuzzy msgid "Offset of the generated Quad. Useful for particles." -msgstr "生æˆçš„纹ç†çš„高度。" +msgstr "生æˆçš„ Quad çš„åç§»é‡ã€‚å¯¹ç²’åæœ‰ç”¨ã€‚" #: doc/classes/QuadMesh.xml:20 msgid "Size on the X and Y axes." @@ -56903,7 +57693,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms." "html#interpolating-with-quaternions" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms." +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms." "html#interpolating-with-quaternions" #: doc/classes/Quat.xml:20 @@ -56939,16 +57729,19 @@ msgid "" "error, so methods such as [method @GDScript.is_zero_approx] will not work " "reliably." msgstr "" +"返回æ¤å››å…ƒæ•°ä¸Ž [code]to[/code] 之间的角度。这是从一个到å¦ä¸€ä¸ªæ—‹è½¬æ‰€éœ€çš„角度大" +"å°ã€‚\n" +"[b]注æ„:[/b]è¯¥æ–¹æ³•çš„æµ®ç‚¹é”™è¯¯çŽ‡å¼‚å¸¸é«˜ï¼Œå› æ¤[method@GDScript.is_zero_approx]ç‰" +"方法结果ä¸å¯é 。" #: doc/classes/Quat.xml:63 -#, fuzzy msgid "" "Performs a cubic spherical interpolation between quaternions [code]pre_a[/" "code], this vector, [code]b[/code], and [code]post_b[/code], by the given " "amount [code]weight[/code]." msgstr "" -"在四元数[code]preA[/code]ã€æ¤å‘é‡ã€[code]b[/code]å’Œ[code]postB[/code]之间,通" -"过给定的é‡[code]t[/code],执行一个三维çƒé¢æ’值。" +"在四元数 [code]pre_a[/code]ã€è¯¥å‘é‡ [code]b[/code] å’Œ [code]post_b[/code] 之" +"间执行三次çƒé¢æ’值,按给定的 [code]weight[/code]。" #: doc/classes/Quat.xml:70 msgid "Returns the dot product of two quaternions." @@ -56969,14 +57762,13 @@ msgid "Returns the inverse of the quaternion." msgstr "返回四元数的å–逆。(译注:å³xyz的值分别å–å)." #: doc/classes/Quat.xml:89 -#, fuzzy msgid "" "Returns [code]true[/code] if this quaternion and [code]quat[/code] are " "approximately equal, by running [method @GDScript.is_equal_approx] on each " "component." msgstr "" -"通过对æ¯ä¸ªç»„ä»¶è¿è¡Œ[method @GDScript.is_equal_approx],如果这个四元组和" -"[code]quat[/code]大致相ç‰ï¼Œåˆ™è¿”回[code]true[/code]。" +"通过在æ¯ä¸ªåˆ†é‡ä¸Šè¿›è¡Œ [method @GDScript.is_equal_approx],如果æ¤å››å…ƒæ•°å’Œ " +"[code]quat[/code] 近似相ç‰ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/Quat.xml:95 msgid "Returns whether the quaternion is normalized or not." @@ -57078,7 +57870,6 @@ msgid "A class for generating pseudo-random numbers." msgstr "一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚" #: doc/classes/RandomNumberGenerator.xml:7 -#, fuzzy msgid "" "RandomNumberGenerator is a class for generating pseudo-random numbers. It " "currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n" @@ -57098,25 +57889,28 @@ msgid "" "The [code]0[/code] value documented here is a placeholder, and not the " "actual default seed." msgstr "" -"RandomNumberGenerator是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨[url=http://www." +"RandomNumberGenerator 是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨ [url=http://www." "pcg-random.org/]PCG32[/url]。\n" -"[b]注æ„:[/b] åº•å±‚ç®—æ³•æ˜¯ä¸€ä¸ªå®žçŽ°ç»†èŠ‚ã€‚å› æ¤ï¼Œå®ƒä¸åº”该被用æ¥åœ¨ä¸åŒçš„Godot版本ä¸" -"产生å¯é‡å¤çš„éšæœºæµã€‚\n" -"基于一个与时间有关的ç§å,生æˆä¸€ä¸ªéšæœºçš„æµ®ç‚¹æ•°ï¼ˆåœ¨ä¸€ä¸ªç»™å®šçš„èŒƒå›´å†…ï¼‰ã€‚\n" +"[b]注:[/b]åº•å±‚ç®—æ³•æ˜¯å®žçŽ°ç»†èŠ‚ã€‚å› æ¤ï¼Œè·¨ Godot 版本的å¯é‡å¤éšæœºæµä¸åº”该ä¾èµ–于" +"æ¤ã€‚\n" +"è¦æ ¹æ®æ—¶é—´ç›¸å…³ç§å生æˆéšæœºæµ®ç‚¹æ•°ï¼Œåœ¨ç»™å®šèŒƒå›´å†…ï¼š\n" "[codeblock]\n" "var rng = RandomNumberGenerator.new()\n" "func _ready():\n" " rng.randomize()\n" " var my_random_number = rng.randf_range(-10.0, 10.0)\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]注:[/b] [member seed] å’Œ [member state] å±žæ€§çš„é»˜è®¤å€¼æ˜¯ä¼ªéšæœºçš„,在调用" +"[method randomize] 时会å‘生å˜åŒ–。æ¤å¤„记录的 [code]0[/code] 值是一个å ä½ç¬¦ï¼Œè€Œ" +"䏿˜¯å®žé™…的默认ç§å。" #: doc/classes/RandomNumberGenerator.xml:19 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/math/" +"random_number_generation.html" #: doc/classes/RandomNumberGenerator.xml:25 msgid "" @@ -57182,6 +57976,19 @@ msgid "" "state], and not the initial seed value, which is going to be fixed in Godot " "4.0." msgstr "" +"æ ¹æ®ç»™å®šçš„ç§å值åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆå™¨çжæ€ã€‚给定的ç§åå°†æä¾›å¯é‡å¤çš„ä¼ªéšæœºæ•°åº" +"列。\n" +"[b]注:[/b] RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å。如果ç§åæ¥" +"è‡ªå¤–éƒ¨ï¼Œè¯·è€ƒè™‘ä½¿ç”¨å“ˆå¸Œå‡½æ•°æ¥æé«˜ç§åè´¨é‡ã€‚\n" +"[b]注:[/b]设置这个属性会产生改å˜å†…部[member state]的副作用,所以一定è¦åœ¨ä¿®æ”¹" +"[member state][i]之å‰[/i]åˆå§‹åŒ–ç§å:\n" +"[codeblock]\n" +"var rng = RandomNumberGenerator.new()\n" +"rng.seed = hash(\"Godot\")\n" +"rng.state = 100 # Restore to some previously saved state.\n" +"[/codeblock]\n" +"[b]è¦å‘Šï¼š[/b]该属性的getter返回之å‰çš„[member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å值,这将在" +"Godot 4.0ä¸ä¿®å¤ã€‚" #: doc/classes/RandomNumberGenerator.xml:78 msgid "" @@ -57201,6 +58008,18 @@ msgid "" "initialize the random number generator with arbitrary input, use [member " "seed] instead." msgstr "" +"éšæœºæ•°ç”Ÿæˆå™¨çš„当å‰çжæ€ã€‚ä¿å˜å¹¶æ¢å¤æ¤å±žæ€§ï¼Œä»¥å°†ç”Ÿæˆå™¨æ¢å¤åˆ°ä¹‹å‰çš„状æ€ï¼š\n" +"[codeblock]\n" +"var rng = RandomNumberGenerator.new()\n" +"print(rng.randf())\n" +"var saved_state = rng.state # Store current state.\n" +"print(rng.randf()) # Advance internal state.\n" +"rng.state = saved_state # Restore the state.\n" +"print(rng.randf()) # Prints the same value as in previous.\n" +"[/codeblock]\n" +"[b]注æ„:[/b] ä¸è¦å°†çжæ€è®¾ç½®ä¸ºä»»æ„å€¼ï¼Œå› ä¸ºéšæœºæ•°ç”Ÿæˆå™¨è¦æ±‚状æ€å…·æœ‰æŸäº›ç‰¹æ€§æ‰" +"能æ£å¸¸è¿è¡Œã€‚它应该åªè®¾ç½®ä¸ºæ¥è‡ªçжæ€å±žæ€§æœ¬èº«çš„值。è¦ä½¿ç”¨ä»»æ„输入åˆå§‹åŒ–éšæœºæ•°ç”Ÿ" +"æˆå™¨ï¼Œè¯·æ”¹ç”¨ [member seed]。" #: doc/classes/Range.xml:4 msgid "Abstract base class for range-based controls." @@ -57312,7 +58131,6 @@ msgid "Query the closest object intersecting a ray." msgstr "查询与射线相交的最近物体。" #: doc/classes/RayCast.xml:7 -#, fuzzy msgid "" "A RayCast represents a line from its origin to its destination position, " "[code]cast_to[/code]. It is used to query the 3D space in order to find the " @@ -57329,15 +58147,15 @@ msgid "" "queries are required between physics frames (or during the same frame), use " "[method force_raycast_update] after adjusting the raycast." msgstr "" -"RayCast表示一æ¡ä»ŽåŽŸç‚¹åˆ°ç›®æ ‡ä½ç½®[code]cast_to[/code]çš„ç›´çº¿ã€‚å®ƒè¢«ç”¨æ¥æŸ¥è¯¢3D空" -"间,以便沿ç€å°„线的路径找到最近的物体。\n" -"RayCast3Då¯ä»¥å¿½ç•¥ä¸€äº›ç‰©ä½“,通过[code]add_exception[/code]å°†å®ƒä»¬æ·»åŠ åˆ°å¼‚å¸¸åˆ—è¡¨" -"ä¸ï¼Œé€šè¿‡è®¾ç½®ç¢°æ’žå±‚进行适当的过滤,或者通过类型掩ç 过滤物体类型。\n" -"RayCast3Då¯ä»¥è¢«é…置为报告[Area3D]([member collide_with_areas])和" -"[PhysicsBody2D]([member collide_with_bodies])之间或彼æ¤é—´çš„碰撞。\n" -"åªæœ‰è¢«æ¿€æ´»çš„Raycastæ‰èƒ½å¤ŸæŸ¥è¯¢ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žæƒ…况。\n" -"RayCast2D在æ¯ä¸€ä¸ªç‰©ç†å¸§ä¸è®¡ç®—交集(è§[Node]),结果被缓å˜èµ·æ¥ï¼Œä»¥ä¾¿ä»¥åŽå¯ä»¥ç”¨" -"到下一帧。如果在物ç†å¸§ä¹‹é—´éœ€è¦å¤šæ¬¡æŸ¥è¯¢ï¼ˆæˆ–在åŒä¸€å¸§ä¸ï¼‰ï¼Œè¯·åœ¨è°ƒæ•´å°„线广æ’åŽä½¿" +"RayCast 表示从起点到终点ä½ç½®çš„线,[code]cast_to[/code]。它用于检测 3D 空间," +"以便找到沿光线路径最近的对象。\n" +"RayCast å¯ä»¥å¿½ç•¥æŸäº›å¯¹è±¡ï¼Œæ–¹æ³•是通过 [code]add_exception[/code] å°†å®ƒä»¬æ·»åŠ åˆ°" +"例外列表ä¸ï¼Œæˆ–者通过使用碰撞层和掩ç 设置,进行适当的过滤。\n" +"RayCast å¯ä»¥é…置为报告与 [Area]([member collide_with_areas]) å’Œ/或 " +"[PhysicsBody]([member collide_with_bodies]) 的碰撞。\n" +"åªæœ‰å¯ç”¨çš„光线投射æ‰èƒ½æ£€æµ‹ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žã€‚\n" +"RayCast 计算æ¯ä¸ªç‰©ç†å¸§çš„交集(å‚阅 [Node]),并将结果缓å˜èµ·æ¥ï¼Œä»¥ä¾¿ç¨åŽä½¿ç”¨ï¼Œ" +"直到下一帧。如果物ç†å¸§ä¹‹é—´ï¼ˆæˆ–åŒä¸€å¸§æœŸé—´ï¼‰éœ€è¦å¤šæ¬¡æ£€æµ‹ï¼Œè¯·åœ¨è°ƒæ•´å…‰çº¿æŠ•å°„åŽä½¿" "用[method force_raycast_update]。" #: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21 @@ -57357,7 +58175,6 @@ msgid "Removes all collision exceptions for this ray." msgstr "åˆ é™¤æ¤å°„线的所有碰撞异常。" #: doc/classes/RayCast.xml:41 -#, fuzzy msgid "" "Updates the collision information for the ray.\n" "Use this method to update the collision information immediately instead of " @@ -57365,10 +58182,10 @@ msgid "" "ray or its parent has changed state.\n" "[b]Note:[/b] [code]enabled[/code] is not required for this to work." msgstr "" -"更新光线的碰撞信æ¯ã€‚\n" -"使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç‰å¾…下一次[code]_physics_process[/" -"code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n" -"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚" +"更新射线的碰撞信æ¯ã€‚\n" +"ä½¿ç”¨æ¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç‰å¾…下一个 [code]_physics_process[/code] è°ƒ" +"用,例如,如果光线或其父级已更改状æ€ã€‚\n" +"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ¤åŠŸèƒ½ã€‚" #: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47 msgid "" @@ -57441,14 +58258,12 @@ msgid "" msgstr "光线相对于光线投射的 [code]position[/code]çš„ç›®æ ‡ç‚¹ï¼Œã€‚" #: doc/classes/RayCast.xml:114 -#, fuzzy msgid "If [code]true[/code], collision with [Area]s will be reported." -msgstr "如果[code]true[/code],将报告与[Area2D]的碰撞。" +msgstr "如果 [code]true[/code],将å馈与 [Area] 的碰撞。" #: doc/classes/RayCast.xml:117 -#, fuzzy msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported." -msgstr "如果[code]true[/code],会报告与[PhysicsBody2D]的碰撞。" +msgstr "如果 [code]true[/code],将å馈与 [PhysicsBody] 的碰撞。" #: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116 msgid "" @@ -57458,6 +58273,10 @@ msgid "" "masks]Collision layers and masks[/url] in the documentation for more " "information." msgstr "" +"光线的碰撞é®ç½©ã€‚åªæœ‰åœ¨é®ç½©ä¸å¯ç”¨è‡³å°‘一个碰撞层ä¸ç‰©ä½“,æ‰ä¼šè¢«æ£€æµ‹åˆ°ã€‚有关更多" +"ä¿¡æ¯ï¼Œè¯·å‚阅文档ä¸çš„ [url=https://docs.godotengine.org/zh_CN/stable/" +"tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层" +"和掩ç [/url]。" #: doc/classes/RayCast.xml:123 msgid "" @@ -57468,6 +58287,11 @@ 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" +"如果设置为 [code]Color(0.0, 0.0, 0.0)[/code](默认),则使用 [member " +"ProjectSettings.debug/shapes/collision/shape_color] ä¸è®¾ç½®çš„颜色。" #: doc/classes/RayCast.xml:127 msgid "" @@ -57476,17 +58300,19 @@ msgid "" "Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug " "shape to be visible at run-time." msgstr "" +"如果设置为 [code]1[/code],则将一æ¡çº¿ç”¨ä½œè°ƒè¯•形状。å¦åˆ™ï¼Œå°†ç»˜åˆ¶ä¸€ä¸ªæˆªæ–的金å—" +"å¡”æ¥è¡¨ç¤º [RayCast]。需è¦åœ¨ [b]调试[/b] èœå•ä¸å¯ç”¨å¯è§ç¢°æ’žå½¢çж [b]Visible " +"Collision Shapes[/b],以便调试形状在è¿è¡Œæ—¶å¯è§ã€‚" #: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119 msgid "If [code]true[/code], collisions will be reported." msgstr "如果 [code]true[/code],将报告碰撞。" #: doc/classes/RayCast.xml:133 -#, fuzzy msgid "" "If [code]true[/code], collisions will be ignored for this RayCast's " "immediate parent." -msgstr "如果 [code]true[/code]ï¼Œåˆ™æ¤ RayCast3D 的直接父级的碰撞将被忽略。" +msgstr "如果 [code]true[/code]ï¼Œåˆ™æ¤ RayCast 的直接父级的碰撞将被忽略。" #: doc/classes/RayCast2D.xml:7 msgid "" @@ -57518,7 +58344,6 @@ msgstr "" "用[method force_raycast_update]。" #: doc/classes/RayCast2D.xml:40 -#, fuzzy msgid "" "Updates the collision information for the ray. Use this method to update the " "collision information immediately instead of waiting for the next " @@ -57526,9 +58351,9 @@ msgid "" "changed state.\n" "[b]Note:[/b] [code]enabled[/code] is not required for this to work." msgstr "" -"更新光线的碰撞信æ¯ã€‚使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç‰å¾…下一次" -"[code]_physics_process[/code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n" -"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚" +"更新射线的碰撞信æ¯ã€‚ä½¿ç”¨æ¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç‰å¾…下一次 " +"[code]_physics_process[/code] 调用,例如,如果光线或其父级已更改状æ€ã€‚\n" +"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ¤åŠŸèƒ½ã€‚" #: doc/classes/RayCast2D.xml:101 msgid "" @@ -57555,15 +58380,15 @@ msgid "Ray shape for 3D collisions." msgstr "用于 3D 碰撞的射线形状。" #: doc/classes/RayShape.xml:7 -#, fuzzy msgid "" "Ray shape for 3D collisions, which can be set into a [PhysicsBody] or " "[Area]. A ray is not really a collision body; instead, it tries to separate " "itself from whatever is touching its far endpoint. It's often useful for " "characters." msgstr "" -"3D 碰撞的射线形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody3D] 或 [Area3D]ã€‚å°„çº¿å¹¶ä¸æ˜¯çœŸæ£çš„碰" -"撞体;相å,它试图将自己与接触其远端的任何东西分开。它通常对角色很有用。" +"用于3D碰撞的射线形状,它å¯ä»¥è¢«è®¾ç½®æˆä¸€ä¸ª[PhysicsBody]或[Area]。一æ¡å°„çº¿å¹¶ä¸æ˜¯" +"真æ£çš„碰撞体;然而,它试图将自己与其远端点接触的东西分开。这通常对角色很有" +"用。" #: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15 msgid "The ray's length." @@ -57587,20 +58412,19 @@ msgstr "" "任何东西分开。它通常对角色很有用。" #: doc/classes/Rect2.xml:4 -#, fuzzy msgid "2D axis-aligned bounding box." -msgstr "轴对é½åŒ…围盒。" +msgstr "2D 轴对é½è¾¹ç•Œæ¡†ã€‚" #: doc/classes/Rect2.xml:7 -#, fuzzy msgid "" "[Rect2] consists of a position, a size, and several utility functions. It is " "typically used for fast overlap tests.\n" "It uses floating-point coordinates.\n" "The 3D counterpart to [Rect2] is [AABB]." msgstr "" -"[Rect2] 由一个ä½ç½®ã€ä¸€ä¸ªå¤§å°å’Œå‡ 个实用功能组æˆã€‚它通常用于快速é‡å 测试。\n" -"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚" +"[Rect2] ç”±ä¸€ä¸ªåæ ‡ã€ä¸€ä¸ªå¤§å°å’Œå‡ 个实用函数组æˆã€‚它通常用于快速é‡å 测试。\n" +"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚\n" +"[Rect2] 在 3D ä¸å¯¹åº” [AABB]。" #: doc/classes/Rect2.xml:22 msgid "Constructs a [Rect2] by position and size." @@ -57629,40 +58453,54 @@ msgid "" msgstr "å¦‚æžœæ¤ [Rect2] 完全包å«å¦ä¸€ä¸ªï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." -msgstr "返回包å«ç»™å®šç‚¹çš„æ¤ [Rect2] 的扩展。" +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" +msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "返回 [Rect2] é¢ç§¯ã€‚" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "返回 [Rect2] çš„å‰¯æœ¬ï¼Œè¯¥å‰¯æœ¬å‘æ‰€æœ‰è¾¹å¢žé•¿äº†ç»™å®šæ•°é‡çš„å•ä½ã€‚" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "返回 [Rect2] 的副本,该副本分别å‘å„边增长了给定数é‡çš„å•ä½ã€‚" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "返回[Rect2]å‘[enum Margin]æ–¹å‘增长给定数é‡å•ä½çš„副本。" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "如果[Rect2]为flat或空,则返回[code]true[/code]。" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." -msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。" +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." +msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -57674,7 +58512,7 @@ msgstr "" "如果 [code]include_borders[/code] 是 [code]true[/code],如果它们的边界接触," "å³ä½¿æ²¡æœ‰äº¤å‰ï¼Œå®ƒä»¬ä¹Ÿä¼šè¢«è§†ä¸ºé‡å 。" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " @@ -57683,7 +58521,7 @@ msgstr "" "通过在æ¯ä¸ªç»„件上调用 [code]is_equal_approx[/code]ï¼Œå¦‚æžœæ¤ [Rect2] å’Œ " "[code]rect[/code] 大致相ç‰ï¼Œåˆ™è¿”回 [code]true[/code]。" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "返回一个更大的 [Rect2],其ä¸åŒ…å«è¿™ä¸ª [Rect2] å’Œ [code]b[/code]。" @@ -57708,7 +58546,6 @@ msgid "Base class for reference-counted objects." msgstr "引用计数对象的基类。" #: doc/classes/Reference.xml:7 -#, fuzzy msgid "" "Base class for any object that keeps a reference count. [Resource] and many " "other helper objects inherit this class.\n" @@ -57724,11 +58561,13 @@ msgid "" "free references that are no longer in use. This means that unused references " "will linger on for a while before being removed." msgstr "" -"ä»»ä½•ä¿æŒå¼•用计数的对象的基类。[Resource]和许多其他辅助对象都继承了这个类。\n" -"与[Object]ä¸åŒçš„æ˜¯ï¼Œå¼•用ä¿ç•™äº†ä¸€ä¸ªå†…éƒ¨å¼•ç”¨è®¡æ•°å™¨ï¼Œå› æ¤å½“且仅当它们ä¸å†è¢«ä½¿ç”¨" -"æ—¶å°±ä¼šè¢«è‡ªåŠ¨é‡Šæ”¾ã€‚å› æ¤ï¼Œå¼•用ä¸éœ€è¦é€šè¿‡[method Object.free]手动释放。\n" -"在ç»å¤§å¤šæ•°çš„使用情况下,实例化和使用[Reference]æ´¾ç”Ÿçš„ç±»åž‹å°±æ˜¯ä½ éœ€è¦åšçš„全部事" -"æƒ…ã€‚è¿™ä¸ªç±»ä¸æä¾›çš„æ–¹æ³•åªé€‚用于高级用户,如果误用的è¯ä¼šå¯¼è‡´é—®é¢˜ã€‚" +"ä»»ä½•ä¿æŒå¼•用计数对象的基类。 [Resource] 和许多其他辅助对象继承了这个类。\n" +"与其他 [Object] 类型ä¸åŒï¼ŒReferences ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…" +"åœ¨é‚£æ—¶è‡ªåŠ¨é‡Šæ”¾ã€‚å› æ¤ï¼Œä¸éœ€è¦ä½¿ç”¨ [method Object.free] 手动释放引用。\n" +"在ç»å¤§å¤šæ•°ç”¨ä¾‹ä¸ï¼Œæ‚¨åªéœ€è¦å®žä¾‹åŒ–和使用 [Reference] 派生类型。æ¤ç±»ä¸æä¾›çš„æ–¹æ³•" +"仅适用于高级用户,如果误用å¯èƒ½ä¼šå¯¼è‡´é—®é¢˜ã€‚\n" +"[b]注æ„:[/b]在C#ä¸ï¼Œå¼•用ä¸å†ä½¿ç”¨åŽä¸ä¼šç«‹å³é‡Šæ”¾ã€‚相å,垃圾收集将定期è¿è¡Œå¹¶é‡Š" +"放ä¸å†ä½¿ç”¨çš„引用。这æ„å‘³ç€æœªä½¿ç”¨çš„å¼•ç”¨ä¼šåœ¨è¢«åˆ é™¤ä¹‹å‰åœç•™ä¸€æ®µæ—¶é—´ã€‚" #: doc/classes/Reference.xml:19 msgid "" @@ -57764,15 +58603,14 @@ msgid "Reference frame for GUI." msgstr "GUI的引用框架。" #: doc/classes/ReferenceRect.xml:7 -#, fuzzy msgid "" "A rectangle box that displays only a [member border_color] border color " "around its rectangle. [ReferenceRect] has no fill [Color]. If you need to " "display a rectangle filled with a solid color, consider using [ColorRect] " "instead." msgstr "" -"一个矩形框,åªåœ¨å…¶çŸ©å½¢å‘¨å›´æ˜¾ç¤ºä¸€ä¸ª[member border_color]边框颜色。" -"[ReferenceRect]没有填充[Color]。" +"矩形框,仅在其矩形周围显示 [member border_color] 边框颜色。 [ReferenceRect] " +"没有填充 [Color]ã€‚å¦‚æžœä½ éœ€è¦æ˜¾ç¤ºå¡«å……纯色的矩形,请考虑使用 [ColorRect] 。" #: doc/classes/ReferenceRect.xml:15 msgid "Sets the border [Color] of the [ReferenceRect]." @@ -57782,7 +58620,7 @@ msgstr "设置 [ReferenceRect] 的边框 [Color]。" msgid "" "Sets the border width of the [ReferenceRect]. The border grows both inwards " "and outwards with respect to the rectangle box." -msgstr "" +msgstr "设置 [ReferenceRect] 的边框宽度。边界相对于矩形框å‘内和å‘外生长。" #: doc/classes/ReferenceRect.xml:21 msgid "" @@ -57797,7 +58635,6 @@ msgid "Captures its surroundings to create reflections." msgstr "æ•æ‰å…¶å‘¨å›´çš„çŽ¯å¢ƒï¼Œä»¥åˆ›é€ å射。" #: doc/classes/ReflectionProbe.xml:7 -#, fuzzy msgid "" "Capture its surroundings as a dual paraboloid image, and stores versions of " "it with increasing levels of blur to simulate different material " @@ -57816,17 +58653,22 @@ msgid "" "the same time for a single mesh. If possible, split up large meshes that " "span over multiple reflection probes into smaller ones." msgstr "" -"将其周围环境æ•获为立方体图,并å˜å‚¨å…¶ç‰ˆæœ¬ï¼Œä½¿å…¶æ¨¡ç³Šç¨‹åº¦å¢žåŠ ï¼Œä»¥æ¨¡æ‹Ÿä¸åŒçš„ææ–™" -"粗糙度。\n" -"[ReflectionProbe] 用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž [GIProbe] å’Œå±å¹•" -"空间å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]ä¸" -"çš„æ‰€æœ‰å¯¹è±¡ï¼Œå› æ¤æ›´æ–°å®ƒä»¬å¯èƒ½ç›¸å½“昂贵。最好用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°å®ƒä»¬ä¸€æ¬¡ï¼Œç„¶åŽ" -"放下它们。" +"å°†å…¶å‘¨å›´çŽ¯å¢ƒæ•æ‰ä¸ºåŒæŠ›ç‰©é¢å›¾åƒï¼Œå¹¶ä»¥è¶Šæ¥è¶Šé«˜çš„æ¨¡ç³Šåº¦å˜å‚¨å…¶ç‰ˆæœ¬ï¼Œä»¥æ¨¡æ‹Ÿä¸åŒçš„" +"æè´¨ç²—糙度。\n" +"[ReflectionProbe]用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž[GIProbe]å’Œå±å¹•空" +"é—´å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]内的" +"所有对象,所以更新它们å¯èƒ½ç›¸å½“消耗资æºã€‚最好是用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°ä¸€æ¬¡ï¼Œç„¶åŽ" +"å°±ä¸åŽ»ç®¡äº†ã€‚\n" +"[b]注æ„:[/b] 默认情况下,Godotåªä¼šæ¸²æŸ“16个åå°„æŽ¢é’ˆã€‚å¦‚æžœéœ€è¦æ›´å¤šï¼Œå¯ä»¥å¢žåР图" +"集的细分数é‡ã€‚这个设置å¯ä»¥åœ¨[member ProjectSettings.rendering/quality/" +"reflections/atlas_subdiv]找到。\n" +"[b]注æ„:[/b] å¯¹äºŽä¸€ä¸ªç½‘æ ¼ï¼ŒGLES2åŽç«¯åªèƒ½åŒæ—¶æ˜¾ç¤ºä¸¤ä¸ªå射探针。如果å¯èƒ½çš„è¯ï¼Œ" +"把跨越多个åå°„æŽ¢é’ˆçš„å¤§ç½‘æ ¼åˆ†å‰²æˆå°ç½‘æ ¼ã€‚" #: doc/classes/ReflectionProbe.xml:13 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/reflection_probes.html" #: doc/classes/ReflectionProbe.xml:19 msgid "" @@ -57838,7 +58680,6 @@ msgstr "" "得在矩形房间ä¸çš„åå°„çœ‹èµ·æ¥æ›´æ£ç¡®ã€‚" #: doc/classes/ReflectionProbe.xml:22 -#, fuzzy msgid "" "Sets the cull mask which determines what objects are drawn by this probe. " "Every [VisualInstance] with a layer included in this cull mask will be " @@ -57846,9 +58687,9 @@ msgid "" "likely to take up a lot of space in the reflection in order to save on " "rendering cost." msgstr "" -"设置剔除蒙版,它决定了探测所绘制的对象。æ¯ä¸ªåŒ…å«åœ¨è¿™ä¸ªå‰”除蒙版ä¸çš„图层" -"[VisualInstance3D]éƒ½å°†è¢«æŽ¢é’ˆæ¸²æŸ“ã€‚ä¸ºäº†èŠ‚çœæ¸²æŸ“æˆæœ¬ï¼Œæœ€å¥½åªåŒ…å«å¤§çš„ç‰©ä½“ï¼Œå› ä¸º" -"它们很å¯èƒ½ä¼šå 用大é‡çš„å射空间。" +"设置剔除é®ç½©ï¼Œç¡®å®šæ¤æŽ¢é’ˆç»˜åˆ¶çš„对象。这个剔除蒙版ä¸åŒ…å«ä¸€ä¸ªå±‚çš„æ¯ä¸ª " +"[VisualInstance] 都将由探测器渲染。最好åªåŒ…å«å¯èƒ½åœ¨åå°„ä¸å 用大é‡ç©ºé—´çš„大物" +"ä½“ï¼Œä»¥èŠ‚çœæ¸²æŸ“æˆæœ¬ã€‚" #: doc/classes/ReflectionProbe.xml:25 msgid "" @@ -57878,7 +58719,7 @@ msgstr "定义å射强度。" msgid "" "Sets the ambient light color to be used when this probe is set to [member " "interior_enable]." -msgstr "" +msgstr "è®¾ç½®çŽ¯å¢ƒå…‰çš„é¢œè‰²ï¼Œå½“æ¤æŽ¢é’ˆè¢«è®¾ç½®ä¸º[member interior_enable]时使用。" #: doc/classes/ReflectionProbe.xml:37 msgid "" @@ -57886,22 +58727,24 @@ msgid "" "light for this reflection probe when set to [member interior_enable]. Useful " "so that ambient light matches the color of the room." msgstr "" +"当设置为 [member internal_enable] 时,设置å射对该å射探测器的环境光的影å“程" +"度的贡献值。环境光与房间的颜色相匹é…ä¸å¾ˆæœ‰ç”¨ã€‚" #: doc/classes/ReflectionProbe.xml:40 msgid "" "Sets the energy multiplier for this reflection probe's ambient light " "contribution when set to [member interior_enable]." msgstr "" +"当设置为[member interior_enable]时,为该å射探针的环境光贡献设置能é‡ä¹˜æ•°ã€‚" #: doc/classes/ReflectionProbe.xml:43 -#, fuzzy msgid "" "If [code]true[/code], reflections will ignore sky contribution. Ambient " "lighting is then controlled by the [code]interior_ambient_*[/code] " "properties." msgstr "" -"如果 [code]true[/code],åå°„å°†å¿½ç•¥å¤©ç©ºå› ç´ ã€‚ç‰æ•ˆäºŽ [member ReflectionProbe." -"interior]。" +"如果[code]true[/code],å射将忽略天空的贡献。然åŽçŽ¯å¢ƒç…§æ˜Žç”±" +"[code]internal_ambient_*[/code]属性控制。" #: doc/classes/ReflectionProbe.xml:46 msgid "" @@ -57924,9 +58767,8 @@ msgstr "" "ALWAYS](一直)。" #: doc/classes/ReflectionProbe.xml:57 -#, fuzzy msgid "Update the probe once on the next frame." -msgstr "更新一次视窗,然åŽè®¾ç½®ä¸ºç¦ç”¨ã€‚" +msgstr "在下一帧更新一次探针。" #: doc/classes/ReflectionProbe.xml:60 msgid "" @@ -57942,7 +58784,6 @@ msgid "Class for searching text for patterns using regular expressions." msgstr "使用æ£åˆ™è¡¨è¾¾å¼æœç´¢æ–‡æœ¬çš„类。" #: modules/regex/doc_classes/RegEx.xml:7 -#, fuzzy msgid "" "A regular expression (or regex) is a compact language that can be used to " "recognise strings that follow a specific pattern, such as URLs, email " @@ -58009,11 +58850,11 @@ msgid "" "[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test " "regular expressions online." msgstr "" -"æ£åˆ™è¡¨è¾¾å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘çš„è¯è¨€ï¼Œå¯ç”¨äºŽè¯†åˆ«ç¬¦åˆç‰¹å®šè¡¨è¾¾å¼çš„å—符串,如" +"æ£åˆ™è¡¨è¾¾å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘çš„è¯è¨€ï¼Œå¯ç”¨äºŽè¯†åˆ«éµå¾ªç‰¹å®šæ¨¡å¼çš„å—符串,如" "URLã€ç”µå邮件地å€ã€å®Œæ•´å¥åç‰ã€‚例如,一个[code]ab[0-9][/code]çš„æ£åˆ™è¡¨è¾¾å¼å¯ä»¥" "找到[code]ab[/code]åŽé¢è·Ÿç€[code]0[/code]到[code]9[/code]的任何数å—çš„å—符串。" "è¦æƒ³æ›´æ·±å…¥åœ°äº†è§£ï¼Œä½ å¯ä»¥å¾ˆå®¹æ˜“地在互è”网上找到å„ç§æ•™ç¨‹å’Œè¯¦ç»†è§£é‡Šã€‚\n" -"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile]对其进行æœç´¢æ¨¡å¼çš„编译。\n" +"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile] 对其进行æœç´¢æ¨¡å¼çš„编译。\n" "[codeblock]\n" "var regex = RegEx.new()\n" "regex.compile(\"\\\\w-(\\\\d+)\")\n" @@ -58021,7 +58862,7 @@ msgstr "" "在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\\\d" "+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\\\" "\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n" -"使用[method search]ï¼Œä½ å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸æ‰¾åˆ°è¡¨è¾¾å¼ã€‚如果找到一个表达å¼ï¼Œå°†è¿”" +"使用 [method search] ï¼Œä½ å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”" "回[RegExMatch]ï¼Œä½ å¯ä»¥ä½¿ç”¨[method RegExMatch.get_string]å’Œ[method RegExMatch." "get_start]ç‰æ–¹æ³•检索结果的细节。\n" "[codeblock]\n" @@ -58029,10 +58870,10 @@ msgstr "" "regex.compile(\"\\\\w-(\\\\d+)\")\n" "var result = regex.search(\"abc n-0123\")\n" "if result:\n" -" print(result.get_string()) # 这会输出n-0123\n" +" print(result.get_string()) # Would print n-0123\n" "[/codeblock]\n" "æ•获组的结果[code]()[/code]å¯ä»¥é€šè¿‡å‘[RegExMatch]ä¸çš„å„ç§æ–¹æ³•ä¼ é€’ç»„å·æ¥æ£€ç´¢ã€‚" -"组0是默认的,并且将总是指整个表达å¼ã€‚在上é¢çš„例åä¸ï¼Œè°ƒç”¨[code]result." +"默认是组0,并且将总是指整个模å¼ã€‚在上é¢çš„例åä¸ï¼Œè°ƒç”¨[code]result." "get_string(1)[/code]会得到[code]0123[/code]。\n" "这个版本的RegEx也支æŒå‘½åçš„æ•获组,åç§°å¯ä»¥ç”¨æ¥æ£€ç´¢ç»“果。如果两个或更多的组有" "相åŒçš„å称,那么这个åç§°å°†åªæŒ‡ç¬¬ä¸€ä¸ªæœ‰åŒ¹é…的组。\n" @@ -58041,26 +58882,26 @@ msgstr "" "regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n" "var result = regex.search(\"the number is x2f\")\n" "if result:\n" -" print(result.get_string(\"digit\")) # 这会输出 2f\n" +" print(result.get_string(\"digit\")) # Would print 2f\n" "[/codeblock]\n" -"å¦‚æžœä½ éœ€è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]ä¼šç”Ÿæˆæ‰€æœ‰ä¸é‡å 的结果的列表。为了" -"方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n" +"å¦‚æžœä½ éœ€è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]会生æˆä¸€ä¸ªæ‰€æœ‰ä¸é‡å 的结果列表。为" +"了方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n" "[codeblock]\n" "for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n" " print(result.get_string(\"digit\"))\n" -"# 这会输出 01 03 0 3f 42\n" +"# Would print 01 03 0 3f 42\n" "[/codeblock]\n" "[b]使用RegEx分割å—符串的例å:[/b]\n" "[codeblock]\n" "var regex = RegEx.new()\n" "regex.compile(\"\\\\S+\") # Negated whitespace character class.\n" "var results = []\n" -"for match in regex.search_all(\"One Two \\n\\tThree\"):\n" -" results.push_back(match.get_string())\n" -"# `results`æ•°ç»„çŽ°åœ¨åŒ…å« \"One\", \"Two\", \"Three\".\n" +"for result in regex.search_all(\"One Two \\n\\tThree\"):\n" +" results.push_back(result.get_string())\n" +"# The `results` array now contains \"One\", \"Two\", \"Three\".\n" "[/codeblock]\n" "[b]注æ„:[/b] Godotçš„regex实现是基于[url=https://www.pcre.org/]PCRE2[/url] " -"åº“ã€‚ä½ å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„表达å¼å‚考[url=https://www.pcre.org/current/doc/html/" +"åº“ã€‚ä½ å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„æ¨¡å¼å‚考[url=https://www.pcre.org/current/doc/html/" "pcre2pattern.html]这里[/url]。\n" "[b]æç¤ºï¼š[/b] ä½ å¯ä»¥ä½¿ç”¨[url=https://regexr.com/]Regexr[/url]æ¥åœ¨çº¿æµ‹è¯•æ£åˆ™è¡¨" "è¾¾å¼ã€‚" @@ -58331,8 +59172,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/" +"resources.html" #: doc/classes/Resource.xml:18 msgid "" @@ -59018,23 +59859,40 @@ msgid "" "emoji) are [i]not[/i] supported on Windows. They will display as unknown " "characters instead. This will be resolved in Godot 4.0." msgstr "" +"富文本å¯ä»¥åŒ…å«è‡ªå®šä¹‰æ–‡æœ¬ã€å—体ã€å›¾åƒå’Œä¸€äº›åŸºæœ¬æ ¼å¼ã€‚æ ‡ç¾å°†è¿™äº›ä½œä¸ºå†…éƒ¨æ ‡ç¾å †" +"æ ˆè¿›è¡Œç®¡ç†ã€‚它还å¯ä»¥é€‚应给定的宽度/高度。\n" +"[b]注æ„:[/b] 为 [member bbcode_text] è®¾ç½®å†…å®¹ä¼šæ¸…é™¤æ ‡ç¾å †æ ˆå¹¶ä»Žå±žæ€§çš„内容ä¸" +"é‡å»ºå®ƒã€‚对 [member bbcode_text] 所åšçš„ä»»ä½•ç¼–è¾‘éƒ½å°†åˆ é™¤ä»Žå…¶ä»–æ‰‹åŠ¨æ¥æºï¼ˆä¾‹å¦‚ " +"[method append_bbcode] å’Œ [code]push_*[/code] / [method pop] 方法)所åšçš„å…ˆå‰" +"编辑。\n" +"[b]注æ„:[/b] RichTextLabel 䏿”¯æŒçº ç¼ çš„ BBCode æ ‡ç¾ã€‚例如,ä¸è¦ä½¿ç”¨ [code]" +"[b]bold[i]bold italic[/b]italic[/i][/code],而是使用 [code][b]bold[i]bold " +"italic[/i][/ b][i]italic[/i][/code]。\n" +"[b]注æ„:[/b] [code]push_*/pop[/code] 函数ä¸ä¼šå½±å“BBCode。\n" +"[b]注æ„:[/b] 与 [Label] ä¸åŒï¼ŒRichTextLabel 没有 [i] 属性 [/i] 将文本水平对" +"é½åˆ°ä¸å¿ƒã€‚相å,å¯ç”¨ [member bbcode_enabled] 并将文本括在 [code][center][/" +"code] æ ‡ç¾ä¸ï¼Œå¦‚下所示:[code][center]Example[/center][/code]。目å‰ä¹Ÿæ²¡æœ‰åž‚ç›´" +"坹齿–‡æœ¬çš„内置方法,但这å¯ä»¥é€šè¿‡ä¾èµ–锚点/容器和 [member fit_content_height] " +"å±žæ€§æ¥æ¨¡æ‹Ÿã€‚\n" +"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode å—符(例如大多数表情符å·ï¼‰" +"在 Windows 上 [i] 䏿”¯æŒ [/i]。它们将显示为未知å—符。这将在 Godot 4.0 ä¸è§£" +"决。" #: doc/classes/RichTextLabel.xml:16 msgid "https://godotengine.org/asset-library/asset/132" msgstr "https://godotengine.org/asset-library/asset/132" #: doc/classes/RichTextLabel.xml:26 -#, fuzzy msgid "" "Adds an image's opening and closing tags to the tag stack, optionally " "providing a [code]width[/code] and [code]height[/code] to resize the image.\n" "If [code]width[/code] or [code]height[/code] is set to 0, the image size " "will be adjusted in order to keep the original aspect ratio." msgstr "" -"将图åƒçš„å¼€å¤´å’Œç»“å°¾æ ‡ç¾æ·»åŠ åˆ°æ ‡ç¾å †ä¸ï¼Œå¯é€‰æ‹©æä¾›[code]width[/code]å’Œ" -"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ï¼Œå¹¶æä¾›[code]color[/code]æ¥ä¿®æ”¹å›¾åƒã€‚\n" -"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°å°†è¢«è°ƒæ•´ï¼Œä»¥" -"ä¿æŒåŽŸå§‹é•¿å®½æ¯”ã€‚" +"将图åƒçš„å¼€å¤´å’Œç»“å°¾æ ‡ç¾æ·»åŠ åˆ°æ ‡ç¾å †ä¸ï¼Œå¯ä»¥é€‰æ‹©æä¾›[code]width[/code]å’Œ" +"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ã€‚\n" +"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°è¢«è°ƒæ•´ä¸ºä¿æŒ" +"原始长宽比。" #: doc/classes/RichTextLabel.xml:34 msgid "Adds raw non-BBCode-parsed text to the tag stack." @@ -59051,6 +59909,12 @@ msgid "" "a future method call, append the [member bbcode_text] instead of using " "[method append_bbcode]." msgstr "" +"è§£æž [code]bbcode[/code] å¹¶æ ¹æ®éœ€è¦å°†æ ‡ç¾æ·»åŠ åˆ°æ ‡ç¾å †æ ˆä¸ã€‚返回解æžç»“果,æˆåŠŸ" +"则返回[constant OK]。\n" +"[b]注æ„:[/b] ä½¿ç”¨æ¤æ–¹æ³•ï¼Œæ‚¨æ— æ³•å…³é—在之å‰çš„ [method append_bbcode] è°ƒç”¨ä¸æ‰“" +"å¼€çš„æ ‡ç¾ã€‚è¿™æ ·åšæ˜¯ä¸ºäº†æé«˜æ€§èƒ½ï¼Œç‰¹åˆ«æ˜¯åœ¨æ›´æ–°å¤§åž‹ RichTextLabels æ—¶ï¼Œå› ä¸ºæ¯æ¬¡" +"é‡å»ºæ•´ä¸ª BBCode 会更慢。如果您ç»å¯¹éœ€è¦åœ¨å°†æ¥çš„æ–¹æ³•调用ä¸å…³é—æ ‡ç¾ï¼Œè¯·é™„åŠ " +"[member bbcode_text] è€Œä¸æ˜¯ä½¿ç”¨ [method append_bbcode]。" #: doc/classes/RichTextLabel.xml:48 msgid "Clears the tag stack and sets [member bbcode_text] to an empty string." @@ -59079,6 +59943,9 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回垂直滚动æ¡ã€‚\n" +"[b]è¦å‘Šï¼š[/b] è¿™æ˜¯ä¸€ä¸ªå¿…éœ€çš„å†…éƒ¨èŠ‚ç‚¹ï¼Œåˆ é™¤å’Œé‡Šæ”¾å®ƒå¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望" +"éšè—它或其任何å项,请使用它们的 [member CanvasItem.visible] 属性。" #: doc/classes/RichTextLabel.xml:79 msgid "Returns the number of visible lines." @@ -59248,9 +60115,11 @@ msgid "" "add_text] will reset this to [code]false[/code]. Use instead [method " "append_bbcode] to preserve BBCode formatting." msgstr "" +"如果 [code]true[/code]ï¼Œæ ‡ç¾ä½¿ç”¨ BBCode æ ¼å¼ã€‚\n" +"[b]注æ„:[/b] å°è¯•使用 [method add_text] 更改 [RichTextLabel] 的文本会将其é‡" +"置为 [code]false[/code]。改用 [method append_bbcode] æ¥ä¿ç•™ BBCode æ ¼å¼ã€‚" #: doc/classes/RichTextLabel.xml:245 -#, fuzzy msgid "" "The label's text in BBCode format. Is not representative of manual " "modifications to the internal tag stack. Erases changes made by other " @@ -59261,11 +60130,12 @@ msgid "" "append_bbcode] for adding text instead, unless you absolutely need to close " "a tag that was opened in an earlier method call." msgstr "" -"æ ‡ç¾çš„æ–‡æœ¬ä¸ºBBCodeæ ¼å¼ã€‚ä¸ä»£è¡¨å¯¹å†…éƒ¨æ ‡ç¾æ ˆçš„æ‰‹åŠ¨ä¿®æ”¹ã€‚åœ¨ç¼–è¾‘æ—¶ï¼Œä¼šåˆ é™¤å…¶ä»–æ–¹" -"法所åšçš„修改。\n" -"[b]注æ„:[/b] ä¸å»ºè®®ä½¿ç”¨[code]+=[/code]æ“作符和[code]bbcode_text[/code](例如" -"[code]bbcode_text += \"some string\"[/code]ï¼‰ï¼Œå› ä¸ºå®ƒå–代了整个文本,会导致速" -"度é™ä½Žã€‚使用[method append_bbcode]æ¥ä»£æ›¿æ·»åŠ æ–‡æœ¬ã€‚" +"BBCode æ ¼å¼çš„æ ‡ç¾æ–‡æœ¬ã€‚ä¸ä»£è¡¨å¯¹å†…éƒ¨æ ‡ç¾æ ˆçš„æ‰‹åŠ¨ä¿®æ”¹ã€‚ç¼–è¾‘æ—¶æ“¦é™¤é€šè¿‡å…¶ä»–æ–¹æ³•æ‰€" +"åšçš„æ›´æ”¹ã€‚\n" +"[b]注æ„:[/b] ä¸å»ºè®®å°† [code]+=[/code] è¿ç®—符与 [code]bbcode_text[/code] 一起" +"使用(例如 [code]bbcode_text += \"some string\"[/code]ï¼‰ï¼Œå› ä¸ºå®ƒä¼šæ›¿æ¢æ•´ä¸ªæ–‡" +"本并å¯èƒ½å¯¼è‡´é€Ÿåº¦å˜æ…¢ã€‚使用 [method append_bbcode] ä»£æ›¿æ·»åŠ æ–‡æœ¬ï¼Œé™¤éžä½ 必须关" +"é—åœ¨å…ˆå‰æ–¹æ³•è°ƒç”¨ä¸æ‰“å¼€çš„æ ‡ç¾ã€‚" #: doc/classes/RichTextLabel.xml:249 msgid "" @@ -59349,17 +60219,15 @@ msgstr "" "[member bbcode_text]。" #: doc/classes/RichTextLabel.xml:284 -#, fuzzy msgid "" "The restricted number of characters to display in the label. If [code]-1[/" "code], all characters will be displayed.\n" "[b]Note:[/b] Setting this property updates [member percent_visible] based on " "current [method get_total_character_count]." msgstr "" -"è¦æ˜¾ç¤ºçš„å—符范围,数值为0.0å’Œ1.0之间的[float]。当分é…一个超出范围的值时,它和" -"分é…1.0æ˜¯ä¸€æ ·çš„ã€‚\n" -"[b]注æ„:[/b] è®¾ç½®è¿™ä¸ªå±žæ€§ä¼šæ ¹æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°" -"[member visible_characters]。" +"åœ¨æ ‡ç¾ä¸æ˜¾ç¤ºçš„å—符数é™åˆ¶ã€‚如果[code]-1[/code],将显示所有å—符。\n" +"[b]注æ„:[/b] 设置æ¤å±žæ€§ä¼šæ ¹æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°" +"[member percent_visible]。" #: doc/classes/RichTextLabel.xml:292 msgid "" @@ -59488,15 +60356,14 @@ msgid "Handle for a [Resource]'s unique ID." msgstr "[Resource] 的唯一 ID çš„å¥æŸ„。" #: doc/classes/RID.xml:7 -#, fuzzy msgid "" "The RID type is used to access the unique integer ID of a resource. They are " "opaque, which means they do not grant access to the associated resource by " "themselves. They are used by and with the low-level Server classes such as " "[VisualServer]." msgstr "" -"该RID类型用于访问资æºçš„唯一整数ID。它们是ä¸é€æ˜Žçš„,这æ„味ç€å®ƒä»¬æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹" -"相关资æºçš„访问。它们被低级别的æœåŠ¡å™¨ç±»ä½¿ç”¨ï¼Œå¦‚[RenderingServer]。" +"RID类型用于访问资æºçš„唯一整数ID。它们ä¸é€æ˜Žï¼Œè¿™æ„味ç€å…¶æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹ç›¸å…³èµ„æº" +"的访问。它们被低级别的æœåŠ¡ç±»ä½¿ç”¨ï¼Œå¦‚[VisualServer]。" #: doc/classes/RID.xml:16 msgid "" @@ -59750,7 +60617,7 @@ msgid "" "function, if defined." msgstr "" "如果 [code]true[/code],则该物体的内力积分将被ç¦ç”¨ï¼ˆå¦‚é‡åŠ›æˆ–ç©ºæ°”æ‘©æ“¦ï¼‰ã€‚é™¤äº†" -"碰撞å“åº”ä¹‹å¤–ï¼Œèº«ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚" +"碰撞å“åº”ä¹‹å¤–ï¼Œç‰©ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚" "果已定义)。" #: doc/classes/RigidBody.xml:158 @@ -59794,9 +60661,9 @@ msgid "" "different granularity. Use [method _integrate_forces] as your process loop " "for precise control of the body state." msgstr "" -"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b]ï¼Œå› ä¸ºç‰©ç†å¦å¯èƒ½åœ¨å¦" -"一个线程ä¸è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒé—´éš”çš„è¿è¡Œã€‚使用[method _integrate_forces]ä½œä¸ºä½ çš„" -"进程循环,以精确控制身体状æ€ã€‚" +"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b]ï¼Œå› ä¸ºç‰©ç†å¯èƒ½åœ¨å¦ä¸€" +"个线程ä¸è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒçš„间隔。使用[method _integrate_forces]ä½œä¸ºä½ çš„è¿›ç¨‹å¾ª" +"环,以精确控制物体状æ€ã€‚" #: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149 msgid "The body's mass." @@ -59835,7 +60702,6 @@ msgstr "" "置。" #: doc/classes/RigidBody.xml:192 -#, fuzzy msgid "" "Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. " "Requires [member contact_monitor] to be set to [code]true[/code] and [member " @@ -59844,15 +60710,14 @@ msgid "" "[code]body[/code] the [Node], if it exists in the tree, of the other " "[PhysicsBody] or [GridMap]." msgstr "" -"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 " -"[code]true[/code] å¹¶å°† [member contacts_reported] 设置为足够高以检测所有碰" -"撞。\n" -"æ¤ä¿¡å·ä¸ä»…接收与æ¤ç¢°æ’žçš„物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“" -"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 " -"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。" +"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]å‘生碰撞时触å‘。需è¦å°†[member " +"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置" +"得足够高以检测所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检测" +"到。\n" +"[code]body[/code]çš„[Node],如果它å˜åœ¨äºŽæ ‘ä¸ï¼Œåˆ™æ˜¯å…¶ä»–[PhysicsBody]或[GridMap]" +"的节点。" #: doc/classes/RigidBody.xml:199 -#, fuzzy msgid "" "Emitted when the collision with another [PhysicsBody] or [GridMap] ends. " "Requires [member contact_monitor] to be set to [code]true[/code] and [member " @@ -59861,15 +60726,14 @@ msgid "" "[code]body[/code] the [Node], if it exists in the tree, of the other " "[PhysicsBody] or [GridMap]." msgstr "" -"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 " -"[code]true[/code] å¹¶å°† [member contacts_reported] 设置为足够高以检测所有碰" -"撞。\n" -"æ¤ä¿¡å·ä¸ä»…接收与æ¤ç¢°æ’žçš„物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“" -"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 " -"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。" +"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘。需è¦å°†[member " +"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置" +"得足够高以检测到所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检" +"测到。\n" +"[code]body[/code]çš„[Node],如果它å˜åœ¨äºŽæ ‘ä¸ï¼Œåˆ™æ˜¯å…¶ä»–[PhysicsBody]或[GridMap]" +"的节点。" #: doc/classes/RigidBody.xml:209 -#, fuzzy msgid "" "Emitted when one of this RigidBody's [Shape]s collides with another " "[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to " @@ -59892,18 +60756,23 @@ msgid "" "[ConcavePolygonShape] with Bullet physics if you need shape indices." msgstr "" "当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘" -"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]" -"有碰撞形状[Shape],就会检测到[GridMap]。\n" -"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„" -"[CollisionObject]çš„RID。\n" -"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘" -"ä¸ã€‚\n" -"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]" -"çš„[Shape]的索引。\n" -"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。" +"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code],且[member " +"contacts_reported]设置的足够高以检测所有碰撞。如果[MeshLibrary]有碰撞形状" +"[Shape],就会检测到[GridMap]。\n" +"[code]body_id[/code]ç”±[PhysicsServer]使用的其他[PhysicsBody]或[MeshLibrary]çš„" +"[CollisionObject]çš„[RID]。\n" +"[code]body[/code] å…¶ä»–[PhysicsBody]或[GridMap]çš„[Node](如果它å˜åœ¨äºŽæ ‘ä¸)。\n" +"[code]body_shape_index[/code] ç”±[PhysicsServer]使用的其他[PhysicsBody]或" +"[GridMap]çš„[Shape]的索引。用 [code]body." +"shape_owner_get_owner(body_shape_index)[/code]èŽ·å– [CollisionShape] 节点。\n" +"[code]local_shape[/code] ç”±[PhysicsServer]使用的这个刚体(RigidBody)çš„[Shape]" +"的索引。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获å–" +"[CollisionShape]节点。\n" +"[b]注æ„:[/b]当使用[ConcavePolygonShape]时,对于å弹的物ç†è¿ç®—æ— æ³•è¯†åˆ«å½¢çŠ¶ç´¢" +"å¼•ã€‚å¦‚æžœä½ éœ€è¦å½¢çŠ¶æŒ‡æ•°ï¼Œåœ¨ä½¿ç”¨[ConcavePolygonShape]和对于å弹的物ç†è¿ç®—时,ä¸" +"è¦ä½¿ç”¨å¤šä¸ª[CollisionShape]。" #: doc/classes/RigidBody.xml:223 -#, fuzzy msgid "" "Emitted when the collision between one of this RigidBody's [Shape]s and " "another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member " @@ -59926,16 +60795,25 @@ msgid "" "[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a " "[ConcavePolygonShape] with Bullet physics if you need shape indices." msgstr "" -"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘" -"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]" -"有碰撞形状[Shape],就会检测到[GridMap]。\n" -"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„" -"[CollisionObject]çš„RID。\n" -"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘" +"å½“æ¤ RigidBody çš„ [Shape] 之一与å¦ä¸€ä¸ª [PhysicsBody] 或 [GridMap] çš„ [Shape] " +"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶å‘出。需è¦å°† [member contact_monitor] 设置为 [code]true[/" +"code] å¹¶å°† [member contacts_reported] 设置为足够高以检测所有碰撞。如果 " +"[MeshLibrary] 有碰撞 [Shape],就会检测到 [GridMap]。\n" +"[code]body_rid[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 " +"[MeshLibrary] çš„ [CollisionObject] çš„ [RID]ã€‚å¦‚æžœç½‘æ ¼å…·æœ‰ [Shape],则检测到 " +"[GridMap]。\n" +"[code]body[/code] å…¶ä»– [PhysicsBody] 或 [GridMap] çš„ [Node],如果它å˜åœ¨äºŽæ ‘" "ä¸ã€‚\n" -"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]" -"çš„[Shape]的索引。\n" -"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。" +"[code]body_shape_index[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 " +"[GridMap] çš„ [Shape] 的索引。使用 [code]body." +"shape_owner_get_owner(body_shape_index)[/code] æ¥èŽ·å– [CollisionShape] 节" +"点。\n" +"[code]local_shape_index[/code] [PhysicsServer] 使用的这个 RigidBody çš„ " +"[Shape] 的索引。使用 [code]self.shape_owner_get_owner(local_shape_index)[/" +"code] èŽ·å– [CollisionShape] 节点。\n" +"[b]注æ„:[/b]使用[ConcavePolygonShape]时,对于å弹的物ç†è¿ç®—æ— æ³•è¯†åˆ«å½¢çŠ¶ç´¢" +"引。如果需è¦å½¢çŠ¶ç´¢å¼•ï¼Œè¯·ä¸è¦åœ¨ä½¿ç”¨å¸¦æœ‰å¯¹äºŽå弹的物ç†è¿ç®—çš„ " +"[ConcavePolygonShape] 时使用多个 [CollisionShape]。" #: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208 msgid "" @@ -59980,7 +60858,6 @@ msgid "A body that is controlled by the 2D physics engine." msgstr "ç”±2D物ç†å¼•擎控制的实体。" #: doc/classes/RigidBody2D.xml:7 -#, fuzzy msgid "" "This node implements simulated 2D physics. You do not control a RigidBody2D " "directly. Instead, you apply forces to it (gravity, impulses, etc.) and the " @@ -60002,17 +60879,18 @@ msgid "" "The center of mass is always located at the node's origin without taking " "into account the [CollisionShape2D] centroid offsets." msgstr "" -"这个节点实现了模拟的2D物ç†è¿ç®—ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2D。相åï¼Œä½ å¯¹å®ƒæ–½" -"åŠ åŠ›ï¼ˆé‡åŠ›ã€å†²åŠ›ç‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出结" -"果的è¿åŠ¨ã€‚\n" -"一个RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n" -"[b]注æ„:[/b]ä½ ä¸åº”该æ¯ä¸€å¸§ç”šè‡³ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]ä½ç½®[/code]或[code]" -"线性速度[/code]ã€‚å¦‚æžœä½ éœ€è¦ç›´æŽ¥å½±å“身体的状æ€ï¼Œè¯·ä½¿ç”¨[method " -"_integrate_forces],它å…è®¸ä½ ç›´æŽ¥è®¿é—®ç‰©ç†å¦çжæ€ã€‚\n" -"也请记ä½ï¼Œç‰©ç†ä½“管ç†è‡ªå·±çš„å˜æ¢ï¼Œå®ƒè¦†ç›–äº†ä½ è®¾ç½®çš„å˜æ¢ã€‚所以任何直接或间接的å˜" -"æ¢ï¼ˆåŒ…括节点或其父体的缩放)将åªåœ¨ç¼–辑器ä¸å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n" -"å¦‚æžœä½ éœ€è¦è¦†ç›–默认的物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ ä¸€ä¸ªå˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆ" -"力。å‚阅[member custom_integrator]。" +"该节点实现了模拟的2D物ç†ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2Dã€‚è€Œæ˜¯ï¼Œä½ å¯¹å®ƒæ–½åŠ åŠ›" +"(é‡åŠ›ã€å†²åŠ›ç‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出è¿åŠ¨ç»“" +"果。\n" +"RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n" +"[b]注æ„:[/b] ä½ ä¸åº”该æ¯ä¸€å¸§æˆ–ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]position[/code]或" +"[code]linear_velocity[/code]。如果需è¦ç›´æŽ¥å½±å“物体的状æ€ï¼Œè¯·ä½¿ç”¨[method " +"_integrate_forces],它å…è®¸ä½ ç›´æŽ¥è®¿é—®ç‰©ç†çжæ€ã€‚\n" +"è¦è®°ä½ï¼Œç‰©ç†ç‰©ä½“在自己管ç†å˜æ¢ï¼Œå®ƒä¼šè¦†ç›–ä½ çš„å˜æ¢è®¾ç½®ã€‚所以任何直接或间接的å˜" +"æ¢ï¼ˆåŒ…括节点或其父级的缩放)将åªåœ¨ç¼–辑器ä¸å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n" +"å¦‚æžœä½ éœ€è¦é‡è½½é»˜è®¤çš„物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ å˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆåŠ›ã€‚" +"å‚阅[member custom_integrator]。\n" +"è´¨é‡ä¸å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘[CollisionShape2D]ä¸å¿ƒç‚¹çš„å移。" #: doc/classes/RigidBody2D.xml:15 msgid "https://godotengine.org/asset-library/asset/119" @@ -60058,7 +60936,6 @@ msgstr "" "行为很有用。" #: doc/classes/RigidBody2D.xml:91 -#, fuzzy msgid "" "Returns [code]true[/code] if a collision would result from moving in the " "given vector. [code]margin[/code] increases the size of the shapes involved " @@ -60072,7 +60949,6 @@ msgstr "" "è¯ï¼‰ã€‚" #: doc/classes/RigidBody2D.xml:97 -#, fuzzy msgid "" "Damps the body's [member angular_velocity]. If [code]-1[/code], the body " "will use the [b]Default Angular Damp[/b] defined in [b]Project > Project " @@ -60080,9 +60956,11 @@ msgid "" "See [member ProjectSettings.physics/2d/default_angular_damp] for more " "details about damping." msgstr "" -"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],主体将" +"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],物体将" "使用 [b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b] ä¸" -"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。" +"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。\n" +"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/" +"default_angular_damp]。" #: doc/classes/RigidBody2D.xml:104 msgid "The body's total applied force." @@ -60100,6 +60978,11 @@ msgid "" "[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep " "manually by setting its [member sleeping] property to [code]true[/code]." msgstr "" +"如果[code]true[/code],身体å¯ä»¥åœ¨æ²¡æœ‰è¿åŠ¨çš„æƒ…å†µä¸‹è¿›å…¥ç¡çœ 模å¼ã€‚è§[member " +"sleeping]。\n" +"[b]注æ„:[/b] RigidBody2D çš„[member mode] 为[constant MODE_CHARACTER] æ—¶ä¸ä¼š" +"è‡ªåŠ¨è¿›å…¥ä¼‘çœ æ¨¡å¼ã€‚ä»ç„¶å¯ä»¥é€šè¿‡å°†å…¶ [member sleep] 属性设置为 [code]true[/" +"code] æ¥æ‰‹åŠ¨ä½¿å…¶ä¼‘çœ ã€‚" #: doc/classes/RigidBody2D.xml:118 msgid "" @@ -60110,7 +60993,6 @@ msgstr "" "[member contacts_reported]。" #: doc/classes/RigidBody2D.xml:121 -#, fuzzy msgid "" "The maximum number of contacts that will be recorded. Requires [member " "contact_monitor] to be set to [code]true[/code].\n" @@ -60120,8 +61002,8 @@ msgid "" msgstr "" "将被记录的最大接触次数。需è¦å°† [member contact_monitor] 设置为 [code]true[/" "code]。\n" -"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将导致两个接触(æ¯ç«¯ä¸€" -"个),平行é¢ä¹‹é—´çš„碰撞将导致四个接触(æ¯ä¸ªè§’一个)。" +"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将æ„味ç€ä¸¤ä¸ªæŽ¥è§¦ï¼ˆæ¯ç«¯ä¸€" +"个),平行é¢ä¹‹é—´çš„碰撞将æ„味ç€å››ä¸ªæŽ¥è§¦ï¼ˆæ¯ä¸ªè§’一个)。" #: doc/classes/RigidBody2D.xml:125 msgid "" @@ -60147,14 +61029,15 @@ msgstr "" "[method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ã€‚" #: doc/classes/RigidBody2D.xml:132 -#, fuzzy msgid "" "The body's friction. Values range from [code]0[/code] (frictionless) to " "[code]1[/code] (maximum friction).\n" "Deprecated, use [member PhysicsMaterial.friction] instead via [member " "physics_material_override]." msgstr "" -"物体的摩擦。å–值范围从[code]0[/code](æ— æ‘©æ“¦)到[code]1[/code](最大摩擦)。" +"物体的摩擦。å–值范围从[code]0[/code](æ— æ‘©æ“¦)到[code]1[/code](最大摩擦)。\n" +"已弃用,通过 [member Physics_material_override] 使用 [member PhysicsMaterial." +"friction]。" #: doc/classes/RigidBody2D.xml:136 msgid "" @@ -60174,12 +61057,11 @@ msgid "" "this function allows you to set a custom value. Set 0 inertia to return to " "automatically computing it." msgstr "" -"物体的惯性矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬èº«ä½“需è¦å¤šå¤§çš„力矩。惯" -"性矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…è®¸ä½ è®¾ç½®ä¸€ä¸ªè‡ªå®šä¹‰å€¼ã€‚è®¾" -"ç½®0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚" +"物体的惯性力矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬ç‰©ä½“需è¦å¤šå¤§çš„力矩。" +"惯性力矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…è®¸ä½ è®¾ç½®ä¸€ä¸ªè‡ªå®šä¹‰" +"值。设置0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚" #: doc/classes/RigidBody2D.xml:142 -#, fuzzy msgid "" "Damps the body's [member linear_velocity]. If [code]-1[/code], the body will " "use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > " @@ -60189,7 +61071,9 @@ msgid "" msgstr "" "对物体的[member linear_velocity]进行阻尼è¿ç®—。如果[code]-1[/code],物体将使用" "[b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b]ä¸çš„" -"[b]Default Linear Damp(默认线性阻尼)[/b]。" +"[b]Default Linear Damp(默认线性阻尼)[/b]。\n" +"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/" +"default_linear_damp]。" #: doc/classes/RigidBody2D.xml:152 msgid "The body's mode. See [enum Mode] for possible values." @@ -60204,7 +61088,6 @@ msgstr "" "Physics(物ç†)> 2d[/b] ä¸çš„ [b] Default Gravity(默认é‡åŠ›) [/b] 值。" #: doc/classes/RigidBody2D.xml:169 -#, fuzzy msgid "" "Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. " "Requires [member contact_monitor] to be set to [code]true[/code] and [member " @@ -60213,15 +61096,13 @@ msgid "" "[code]body[/code] the [Node], if it exists in the tree, of the other " "[PhysicsBody2D] or [TileMap]." msgstr "" -"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 " -"[code]true[/code] å¹¶å°† [member contacts_reported] 设置为足够高以检测所有碰" -"撞。\n" -"æ¤ä¿¡å·ä¸ä»…接收与æ¤ç¢°æ’žçš„物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“" -"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 " -"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。" +"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]å‘生碰撞时触å‘。需è¦å°†[member " +"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置" +"得足够高以检测所有的碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到[TileMap]" +"的。\n" +"[code]body[/code]是其他[PhysicsBody2D]或[TileMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘ä¸ã€‚" #: doc/classes/RigidBody2D.xml:176 -#, fuzzy msgid "" "Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. " "Requires [member contact_monitor] to be set to [code]true[/code] and [member " @@ -60230,15 +61111,13 @@ msgid "" "[code]body[/code] the [Node], if it exists in the tree, of the other " "[PhysicsBody2D] or [TileMap]." msgstr "" -"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 " -"[code]true[/code] å¹¶å°† [member contacts_reported] 设置为足够高以检测所有碰" -"撞。\n" -"æ¤ä¿¡å·ä¸ä»…接收与æ¤ç¢°æ’žçš„物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“" -"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 " -"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。" +"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„ç¢°æ’žç»“æŸæ—¶å‘出的。需è¦å°† [member " +"contact_monitor] 设置为 [code]true[/code] å¹¶å°† [member contacts_reported] 设" +"置为足够高以检测所有碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到" +"[TileMap]。\n" +"[code]body[/code] å…¶ä»–[PhysicsBody2D]或[TileMap]çš„[Node](如果它å˜åœ¨äºŽæ ‘ä¸)。" #: doc/classes/RigidBody2D.xml:186 -#, fuzzy msgid "" "Emitted when one of this RigidBody2D's [Shape2D]s collides with another " "[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] " @@ -60257,20 +61136,22 @@ msgid "" "RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node " "with [code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" -"当[PhysicsBody2D]或[TileMap]的一个[Shape2D]离开这个Area2D的一个[Shape2D]æ—¶å‘" -"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰" -"撞形状[Shape2D]s,就会检测到[TileMap]s。\n" -"[code]body_id[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或[TileSet]" -"çš„[CollisionObject2D]çš„RID。\n" -"[code]body[/code]傿•°æ˜¯[PhysicsBody2D]或[TileMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘ä¸çš„" -"è¯ã€‚\n" -"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或" -"[TileMap]çš„[Shape2D]的索引。\n" -"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„" -"索引。" +"当这个RigidBody2Dçš„[Shape2D]与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]碰撞" +"æ—¶å‘å‡ºã€‚è¦æ±‚ [member contact_monitor] 设置为 [code]true[/code] 并且 [member " +"contacts_reported] 设置得足够高,以检测所有碰撞。如果 [TileMap] 具有碰撞 " +"[Shape2D],就会检测到 [TileSet]。\n" +"[code]body_rid[/code] ç”± [Physics2DServer] 使用的其他 [PhysicsBody2D] 或 " +"[TileSet] çš„ [CollisionObject2D] çš„ [RID]。\n" +"[code]body[/code]å…¶ä»–[PhysicsBody2D]或[TileMap]çš„[Node](如果它å˜åœ¨äºŽæ ‘上)。\n" +"[code]body_shape_index [/code] å…¶ä»– [PhysicsBody2D] 或 [TileMap] 使用 " +"[Physics2DServer] çš„ [Shape2D] 索引。获得带有 [code]body." +"shape_owner_get_owner (body_shape_index)[/code] çš„ [CollisionShape2D] 节" +"点。\n" +"[code]local_shape_index [/code] [Physics2DServer] ä½¿ç”¨çš„æ¤ RigidBody2D çš„ " +"[Shape2D] 索引。获得带有 [code]self.shape_owner_get_owner " +"(local_shape_index)[/code] çš„ [CollisionShape2D] 节点。" #: doc/classes/RigidBody2D.xml:199 -#, fuzzy msgid "" "Emitted when the collision between one of this RigidBody2D's [Shape2D]s and " "another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member " @@ -60289,17 +61170,20 @@ msgid "" "RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node " "with [code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" -"当[PhysicsBody2D]或[TileMap]çš„[Shape2D]之一进入æ¤Area2Dçš„[Shape2D]之一时å‘" -"出。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰撞" -"形状[Shape2D]s,就会检测到[TileMap]s。\n" -"[code]body_id[/code]傿•°æ˜¯ [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]" -"çš„[CollisionObject2D]çš„RID。\n" -"[code]body[/code]傿•°æ˜¯ [PhysicsBody2D]或[TileMap]çš„[节点]ï¼Œå¦‚æžœå®ƒåœ¨æ ‘ä¸Šå˜åœ¨" -"çš„è¯ã€‚\n" -"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或" -"[TileMap]çš„[Shape2D]的索引。\n" -"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„" -"索引。" +"当这个RigidBody2D的一个[Shape2D]å’Œå¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]" +"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘ã€‚è¦æ±‚[member contact_monitor]设置为[code]true[/code]," +"[member contacts_reported]设置得足够高以检测所有的碰撞。如果[TileSet]有碰撞" +"[Shape2D],就会检测到[TileMap]的。\n" +"[code]body_rid[/code] [Physics2DServer]使用的其他[PhysicsBody2D]或[TileSet]çš„" +"[CollisionObject2D]çš„ [RID]。\n" +"[code]body[/code] å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘" +"ä¸ã€‚\n" +"[code]body_shape_index[/code] ç”±[Physics2DServer]使用的其他[PhysicsBody2D]或" +"[TileMap]çš„[Shape2D]的索引。用[code]body." +"shape_owner_get_owner(body_shape_index)[/code]获得[CollisionShape2D]节点。\n" +"[code]local_shape_index[/code]这个RigidBody2Dçš„[Shape2D]的索引,由" +"[Physics2DServer]使用。用[code]self.shape_owner_get_owner(local_shape_index)" +"[/code]获å–[CollisionShape2D]节点。" #: doc/classes/RigidBody2D.xml:215 msgid "" @@ -60331,7 +61215,7 @@ msgid "" "Continuous collision detection disabled. This is the fastest way to detect " "body collisions, but can miss small, fast-moving objects." msgstr "" -"ç¦ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这是检测身体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©" +"ç¦ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这是检测物体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©" "体。" #: doc/classes/RigidBody2D.xml:230 @@ -60349,7 +61233,7 @@ msgstr "" #: doc/classes/Room.xml:4 msgid "Room node, used to group objects together locally for [Portal] culling." -msgstr "" +msgstr "Room 节点,用于在本地将对象组åˆåœ¨ä¸€èµ·ä»¥è¿›è¡Œ [Portal] 剔除。" #: doc/classes/Room.xml:7 msgid "" @@ -60373,6 +61257,19 @@ msgid "" "placed over non-occluded openings between rooms. These will often be placed " "over doors and windows." msgstr "" +"[Portal] 剔除系统需è¦ä½¿ç”¨åœ¨ç§°ä¸º [Room] çš„åŒºåŸŸä¸æŒ‰ä½ç½®åˆ†ç»„åœ¨ä¸€èµ·çš„å¯¹è±¡æ¥æž„建关" +"å¡ã€‚在许多情况下,这些将对应于建ç‘物ä¸çš„实际空间,但ä¸ä¸€å®šï¼ˆå³¡è°·åŒºåŸŸå¯èƒ½è¢«è§†" +"为空间)。\n" +"如果[VisualInstance] çš„[code]portal_mode[/code] 设置为[code]STATIC[/code](ä¸" +"移动) 或 [code]DYNAMIC[/code](仅在空间内移动),那么任何作为[Room]çš„å代或å™" +"代的[VisualInstance]将被分é…到该空间。\n" +"在内部,空间边界必须形æˆä¸€ä¸ª [b] 凸多边形 [/b],默认情况下,这由您放置在空间" +"å†…çš„å¯¹è±¡çš„å‡ ä½•å½¢çŠ¶è‡ªåŠ¨ç¡®å®šã€‚\n" +"您也å¯ä»¥ç²¾ç¡®æŒ‡å®š [b] 手动绑定 [/b]。如果放置一个å称以[code]Bound_[/code]为å‰" +"缀的[MeshInstance],它将关é—å‡ ä½•ä½“çš„è¾¹ç•Œç”Ÿæˆï¼Œè€Œæ˜¯åœ¨è½¬æ¢é˜¶æ®µä½¿ç”¨è¿™ä¸ª" +"MeshInstance的顶点直接计算凸多边形(è§[RoomManager])。\n" +"为了从一个空间看到相邻的空间,[Portal]必须放置在空间之间的éžé®æŒ¡å¼€å£ä¸Šã€‚这些" +"通常会放置在门窗上。" #: doc/classes/Room.xml:27 msgid "" @@ -60385,6 +61282,11 @@ msgid "" "room hull, and save the resulting points, allowing you to edit them to " "further refine the bound." msgstr "" +"如果设置了 [code]points[/code],则会从这些点构建 [Room] 边界凸多边形。如果未" +"设置点,则空间边界将æ¥è‡ªæ‰‹åŠ¨è¾¹ç•Œï¼ˆ[MeshInstance] åç§°å‰ç¼€ä¸º [code]Bound_[/" +"code]),或æ¥è‡ªç©ºé—´å†…çš„å‡ ä½•ä½“ã€‚\n" +"请注æ„,您å¯ä»¥ä½¿ç”¨ [code]Generate Points[/code] ç¼–è¾‘å™¨æŒ‰é’®å¼€å§‹ã€‚è¿™å°†ä½¿ç”¨å‡ ä½•" +"体或手动绑定æ¥ç”Ÿæˆç©ºé—´å¤–壳,并ä¿å˜ç»“果点,å…许您编辑它们以进一æ¥ç»†åŒ–边界。" #: doc/classes/Room.xml:31 msgid "" @@ -60392,16 +61294,20 @@ msgid "" "(bounds) are simplified, by removing similar planes. A value of 0 gives no " "simplification, 1 gives maximum simplification." msgstr "" +"[code]simplify[/code] å€¼é€šè¿‡ç§»é™¤ç›¸ä¼¼çš„å¹³é¢æ¥ç¡®å®šç©ºé—´å¤–壳(边界)的简化程度。" +"值 0 表示ä¸ç®€åŒ–,1 表示最大程度的简化。" #: doc/classes/Room.xml:34 msgid "" "The room hull simplification can either use the default value set in the " "[RoomManager], or override this and use the per room setting." msgstr "" +"空间外壳简化å¯ä»¥ä½¿ç”¨ [RoomManager] ä¸è®¾ç½®çš„默认值,也å¯ä»¥è¦†ç›–它并使用æ¯ä¸ªç©ºé—´" +"的设置。" #: doc/classes/RoomGroup.xml:4 msgid "Groups [Room]s together to allow common functionality." -msgstr "" +msgstr "å°† [Room] 组åˆåœ¨ä¸€èµ·ä»¥å®žçŽ°é€šç”¨åŠŸèƒ½ã€‚" #: doc/classes/RoomGroup.xml:7 msgid "" @@ -60418,6 +61324,14 @@ msgid "" "[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] " "(see [RoomManager] for details)." msgstr "" +"尽管å¯ä»¥å•独指定 [Room] 行为,但有时为一组空间编写功能会更快更方便。\n" +"[RoomGroup] 应作为 [b] 空间列表 [/b](您的 [Room] 的父 [Node])的å项而设置," +"而 [Room] 应作为 [RoomGroup] çš„å项便¬¡è®¾ç½®ä»¥ä¾¿å°†å®ƒä»¬åˆ†é…ç»™ RoomGroup。\n" +"例如,[RoomGroup] å¯ç”¨äºŽæŒ‡å®š [b]outside[/b] çš„ [Room],并在玩家进入/退出该区" +"域时打开或关é—定å‘å…‰ã€å¤©ç©ºæˆ–雨效果。\n" +"当 [code]gameplay_monitor[/code] 开坿—¶ï¼Œ[RoomGroup] 收到 [b]游æˆå›žè°ƒ[/b],在" +"他们进入和退出时[b]游æˆåŒº[/b]时,作为 [code] ä¿¡å· [/code] 或 [code] 通知 [/" +"code] (详è§[RoomManager])。" #: doc/classes/RoomGroup.xml:18 msgid "" @@ -60430,10 +61344,15 @@ msgid "" "when the camera is within the house, the house is used as the source room, " "but outside the house, the terrain room would be used instead." msgstr "" +"æ¤ä¼˜å…ˆçº§å°†åº”用于组内的 [Room]。 [Room] 优先级å…许使用 [b] 内部空间 [/b]ã€ç©º" +"é—´ [i] 内 [/i] å¦ä¸€ä¸ªç©ºé—´æˆ–多个空间。\n" +"当 [Camera] ä½äºŽå¤šä¸ªç©ºé—´ï¼ˆå¸¸è§„和内部)内时,优先级较高的空间将优先处ç†ã€‚å› " +"æ¤ï¼Œä¾‹å¦‚,在地形“空间â€å†…的房屋,您å¯ä»¥ä½¿æˆ¿å±‹å…·æœ‰æ›´é«˜çš„优先级,以便当相机在房" +"屋内时,房屋用作æºç©ºé—´ï¼Œä½†åœ¨æˆ¿å±‹å¤–,将改为使用地形空间。" #: doc/classes/RoomManager.xml:4 msgid "The RoomManager node is used to control the portal culling system." -msgstr "" +msgstr "RoomManager 节点用于控制portal剔除系统。" #: doc/classes/RoomManager.xml:7 msgid "" @@ -60444,6 +61363,10 @@ msgid "" "is controlled by the [RoomManager] node, and the [RoomManager] also contains " "settings that are common throughout the portal system." msgstr "" +"为了使用portal鮿Œ¡å‰”除系统,您必须使用 [Room] å’Œ [Portal] æ¥æž„建您的关å¡ã€‚在" +"这些å¯ä»¥åœ¨è¿è¡Œæ—¶ä½¿ç”¨ä¹‹å‰ï¼Œå®ƒä»¬å¿…é¡»ç»è¿‡ä¸€ä¸ªç®€çŸçš„转æ¢è¿‡ç¨‹æ¥æž„建 [code] room " +"graph [/code],这是portal剔除所需的è¿è¡Œæ—¶æ•°æ®ã€‚ [code]portal graph[/code]ç”±" +"[RoomManager]节点控制,[RoomManager]è¿˜åŒ…å«æ•´ä¸ªportal系统通用的设置。" #: doc/classes/RoomManager.xml:15 msgid "" @@ -60451,6 +61374,8 @@ msgid "" "before unloading a level, when transitioning from level to level, or " "returning to a main menu." msgstr "" +"该方法会从[b]portal graph[/b]æ¸…é™¤æ‰€æœ‰è½¬æ¢æ•°æ®ã€‚在å¸è½½å…³å¡ã€ä»Žå…³å¡è½¬æ¢åˆ°å…³å¡æˆ–" +"返回主èœå•时使用æ¤é€‰é¡¹ã€‚" #: doc/classes/RoomManager.xml:21 msgid "" @@ -60511,6 +61436,45 @@ msgid "" "tree, to avoid confusion. See [CullInstance] for a full description of " "portal modes." msgstr "" +"这是整个portalå‰”é™¤ç³»ç»Ÿä¸æœ€é‡è¦çš„åŠŸèƒ½ã€‚æ²¡æœ‰å®ƒï¼Œç³»ç»Ÿå°±æ— æ³•è¿è¡Œã€‚\n" +"首先,它é历作为 [code] room list [/code] 的节点(以åŠå…¶ä¸çš„ [RoomGroup])å" +"节点的æ¯ä¸ª [Room],并将其转æ¢å¹¶æ·»åŠ åˆ° [code] room graph [/code]。\n" +"这适用于éµå¾ªç‰¹æ®Šå‘½å约定的 [Room] 节点和 [Spatial] 节点。它们应该以å‰ç¼€ " +"[i]'Room_'[/i] å¼€å¤´ï¼Œç„¶åŽæ˜¯æ‚¨å¸Œæœ›ä¸ºç©ºé—´å‘½åçš„å称,例如[i]'Room_lounge'[/i]。" +"这将自动为您将æ¤ç±» [Room] 转æ¢ä¸º [Room] 节点。如果您想构建整个空间系统,这很" +"有用,例如Blender,并在您处ç†å…³å¡æ—¶å¤šæ¬¡é‡æ–°å¯¼å…¥ã€‚\n" +"转æ¢å°†å°è¯•将作为 [Room] çš„å代和å™ä»£çš„ [VisualInstance] 分é…给空间。这些应该" +"被赋予åˆé€‚çš„ [code] portal mode [/code](å‚è§ [CullInstance] 文档)。默认的 " +"[code] portal mode [/code] 是 [code]STATIC[/code] - è¿è¡Œå…³å¡æ—¶ä¸ä¼šç§»åŠ¨çš„å¯¹" +"象,通常是大多数对象。\n" +"转æ¢é€šå¸¸ä¼šä½¿ç”¨è¿™äº› [VisualInstance](和 [Portal]ï¼‰çš„å‡ ä½•å½¢çŠ¶æ¥è®¡ç®—空间的凸多" +"边形边界。这些边界将显示在带有线框的编辑器ä¸ã€‚或者,您å¯ä»¥ä¸ºä»»ä½•空间指定手动" +"自定义边界,请å‚阅 [Room] 文档。\n" +"æ ¹æ®å®šä¹‰ï¼Œç©ºé—´å†…çš„ [Camera] å¯ä»¥çœ‹åˆ°ç©ºé—´å†…的所有其他东西(这是使用凸多边形的" +"一个优势)。但是,为了从一个空间看到相邻的空间,您必须放置 [Portal],它代表摄" +"åƒæœºå¯ä»¥çœ‹åˆ°çš„å¼€å£ï¼Œå¦‚窗户和门。\n" +"[Portal] å®žé™…ä¸Šåªæ˜¯ä¸“门的 [MeshInstance]。实际上,您通常会首先通过创建 " +"[MeshInstance],尤其是 [code]plane[/code] ç½‘æ ¼å®žä¾‹æ¥åˆ›å»ºportal。您å¯ä»¥åœ¨ç¼–辑" +"器ä¸ç§»åЍ平é¢ä»¥è¦†ç›–窗户或门å£ï¼Œæ£é¢æœç©ºé—´å¤–。为了让转æ¢è¿‡ç¨‹çŸ¥é“您希望æ¤ç½‘æ ¼æˆ" +"为portalï¼Œæˆ‘ä»¬å†æ¬¡ä½¿ç”¨ç‰¹æ®Šçš„命å约定。è¦è½¬æ¢ä¸º [Portal] çš„ [MeshInstance] 应" +"以å‰ç¼€ [i]'Portal_'[/i] 开头。\n" +"您现在有一个选择 - 您å¯ä»¥å°†åç§°ä¿ç•™ä¸º [i]'Portal_'[/i],并å…许系统自动检测最" +"è¿‘çš„ [Room] 进行链接。在大多数情况下,这将æ£å¸¸å·¥ä½œã€‚\n" +"å¦ä¸€ç§æ–¹æ³•是手动指定è¦é“¾æŽ¥åˆ°çš„ [Room],在portalåç§°åŽé™„åŠ ä¸€ä¸ªåŽç¼€ï¼Œè¯¥åŽç¼€åº”该" +"是您è¦é“¾æŽ¥åˆ°çš„空间的å称。例如,[i]'Portal_lounge'[/i] å°†å°è¯•链接到å为 " +"[i]'Room_lounge'[/i] 的空间。\n" +"这里有一个特殊情况——Godot ä¸å…许两个节点共享相åŒçš„å称。如果您想手动将多个" +"portal通å‘åŒä¸€ä¸ªç©ºé—´æ€Žä¹ˆåŠžï¼Ÿå½“ç„¶ï¼Œå®ƒä»¬éƒ½éœ€è¦è¢«è°ƒç”¨ï¼Œä¾‹å¦‚[i]'Portal_lounge'[/" +"i]?\n" +"解决方案是通é…符。在空间å称之åŽï¼Œå¦‚果您使用å—符 [i]'*'[/i],则该å—符åŠå…¶åŽçš„" +"ä»»ä½•å†…å®¹éƒ½å°†è¢«å¿½ç•¥ã€‚å› æ¤ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ä¾‹å¦‚ [i]'Portal_lounge*0'[/i]ã€" +"[i]'Portal_lounge*1'[/i] ç‰ã€‚\n" +"请注æ„,已ç»è½¬æ¢ä¸º [Portal] èŠ‚ç‚¹ï¼ˆè€Œä¸æ˜¯ [MeshInstance])的 [Portal] ä»ç„¶éœ€è¦" +"éµå¾ªç›¸åŒçš„命åçº¦å®šï¼Œå› ä¸ºå®ƒä»¬åœ¨è½¬æ¢è¿‡ç¨‹ä¸æ¯æ¬¡éƒ½ä¼šé‡æ–°é“¾æŽ¥ã€‚\n" +"å»ºè®®æ‚¨ä»…å°†å¯¹è±¡æ”¾ç½®åœ¨å¸Œæœ›ç•™åœ¨è¿™äº›ç©ºé—´å†…çš„ç©ºé—´ä¸ - å³ [code]portal mode[/code]" +"是 [code]STATIC[/code] 或 [code]DYNAMIC[/code](ä¸ç©¿è¶Š Portal)。 " +"[code]GLOBAL[/code] å’Œ [code]ROAMING[/code] å¯¹è±¡æœ€å¥½æ”¾ç½®åœ¨åœºæ™¯æ ‘çš„å¦ä¸€éƒ¨åˆ†ï¼Œ" +"以é¿å…混淆。有关portal模å¼çš„完整说明,请å‚阅 [CullInstance]。" #: doc/classes/RoomManager.xml:39 msgid "" @@ -60522,6 +61486,12 @@ msgid "" "Switching to [code]active[/code] will have no effect when the [code]room " "graph[/code] is unloaded (the rooms have not yet been converted)." msgstr "" +"打开和关é—portal剔除系统。\n" +"éœ€è¦æ³¨æ„的是,当portalå‰”é™¤å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶ï¼Œå®ƒè´Ÿè´£ [b]所有[/b] 3d 剔除。æŸäº›ç¼–" +"辑器功能å¯èƒ½æ›´éš¾ä½¿ç”¨ï¼Œå› æ¤åˆ‡æ¢æ´»åŠ¨æ ‡å¿—æ—¨åœ¨ç¡®ä¿æ‚¨çš„ [Room] / [Portal] 布局在编" +"辑器ä¸å·¥ä½œã€‚\n" +"当[code]room graph[/code]被å¸è½½ï¼ˆç©ºé—´å°šæœªè½¬æ¢ï¼‰æ—¶ï¼Œåˆ‡æ¢åˆ°[code]active[/code]" +"å°†ä¸èµ·ä½œç”¨ã€‚" #: doc/classes/RoomManager.xml:44 msgid "" @@ -60530,6 +61500,9 @@ msgid "" "room.\n" "Toggling this setting turns this debug view on and off." msgstr "" +"大型物体å¯ä»¥â€œè”“å»¶â€è¶…过一个以上的空间。该设置对于å¯è§†åŒ–那些蔓延在当å‰ç©ºé—´å¤–çš„" +"对象会很有用。\n" +"åˆ‡æ¢æ¤è®¾ç½®å¯æ‰“å¼€å’Œå…³é—æ¤è°ƒè¯•视图。" #: doc/classes/RoomManager.xml:48 msgid "" @@ -60540,6 +61513,10 @@ msgid "" "In most cases you can set this here for all portals. It is possible to " "override the margin for each portal." msgstr "" +"通常我们ä¸å¸Œæœ›åªæœ‰[b]刚好[/b]跨越边界进入相邻[Room]的物体蔓延到那个空间。为防" +"æ¢è¿™ç§æƒ…况å‘生,æ¯ä¸ª [Portal] 都有一个é¢å¤–çš„è¾¹è·æˆ–容差区,物体å¯ä»¥åœ¨å…¶ä¸è¿›å…¥" +"而ä¸ä¼šè”“延到相邻的空间。\n" +"在大多数情况下,您å¯ä»¥åœ¨æ¤å¤„为所有portal设置æ¤é¡¹ã€‚å¯ä»¥è¦†ç›–æ¯ä¸ªportal的边è·ã€‚" #: doc/classes/RoomManager.xml:52 msgid "" @@ -60554,6 +61531,14 @@ msgid "" "[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n" "Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]" msgstr "" +"使用部分或完整 PVS 时,游æˆç›‘视器å…许您在漫游对象或空间进入或退出 [b] 游æˆåŒº" +"域 [/b] 时接收回调。游æˆåŒºåŸŸè¢«å®šä¹‰ä¸ºä¸»è¦æˆ–æ¬¡è¦ PVS。\n" +"例如,这些回调å…许您å‡å°‘对远离玩家的对象的处ç†ï¼Œæˆ–è€…æ‰“å¼€å’Œå…³é— AI。\n" +"您å¯ä»¥é€‰æ‹©é€šè¿‡ [code]_notification[/code] å‡½æ•°æŽ¥æ”¶å›žè°ƒä½œä¸ºé€šçŸ¥ï¼Œæˆ–ä½œä¸ºä¿¡å·æŽ¥" +"收。\n" +"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n" +"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n" +"ä¿¡å·ï¼š[code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]" #: doc/classes/RoomManager.xml:60 msgid "" @@ -60565,6 +61550,11 @@ msgid "" "will only operate on exported or running projects, in order to prevent " "accidental alteration to the scene and loss of data." msgstr "" +"如果å¯ç”¨ï¼Œç³»ç»Ÿå°†åœ¨è½¬æ¢æœŸé—´å°è¯•åˆå¹¶ [Room] å†…çš„ç›¸ä¼¼ç½‘æ ¼ï¼ˆç‰¹åˆ«æ˜¯åœ¨ææ–™æ–¹é¢ï¼‰ã€‚" +"è¿™å¯ä»¥æ˜¾ç€å‡å°‘æ¸²æŸ“æœŸé—´æ‰€éœ€çš„ç»˜åˆ¶è°ƒç”¨å’ŒçŠ¶æ€æ›´æ”¹çš„æ•°é‡ï¼Œå°½ç®¡ä»£ä»·æ˜¯é™ä½Žäº†å‰”除粒" +"度。\n" +"[b]注æ„:[/b]æ¤æ“作在转æ¢è¿‡ç¨‹ä¸çš„è¿è¡Œæ—¶è¿è¡Œï¼Œå¹¶ä¸”åªä¼šåœ¨å¯¼å‡ºæˆ–è¿è¡Œçš„项目上è¿" +"è¡Œï¼Œä»¥é˜²æ¢æ„外更改场景和丢失数æ®ã€‚" #: doc/classes/RoomManager.xml:64 msgid "" @@ -60574,6 +61564,9 @@ msgid "" "level. Here you can alter the threshold at which the editor warning appears. " "There are no other side effects." msgstr "" +"转æ¢ç©ºé—´æ—¶ï¼Œå¦‚果检测到空间之间有é‡å ,编辑器会è¦å‘Šæ‚¨ã€‚é‡å ä¼šå¹²æ‰°ç¡®å®šæ‘„åƒæœºå’Œ" +"ç‰©ä½“æ‰€åœ¨çš„ç©ºé—´ã€‚æ ¹æ®æ‚¨çš„levelï¼Œå°‘é‡æ˜¯å¯ä»¥æŽ¥å—的。您å¯ä»¥åœ¨æ¤å¤„更改出现编辑器è¦" +"告的阈值。没有其他副作用。" #: doc/classes/RoomManager.xml:67 msgid "" @@ -60583,6 +61576,9 @@ msgid "" "recursion depth.\n" "[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode." msgstr "" +"portal渲染是递归的 - æ¯æ¬¡é€šè¿‡è¾ƒæ—©çš„portal看到一个portalæ—¶ï¼Œéƒ½ä¼šäº§ç”Ÿä¸€äº›æˆæœ¬ã€‚" +"å‡ºäºŽè¿™ä¸ªåŽŸå› ï¼Œå¹¶ä¸ºäº†é˜²æ¢æ— é™å¾ªçŽ¯çš„å¯èƒ½æ€§ï¼Œæ¤è®¾ç½®å¯¹é€’归深度æä¾›äº†ç¡¬æ€§é™åˆ¶ã€‚\n" +"[b]注:[/b] 使用[code]Full[/code] PVS æ¨¡å¼æ—¶ä¸ä½¿ç”¨è¯¥å€¼ã€‚" #: doc/classes/RoomManager.xml:71 msgid "" @@ -60591,6 +61587,9 @@ msgid "" "to override this behaviour and force it to use a particular camera to get a " "better idea of what the occlusion culling is doing." msgstr "" +"Portal 剔除通常使用当å‰çš„ [Camera] / 多个[Camera] 进行æ“作,但是为了在编辑器" +"ä¸è¿›è¡Œè°ƒè¯•,您å¯ä»¥ä½¿ç”¨æ¤è®¾ç½®æ¥è¦†ç›–æ¤è¡Œä¸ºå¹¶å¼ºåˆ¶å®ƒä½¿ç”¨ç‰¹å®šçš„相机以更好地了解é®" +"挡的内容剔除æ£åœ¨åšã€‚" #: doc/classes/RoomManager.xml:75 msgid "" @@ -60602,9 +61601,29 @@ msgid "" "rooms will be frustum culled, and rendered if they are within the view " "frustum." msgstr "" +"å¯é€‰åœ°ï¼Œåœ¨è½¬æ¢æœŸé—´ï¼Œå¯ä»¥è®¡ç®—从æ¯ä¸ªç©ºé—´å¯èƒ½å¯è§çš„空间的潜在å¯è§é›† (PVS)。这å¯" +"用于帮助动æ€é—¨æˆ·å‰”除,或完全替代门户剔除。\n" +"在 [code]Full[/code] PVS 模å¼ä¸‹ï¼Œæ½œåœ¨å¯è§ç©ºé—´å†…的所有对象都将被剔除,如果它们" +"在视锥体内,则进行渲染。" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -60621,20 +61640,33 @@ msgid "" "override this value if desired.\n" "The room convex hulls are shown as a wireframe in the editor." msgstr "" +"在转æ¢è¿‡ç¨‹ä¸ï¼Œ[Room] å†…å¯¹è±¡çš„å‡ ä½•å½¢çŠ¶ï¼Œæˆ–è‡ªå®šä¹‰æŒ‡å®šçš„æ‰‹åŠ¨ç»‘å®šï¼Œç”¨äºŽç”Ÿæˆ [b] " +"凸多边形绑定 [/b]。\n" +"这个凸多边形在å¯è§æ€§ç³»ç»Ÿä¸æ˜¯ [b] 必需的 [/b],并且用于许多目的。最é‡è¦çš„æ˜¯ï¼Œ" +"它用于决定[Camera](或物体)是å¦åœ¨[Room]内。凸多边形生æˆç®—法很好,但有时它会" +"创建太多(或太少)的平é¢ï¼Œæ— 法很好地表示空间体积。\n" +"[code]room_simplify[/code] 值å¯ç”¨äºŽå¯¹è¯¥è¿‡ç¨‹è¿›è¡Œç²¾ç»†æŽ§åˆ¶ã€‚它决定了如何相似平é¢" +"æ‰èƒ½å°†å®ƒä»¬è§†ä¸ºç›¸åŒï¼ˆå¹¶åˆ 除é‡å¤é¡¹ï¼‰ã€‚该值å¯ä»¥è®¾ç½®åœ¨ 0ï¼ˆæ— ç®€åŒ–ï¼‰å’Œ 1(最大简" +"化)之间。\n" +"æ¤å¤„设置的值是所有空间的默认值,但如果需è¦ï¼Œä¸ªåˆ«ç©ºé—´å¯ä»¥è¦†ç›–æ¤å€¼ã€‚\n" +"ç©ºé—´å‡¸åŒ…åœ¨ç¼–è¾‘å™¨ä¸æ˜¾ç¤ºä¸ºçº¿æ¡†ã€‚" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " "we refer to as the [code]roomlist[/code] (the roomlist is not a special node " "type, it is normally just a [Spatial])." msgstr "" +"è¦ä½¿ [Room] 转æ¢è¿‡ç¨‹æˆåŠŸï¼Œæ‚¨å¿…é¡»å°† [RoomManager] æŒ‡å‘ [Room] å’Œ [RoomGroup] " +"的父 [Node],我们将其称为 [code]roomlist[/code](roomlist 䏿˜¯ä¸€ä¸ªç‰¹æ®Šçš„节点" +"ç±»åž‹ï¼Œå®ƒé€šå¸¸åªæ˜¯ä¸€ä¸ª [Room])。" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." -msgstr "" +msgstr "当在编辑器ä¸ä½¿ç”¨portal工具时,显示[Portal]的边界。" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -60643,28 +61675,33 @@ msgid "" "Sometimes using the larger gameplay area of the secondary PVS may be " "preferable." msgstr "" +"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦" +"PVS(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n" +"æœ‰æ—¶ä½¿ç”¨æ¬¡è¦ PVS 的较大游æˆåŒºåŸŸå¯èƒ½æ›´å¯å–。" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" +"在è¿è¡Œæ—¶ä»…使用 [Portal] æ¥ç¡®å®šå¯è§æ€§ã€‚ [Room]的转æ¢ä¸ä¼šäº§ç”ŸPVSï¼Œæ— æ³•ä½¿ç”¨æ¸¸æˆ" +"通知。" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." -msgstr "" +msgstr "使用 PVS å’Œ [Portal] çš„ç»„åˆæ¥ç¡®å®šå¯è§æ€§ï¼ˆè¿™é€šå¸¸æ˜¯æœ€å¿«å’Œæœ€å‡†ç¡®çš„)。" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." -msgstr "" +msgstr "仅使用 [Room] çš„ PVS(潜在å¯è§é›†ï¼‰æ¥ç¡®å®šå¯è§æ€§ã€‚" #: doc/classes/RootMotionView.xml:4 msgid "Editor-only helper for setting up root motion in [AnimationTree]." -msgstr "" +msgstr "在[AnimationTree]ä¸è®¾ç½®æ ¹è¿åŠ¨çš„ä»…ç¼–è¾‘å™¨å¯ç”¨çš„辅助工具。" #: doc/classes/RootMotionView.xml:7 msgid "" @@ -60681,23 +61718,30 @@ msgid "" "[code]extends RootMotionView[/code]. Additionally, it must not be a " "[code]@tool[/code] script." msgstr "" +"[i]Root motion[/i] 指的是一ç§åŠ¨ç”»æŠ€æœ¯ï¼Œå…¶ä¸ä½¿ç”¨ç½‘æ ¼çš„éª¨æž¶ä¸ºè§’è‰²æä¾›åŠ¨åŠ›ã€‚åœ¨å¤„" +"ç† 3D åŠ¨ç”»æ—¶ï¼Œä¸€ç§æµè¡Œçš„æŠ€æœ¯æ˜¯åŠ¨ç”»å¸ˆä½¿ç”¨æ ¹éª¨æž¶éª¨éª¼æ¥ä¸ºéª¨æž¶çš„其余部分æä¾›è¿" +"动。这å…许以æ¥éª¤å®žé™…匹é…下方地æ¿çš„æ–¹å¼ä¸ºè§’色设置动画。它还å…许在过场动画期间" +"与对象进行精确交互。å¦è§[AnimationTree]。\n" +"[b]注æ„:[/b] [RootMotionView] 仅在编辑器ä¸å¯è§ã€‚在è¿è¡Œçš„项目ä¸ä¼šè‡ªåЍéšè—,在" +"è¿è¡Œçš„项目ä¸ä¹Ÿä¼šè½¬æ¢ä¸ºæ™®é€šçš„[Node]。这æ„味ç€é™„åŠ åˆ° [RootMotionView] 节点的脚" +"本 [i] å¿…é¡» [/i] 具有 [code] 继承节点 [/code] è€Œä¸æ˜¯ [code] 继承 " +"RootMotionView[/code]。æ¤å¤–,它ä¸èƒ½æ˜¯ [code]@tool[/code] 脚本。" #: doc/classes/RootMotionView.xml:11 msgid "" "https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree." "html#root-motion" msgstr "" -"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree." +"https://docs.godotengine.org/zh_CN/latest/tutorials/animation/animation_tree." "html#root-motion" #: doc/classes/RootMotionView.xml:17 msgid "Path to an [AnimationTree] node to use as a basis for root motion." -msgstr "" +msgstr "ç”¨ä½œæ ¹è¿åŠ¨åŸºç¡€çš„ [AnimationTree] 节点的路径。" #: doc/classes/RootMotionView.xml:20 -#, fuzzy msgid "The grid's cell size in 3D units." -msgstr "图å—地图的å•元大å°ã€‚" +msgstr "以 3D å•ä½è¡¨ç¤ºçš„ç½‘æ ¼å•元大å°ã€‚" #: doc/classes/RootMotionView.xml:23 msgid "The grid's color." @@ -60708,16 +61752,17 @@ msgid "" "The grid's radius in 3D units. The grid's opacity will fade gradually as the " "distance from the origin increases until this [member radius] is reached." msgstr "" +"以 3D å•ä½è¡¨ç¤ºçš„ç½‘æ ¼åŠå¾„。éšç€ä¸ŽåŽŸç‚¹çš„è·ç¦»å¢žåŠ ï¼Œç½‘æ ¼çš„ä¸é€æ˜Žåº¦å°†é€æ¸æ¶ˆå¤±ï¼Œç›´" +"到达到æ¤åŠå¾„ [member radius]。" #: doc/classes/RootMotionView.xml:29 -#, fuzzy msgid "" "If [code]true[/code], the grid's points will all be on the same Y coordinate " "([i]local[/i] Y = 0). If [code]false[/code], the points' original Y " "coordinate is preserved." msgstr "" -"如果[code] true [/code],则粒åå°†ä½¿ç”¨çˆ¶èŠ‚ç‚¹çš„åæ ‡ç©ºé—´ã€‚如果[code]false[/" -"code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚" +"如果 [code]true[/code]ï¼Œåˆ™ç½‘æ ¼çš„ç‚¹éƒ½å°†ä½äºŽç›¸åŒçš„ Y åæ ‡ä¸Šï¼ˆ[i]local[/i] Y = " +"0)。如果 [code]false[/code],则ä¿ç•™ç‚¹çš„原始 Y åæ ‡ã€‚" #: doc/classes/SceneState.xml:4 msgid "A script interface to a scene file's data." @@ -60908,7 +61953,6 @@ msgid "Manages the game loop via a hierarchy of nodes." msgstr "é€šè¿‡èŠ‚ç‚¹å±‚æ¬¡ç»“æž„ç®¡ç†æ¸¸æˆå¾ªçŽ¯ã€‚" #: doc/classes/SceneTree.xml:7 -#, fuzzy msgid "" "As one of the most important classes, the [SceneTree] manages the hierarchy " "of nodes in a scene as well as scenes themselves. Nodes can be added, " @@ -60922,28 +61966,28 @@ msgid "" "thus in charge of the game loop." msgstr "" "作为最é‡è¦çš„类之一,[SceneTree]管ç†ç€åœºæ™¯ä¸èŠ‚ç‚¹çš„å±‚æ¬¡ç»“æž„ä»¥åŠåœºæ™¯æœ¬èº«ã€‚节点å¯" -"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚æ•´ä¸ªåœºæ™¯æ ‘ï¼ˆä»¥åŠå½“å‰åœºæ™¯ï¼‰å¯ä»¥è¢«æš‚åœã€‚场景å¯ä»¥è¢«åŠ è½½ã€" -"切æ¢å’Œé‡æ–°åŠ è½½ã€‚\n" -"ä½ ä¹Ÿå¯ä»¥ä½¿ç”¨[SceneTree]å°†ä½ çš„èŠ‚ç‚¹ç»„ç»‡æˆç»„:æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…åˆ°ä½ æƒ³è¦åˆ›å»ºçš„" -"组,例如一个 \"敌人 \"组。然åŽä½ å¯ä»¥è¿ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所" +"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚æ•´ä¸ªåœºæ™¯æ ‘å¯ä»¥è¢«æš‚åœï¼ŒåŒ…括当å‰åœºæ™¯ã€‚场景å¯ä»¥è¢«åŠ è½½ã€åˆ‡" +"æ¢å’Œé‡æ–°åŠ è½½ã€‚\n" +"ä½ ä¹Ÿå¯ä»¥ä½¿ç”¨[SceneTree]å°†ä½ çš„èŠ‚ç‚¹ç»„ç»‡æˆç»„,æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…åˆ°ä½ æƒ³è¦åˆ›å»ºçš„" +"组,例如一个 \"敌人\" 组。然åŽä½ å¯ä»¥è¿ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所" "有组æˆå‘˜çš„属性。\n" -"[SceneTree]是场景使用的默认[MainLoop]å®žçŽ°ï¼Œå› æ¤è´Ÿè´£æ¸¸æˆçš„循环。" +"[SceneTree]由场景使用的默认[MainLoop]å®žçŽ°ï¼Œå› æ¤è´Ÿè´£æ¸¸æˆçš„循环。" #: doc/classes/SceneTree.xml:12 msgid "" "https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/" +"scene_tree.html" #: doc/classes/SceneTree.xml:13 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/" +"multiple_resolutions.html" #: doc/classes/SceneTree.xml:21 msgid "" @@ -60960,6 +62004,16 @@ msgid "" "immediately, use [method call_group_flags] with the [constant " "GROUP_CALL_REALTIME] flag." msgstr "" +"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚" +"æ•°æ¥å°†å‚æ•°ä¼ é€’ç»™ [code]method[/code]ã€‚æ¤æ–¹æ³•ç‰æ•ˆäºŽä½¿ç”¨ [constant " +"GROUP_CALL_DEFAULT] æ ‡å¿—è°ƒç”¨ [method call_group_flags]。\n" +"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±7ä¸ªå‚æ•°ä¼ 递给这个方" +"法)。\n" +"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method " +"call_group] å°†é™é»˜å¤±è´¥ã€‚\n" +"[b]注æ„:[/b] [method call_group] 将始终调用具有一帧延迟的方法,其方å¼ç±»ä¼¼äºŽ " +"[method Object.call_deferred]。è¦ç«‹å³è°ƒç”¨æ–¹æ³•,请将 [method " +"call_group_flags] 与 [constant GROUP_CALL_REALTIME] æ ‡å¿—ä¸€èµ·ä½¿ç”¨ã€‚" #: doc/classes/SceneTree.xml:33 msgid "" @@ -60976,9 +62030,20 @@ msgid "" "GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n" "[/codeblock]" msgstr "" +"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code],éµä»Žç»™å®šçš„ [enum " +"GroupCallFlags]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚æ•°æ¥å°†å‚æ•°ä¼ é€’ç»™ " +"[code]method[/code]。\n" +"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±8ä¸ªå‚æ•°ä¼ 递给这个方" +"法)。\n" +"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method " +"call_group_flags] å°†é™é»˜å¤±è´¥ã€‚\n" +"[codeblock]\n" +"# ç«‹å³ä»¥ç›¸å的顺åºè°ƒç”¨è¯¥æ–¹æ³•。\n" +"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree." +"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n" +"[/codeblock]" #: doc/classes/SceneTree.xml:46 -#, fuzzy msgid "" "Changes the running scene to the one at the given [code]path[/code], after " "loading it into a [PackedScene] and creating a new instance.\n" @@ -60989,13 +62054,14 @@ msgid "" "node is added on the next idle frame. You won't be able to access it " "immediately after the [method change_scene] call." msgstr "" -"å°†æ£åœ¨è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[code]path[/code]ä¸Šçš„åœºæ™¯ï¼Œåœ¨å°†å…¶åŠ è½½åˆ°ä¸€ä¸ª" +"å°†æ£åœ¨è¿è¡Œçš„场景改å˜ä¸ºæŒ‡å®šçš„[code]path[/code]ä¸çš„åœºæ™¯ï¼Œåœ¨å°†å…¶åŠ è½½åˆ°" "[PackedScene]ä¸å¹¶åˆ›å»ºä¸€ä¸ªæ–°çš„实例。\n" "æˆåŠŸæ—¶è¿”å›ž[constant OK],如果[code]path[/code]ä¸èƒ½è¢«åŠ è½½åˆ°ä¸€ä¸ª[PackedScene]" -"ä¸ï¼Œåˆ™è¿”回[constant ERR_CANT_CREATE],如果该场景ä¸èƒ½è¢«å®žä¾‹åŒ–。" +"ä¸ï¼Œï¼Œè¯¥åœºæ™¯ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant ERR_CANT_CREATE]。\n" +"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„åœºæ™¯èŠ‚ç‚¹æ˜¯åœ¨ä¸‹ä¸€ä¸ªç©ºé—²å¸§ä¸æ·»åŠ ã€‚åœ¨[method " +"change_scene]调用之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚" #: doc/classes/SceneTree.xml:55 -#, fuzzy msgid "" "Changes the running scene to a new instance of the given [PackedScene].\n" "Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene " @@ -61004,12 +62070,13 @@ msgid "" "node is added on the next idle frame. You won't be able to access it " "immediately after the [method change_scene_to] call." msgstr "" -"å°†æ£åœ¨è¿è¡Œçš„场景改å˜ä¸ºä¸€ä¸ªç»™å®šçš„[PackedScene]的新实例。\n" +"å°†æ£åœ¨è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[PackedScene]的新实例。\n" "æˆåŠŸæ—¶è¿”å›ž[constant OK],如果场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant " -"ERR_CANT_CREATE]。" +"ERR_CANT_CREATE]。\n" +"[b]注æ„:[/b] åœºæ™¯çš„æ”¹å˜æ˜¯å»¶è¿Ÿçš„ï¼Œæ–°çš„åœºæ™¯èŠ‚ç‚¹æ˜¯åœ¨ä¸‹ä¸€ä¸ªç©ºé—²å¸§ä¸æ·»åŠ ã€‚åœ¨è°ƒç”¨" +"[method change_scene_to]之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚" #: doc/classes/SceneTree.xml:65 -#, fuzzy msgid "" "Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after " "the given time in seconds elapsed in this [SceneTree]. If " @@ -61027,13 +62094,14 @@ msgstr "" "返回一个[SceneTreeTimer],在这个[SceneTree]ä¸ç»è¿‡ç»™å®šçš„æ—¶é—´ï¼ˆç§’)åŽï¼Œè¯¥" "[SceneTreeTimer.timeout]å°†å‘出信å·ã€‚如果[code]pause_mode_process[/code]被设置" "为[code]false[/code],暂åœ[SceneTree]也将暂åœè¯¥å®šæ—¶å™¨ã€‚\n" -"常用于创建一个一次性的延迟定时器,如下é¢çš„例å。\n" +"常用于创建一次性的延迟定时器,如下é¢çš„例å:\n" "[codeblock]\n" "func some_function():\n" " print(\"start\")\n" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"end\")\n" -"[/codeblock]" +"[/codeblock]\n" +"计时器将在其时间结æŸåŽè¢«è‡ªåŠ¨é‡Šæ”¾ã€‚" #: doc/classes/SceneTree.xml:79 msgid "" @@ -61069,13 +62137,12 @@ msgid "Returns [code]true[/code] if the given group exists." msgstr "如果给定的组å˜åœ¨ï¼Œè¿”回[code]true[/code]。" #: doc/classes/SceneTree.xml:129 -#, fuzzy msgid "" "Returns [code]true[/code] if the most recent [InputEvent] was marked as " "handled with [method set_input_as_handled]." msgstr "" -"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回" -"[code]true[/code]。" +"如果节点æ£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则" +"返回[code]true[/code]。" #: doc/classes/SceneTree.xml:135 msgid "" @@ -61104,7 +62171,6 @@ msgid "" msgstr "å°†ç»™å®šçš„å¯¹è±¡æŽ’é˜Ÿå‡†å¤‡åˆ é™¤ï¼Œå³åœ¨å½“å‰å¸§ä¹‹åŽè°ƒç”¨ [method Object.free] 。" #: doc/classes/SceneTree.xml:166 -#, fuzzy msgid "" "Quits the application at the end of the current iteration. A process " "[code]exit_code[/code] can optionally be passed as an argument. If this " @@ -61114,9 +62180,11 @@ msgid "" "iOS Human Interface Guidelines, the user is expected to close apps via the " "Home button." msgstr "" -"退出应用程åºã€‚进程 [code]exit_code[/code] å¯ä»¥é€‰æ‹©ä½œä¸ºå‚æ•°ä¼ é€’ã€‚å¦‚æžœæ¤å‚数为 " -"[code]0[/code] 或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„ [member OS." -"exit_code]。" +"在当å‰è¿ä»£ç»“æŸæ—¶é€€å‡ºåº”用程åºã€‚进程的[code]exit_code[/code]å¯ä»¥é€‰æ‹©æ€§åœ°ä½œä¸ºå‚" +"æ•°ä¼ é€’ã€‚å¦‚æžœè¿™ä¸ªå‚æ•°æ˜¯[code]0[/code]或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„" +"[member OS.exit_code]。\n" +"[b]注æ„:[/b] 在iOS上,这个方法ä¸èµ·ä½œç”¨ã€‚å‚考iOSç•Œé¢æŒ‡å—建议,用户应该通过主" +"页按钮æ¥å…³é—应用程åºã€‚" #: doc/classes/SceneTree.xml:173 msgid "" @@ -61158,28 +62226,28 @@ msgstr "" "code],尊é‡ç»™å®šçš„ [enum GroupCallFlags]。" #: doc/classes/SceneTree.xml:207 -#, fuzzy msgid "Marks the most recent [InputEvent] as handled." -msgstr "å°†å¿«æ·æ–¹å¼çš„ [InputEvent] 作为 [String] 返回。" +msgstr "将最新的[InputEvent]æ ‡è®°ä¸ºå·²å¤„ç†ã€‚" #: doc/classes/SceneTree.xml:214 -#, fuzzy msgid "" "If [code]true[/code], the application quits automatically on going back (e." "g. on Android). Enabled by default.\n" "To handle 'Go Back' button when this option is disabled, use [constant " "MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]." msgstr "" -"如果 [code]true[/code],应用程åºä¼šåœ¨è¿”回时自动退出(例如在 Android 上)。默认" -"å¯ç”¨ã€‚\n" -"è¦åœ¨ç¦ç”¨æ¤é€‰é¡¹æ—¶å¤„ç†â€œè¿”å›žâ€æŒ‰é’®ï¼Œè¯·ä½¿ç”¨ [constant DisplayServer." -"WINDOW_EVENT_GO_BACK_REQUEST]。" +"如果[code]true[/code],应用程åºåœ¨è¿”回时自动退出,例如在Android上。默认情况是" +"å¯ç”¨çš„。\n" +"è¦åœ¨è¿™ä¸ªé€‰é¡¹è¢«ç¦ç”¨æ—¶å¤„ç†'Go Back'按钮,请使用 [constant MainLoop." +"NOTIFICATION_WM_GO_BACK_REQUEST] 。" #: doc/classes/SceneTree.xml:225 msgid "" "Configures screen stretching to the given [enum StretchMode], [enum " "StretchAspect], minimum size and [code]scale[/code]." msgstr "" +"å°†å±å¹•拉伸é…置为给定的 [enum StretchMode]ã€[enum StretchAspect]ã€æœ€å°å°ºå¯¸å’Œ " +"[code]scale[/code]。" #: doc/classes/SceneTree.xml:231 msgid "The current scene." @@ -61241,7 +62309,6 @@ msgstr "" "过连接到 [SceneTree] çš„ä¿¡å·æ¥å®Œæˆçš„。" #: doc/classes/SceneTree.xml:253 -#, fuzzy msgid "" "If [code]true[/code], the [SceneTree] is paused. Doing so will have the " "following behavior:\n" @@ -61250,10 +62317,10 @@ msgid "" "- [method Node._process], [method Node._physics_process] and [method Node." "_input] will not be called anymore in nodes." msgstr "" -"如果 [code]true[/code]ï¼Œåˆ™æš‚åœ [SceneTree]ã€‚è¿™æ ·åšå°†æœ‰ä»¥ä¸‹è¡Œä¸ºï¼š\n" -"- 2D å’Œ 3D 物ç†å°†åœæ¢ã€‚\n" -"- [method Node._process]ã€[method Node._physics_process] å’Œ[method Node." -"_input] å°†ä¸å†åœ¨èŠ‚ç‚¹ä¸è°ƒç”¨ã€‚" +"如果[code]true[/code],[SceneTree]会暂åœã€‚è¿™æ ·åšä¼šæœ‰ä»¥ä¸‹è¡Œä¸º:\n" +"- 2Då’Œ3D物ç†å°†åœæ¢ã€‚这包括信å·å’Œç¢°æ’žæ£€æµ‹ã€‚\n" +"- 节点ä¸å†è°ƒç”¨[method Node._process]ã€[method Node._physics_process]å’Œ" +"[method Node._input]。" #: doc/classes/SceneTree.xml:258 msgid "" @@ -61264,14 +62331,12 @@ msgstr "" "连接。" #: doc/classes/SceneTree.xml:261 -#, fuzzy msgid "The [SceneTree]'s root [Viewport]." -msgstr "[SceneTree] çš„æ ¹ [Window]。" +msgstr "[SceneTree] çš„æ ¹ [Viewport]。" #: doc/classes/SceneTree.xml:264 -#, fuzzy msgid "If [code]true[/code], font oversampling is used." -msgstr "如果[code]true[/code],则å¯ç”¨æ³•çº¿æ˜ å°„ã€‚" +msgstr "如果 [code]true[/code],则使用å—ä½“è¶…é‡‡æ ·ã€‚" #: doc/classes/SceneTree.xml:270 msgid "" @@ -61299,9 +62364,8 @@ msgstr "" "和拖动文件的å±å¹•æ ‡è¯†ç¬¦ã€‚" #: doc/classes/SceneTree.xml:289 -#, fuzzy msgid "Emitted whenever global menu item is clicked." -msgstr "å½“é¡¹ç›®è¢«é€‰ä¸æ—¶è§¦å‘。" +msgstr "æ¯å½“å•击全局èœå•项时触å‘。" #: doc/classes/SceneTree.xml:294 msgid "" @@ -61359,7 +62423,7 @@ msgstr "" msgid "" "Emitted when the screen resolution (fullscreen) or window size (windowed) " "changes." -msgstr "" +msgstr "当å±å¹•分辨率(全å±ï¼‰æˆ–窗å£å¤§å°ï¼ˆçª—å£åŒ–ï¼‰æ”¹å˜æ—¶å‘出。" #: doc/classes/SceneTree.xml:345 msgid "" @@ -61403,37 +62467,37 @@ msgstr "以更高的分辨率渲染拉伸(æ’值)。" msgid "" "Keep the specified display resolution. No interpolation. Content may appear " "pixelated." -msgstr "" +msgstr "ä¿æŒæŒ‡å®šçš„æ˜¾ç¤ºåˆ†è¾¨çŽ‡ã€‚æ²¡æœ‰æ’值。内容å¯èƒ½ä¼šå‡ºçްåƒç´ 化。" #: doc/classes/SceneTree.xml:377 msgid "" "Fill the window with the content stretched to cover excessive space. Content " "may appear stretched." -msgstr "" +msgstr "用拉伸的内容填充窗å£ä»¥è¦†ç›–过多的空间。内容å¯èƒ½ä¼šè¢«æ‹‰ä¼¸ã€‚" #: doc/classes/SceneTree.xml:380 msgid "" "Retain the same aspect ratio by padding with black bars on either axis. This " "prevents distortion." -msgstr "" +msgstr "在任æ„轴上用黑æ¡å¡«å……æ¥ä¿æŒç›¸åŒçš„长宽比。这å¯ä»¥é˜²æ¢å¤±çœŸã€‚" #: doc/classes/SceneTree.xml:383 msgid "" "Expand vertically. Left/right black bars may appear if the window is too " "wide." -msgstr "" +msgstr "垂直展开。如果窗å£å¤ªå®½ï¼Œå¯èƒ½ä¼šå‡ºçް左/å³é»‘æ¡ã€‚" #: doc/classes/SceneTree.xml:386 msgid "" "Expand horizontally. Top/bottom black bars may appear if the window is too " "tall." -msgstr "" +msgstr "水平展开。如果窗å£å¤ªé«˜ï¼Œå¯èƒ½ä¼šå‡ºçŽ°é¡¶éƒ¨/底部黑æ¡ã€‚" #: doc/classes/SceneTree.xml:389 msgid "" "Expand in both directions, retaining the same aspect ratio. This prevents " "distortion while avoiding black bars." -msgstr "" +msgstr "在两个方å‘ä¸Šæ‰©å±•ï¼Œä¿æŒç›¸åŒçš„纵横比。这å¯ä»¥é˜²æ¢å¤±çœŸï¼ŒåŒæ—¶é¿å…黑æ¡ã€‚" #: doc/classes/SceneTreeTimer.xml:4 msgid "One-shot timer." @@ -61492,8 +62556,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting." -"html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/" +"scripting.html" #: doc/classes/Script.xml:17 msgid "Returns [code]true[/code] if the script can be instanced." @@ -61568,7 +62632,6 @@ msgid "The Editor's popup dialog for creating new [Script] files." msgstr "用于创建新 [Script] æ–‡ä»¶çš„ç¼–è¾‘å™¨å¼¹å‡ºå¯¹è¯æ¡†ã€‚" #: doc/classes/ScriptCreateDialog.xml:7 -#, fuzzy msgid "" "The [ScriptCreateDialog] creates script files according to a given template " "for a given scripting language. The standard use is to configure its fields " @@ -61581,14 +62644,14 @@ msgid "" " dialog.popup_centered()\n" "[/codeblock]" msgstr "" -"[ScriptCreateDialog] æ ¹æ®ç»™å®šè„šæœ¬è¯è¨€çš„给定模æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨è°ƒ" -"用 [method Window.popup] 方法之一之å‰é…ç½®å…¶å—æ®µã€‚\n" +"[ScriptCreateDialog] æ ¹æ®æŒ‡å®šè„šæœ¬è¯è¨€çš„特定模æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨ç±»ä¼¼" +"调用 [method Popup.popup] 方法之å‰é…ç½®å…¶å—æ®µã€‚\n" "[codeblock]\n" "func _ready():\n" -" dialog.config(\"Node\", \"res://new_node.gd\") # 用于引擎内类型\n" +" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n" " dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") " -"# 用于脚本类型\n" -" dialog.popup_center()\n" +"# For script types\n" +" dialog.popup_centered()\n" "[/codeblock]" #: doc/classes/ScriptCreateDialog.xml:25 @@ -61631,6 +62694,8 @@ msgid "" "code]. The file extension can be omitted from [code]base_path[/code]. It " "will be added based on the selected scripting language." msgstr "" +"æ‰“å¼€åˆ›å»ºè„šæœ¬çš„å¯¹è¯æ¡†ã€‚脚本将扩展[code]base_name[/code]。文件扩展åå¯ä»¥ä»Ž" +"[code]base_path[/code]ä¸çœç•¥ã€‚å®ƒå°†æ ¹æ®æ‰€é€‰æ‹©çš„脚本è¯è¨€æ·»åŠ ã€‚" #: doc/classes/ScriptEditor.xml:67 msgid "" @@ -61673,7 +62738,6 @@ msgid "A helper node for displaying scrollable elements such as lists." msgstr "ç”¨äºŽæ˜¾ç¤ºå¯æ»šåŠ¨å…ƒç´ ï¼ˆä¾‹å¦‚åˆ—è¡¨ï¼‰çš„è¾…åŠ©èŠ‚ç‚¹ã€‚" #: doc/classes/ScrollContainer.xml:7 -#, fuzzy msgid "" "A ScrollContainer node meant to contain a [Control] child. ScrollContainers " "will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or " @@ -61687,21 +62751,21 @@ msgid "" "they will upscale to the ScrollContainer's size if it's larger (scroll is " "invisible for the chosen dimension)." msgstr "" -"ScrollContainer 节点用于容纳一个 [Control] å节点。\n" -"ScrollContainers å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºä¸€ä¸ªæ»šåŠ¨æ¡å项([HScrollBar]ã€" -"[VScrollBar] ),并且åªä¼šåœ¨ ScrollContainer 区域内绘制控件。滚动æ¡å°†è‡ªåŠ¨ç»˜åˆ¶" -"在å³ä¾§ï¼ˆåž‚直)或底部(水平),并å…许拖动以在 ScrollContainer 内移动å¯è§†æŽ§ä»¶" -"(åŠå…¶å项)。滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽ ScrollContainer çš„ [member Control." -"rect_min_size] 自动调整抓å–器的大å°ã€‚\n" -"与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥åœ¨åé¡¹çš„å¤§å°æ ‡å¿—上设置 [code]EXPAND[/" -"code]ï¼Œå› æ¤å¦‚æžœ ScrollContainer çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒä»¬å°†" -"放大到 ScrollContainer 的大å°ã€‚" +"æ»šåŠ¨å®¹å™¨èŠ‚ç‚¹ï¼Œç”¨äºŽåŒ…å« [Control] å节点。 æ»šåŠ¨å®¹å™¨å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºæ»šåŠ¨æ¡å" +"项([HScrollBar]ã€[VScrollBar] 或两者),且仅在滚动容器区域内绘制控件。滚动æ¡" +"将自动绘制在å³ä¾§æˆ–底部,å³åž‚直或水平,并å…许拖动以在滚动容器内移动å¯è§†æŽ§ä»¶åŠ" +"å…¶å项。滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽæ»šåŠ¨å®¹å™¨çš„ [member Control.rect_min_size] 自" +"动调整抓å–器的大å°ã€‚与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥å°†åé¡¹çš„å¤§å°æ ‡å¿—设" +"置为 [code]EXPAND[/code]ï¼Œå½“æ»šåŠ¨å®¹å™¨çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒ" +"们将放大到滚动容器的大å°ã€‚" #: doc/classes/ScrollContainer.xml:16 msgid "" "Ensures the given [code]control[/code] is visible (must be a direct or " "indirect child of the ScrollContainer). Used by [member follow_focus]." msgstr "" +"ç¡®ä¿ç»™å®šçš„ [code]control[/code] 是å¯è§çš„,必须是滚动容器的直接或间接å级。由 " +"[member follow_focus] 使用。" #: doc/classes/ScrollContainer.xml:22 msgid "" @@ -61711,6 +62775,10 @@ msgid "" "[member scroll_horizontal_enabled]. If you want to only hide it instead, use " "its [member CanvasItem.visible] property." msgstr "" +"返回æ¤[ScrollContainer]的水平滚动æ¡[HScrollBar]。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必须的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³ç¦" +"用水平滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_horizontal_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则" +"使用其[member CanvasItem.visible]属性。" #: doc/classes/ScrollContainer.xml:29 msgid "" @@ -61720,6 +62788,10 @@ msgid "" "[member scroll_vertical_enabled]. If you want to only hide it instead, use " "its [member CanvasItem.visible] property." msgstr "" +"返回æ¤[ScrollContainer]的垂直滚动æ¡[VScrollBar]。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³ç¦" +"用垂直滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_vertical_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则使" +"用其[member CanvasItem.visible]属性。" #: doc/classes/ScrollContainer.xml:36 msgid "" @@ -61790,20 +62862,20 @@ msgstr "" "进制版本,请å‚阅 [Mutex]。" #: doc/classes/Semaphore.xml:16 -#, fuzzy msgid "" "Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] " "on success, [constant ERR_BUSY] otherwise." msgstr "" -"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。" +"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant " +"ERR_BUSY]。" #: doc/classes/Semaphore.xml:22 -#, fuzzy msgid "" "Tries to wait for the [Semaphore], if its value is zero, blocks until non-" "zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise." msgstr "" -"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。" +"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant " +"ERR_BUSY]。" #: doc/classes/Separator.xml:4 msgid "Base class for separators." @@ -61835,15 +62907,15 @@ msgstr "" #: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/shading/index.html" #: doc/classes/Shader.xml:11 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/" "what_are_shaders.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/" -"what_are_shaders.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/" +"your_first_shader/what_are_shaders.html" #: doc/classes/Shader.xml:18 msgid "" @@ -61897,6 +62969,9 @@ msgid "" "[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so " "care should be taken when using them." msgstr "" +"返回该ç€è‰²å™¨çš„自定义。自定义å¯ä»¥åœ¨Godotä¸ç”¨äºŽæ·»åŠ ç€è‰²å™¨é€»è¾‘所需的GLSLé¢„å¤„ç†æŒ‡" +"令(例如:扩展)。\n" +"[b]注æ„:[/b] 自定义没有ç»è¿‡Godotç€è‰²å™¨è§£æžå™¨çš„验è¯ï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。" #: doc/classes/Shader.xml:57 msgid "Mode used to draw all 3D objects." @@ -61917,7 +62992,6 @@ msgid "A material that uses a custom [Shader] program." msgstr "使用自定义 [Shader] 程åºçš„æè´¨ã€‚" #: doc/classes/ShaderMaterial.xml:7 -#, fuzzy msgid "" "A material that uses a custom [Shader] program to render either items to " "screen or process particles. You can create multiple materials for the same " @@ -61927,8 +63001,10 @@ msgid "" "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -"使用自定义[Shader]ç¨‹åºæ¥æ¸²æŸ“å±å¹•ä¸Šçš„ç‰©å“æˆ–ç²’åçš„æè´¨ã€‚ä½ å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨åˆ›" -"建多个æè´¨ï¼Œä½†è¦ä¸ºç€è‰²å™¨ä¸å®šä¹‰çš„uniformé…ç½®ä¸åŒçš„值。" +"使用自定义 [Shader] ç¨‹åºæ¸²æŸ“项目以ç›é€‰æˆ–处ç†ç²’åçš„æè´¨ã€‚您å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨" +"åˆ›å»ºå¤šç§æè´¨ï¼Œä½†å¯ä»¥ä¸ºç€è‰²å™¨ä¸å®šä¹‰çš„uniformsé…ç½®ä¸åŒçš„值。\n" +"[b]注æ„:[/b] 由于渲染器é™åˆ¶ï¼Œåœ¨ [GIProbe] ä¸ä½¿ç”¨æ—¶ï¼Œè‡ªå‘å…‰ [ShaderMaterial] " +"æ— æ³•å‘å…‰ã€‚åªæœ‰è‡ªå‘光的 [SpatialMaterial] å¯ä»¥åœ¨ [GIProbe] ä¸å‘光。" #: doc/classes/ShaderMaterial.xml:18 msgid "" @@ -61966,18 +63042,16 @@ msgid "Base class for all 3D shape resources." msgstr "所有 3D 形状资æºçš„基类。" #: doc/classes/Shape.xml:7 -#, fuzzy msgid "" "Base class for all 3D shape resources. Nodes that inherit from this can be " "used as shapes for a [PhysicsBody] or [Area] objects." msgstr "" -"所有 3D 形状资æºçš„基类。继承自æ¤çš„节点å¯ç”¨ä½œ [PhysicsBody3D] 或 [Area3D] 对象" -"的形状。" +"所有3D形状资æºçš„基类。继承于æ¤çš„节点å¯ä»¥ä½œä¸º[PhysicsBody]或[Area]对象的形状。" #: doc/classes/Shape.xml:16 msgid "" "Returns the [ArrayMesh] used to draw the debug collision for this [Shape]." -msgstr "" +msgstr "返回用于绘制æ¤[Shape]的调试碰撞的[ArrayMesh]。" #: doc/classes/Shape.xml:22 msgid "" @@ -61988,6 +63062,10 @@ msgid "" "better for performance, at the cost of accuracy around edges as it makes " "them less sharp." msgstr "" +"形状的碰撞边è·ã€‚åªåœ¨Bullet物ç†è¿ç®—ä¸ä½¿ç”¨ã€‚\n" +"碰撞边è·å…è®¸é€šè¿‡åœ¨å½¢çŠ¶å‘¨å›´æ·»åŠ é¢å¤–的外壳æ¥ä½¿ç¢°æ’žæ£€æµ‹æ›´æœ‰æ•ˆã€‚当物体é‡å 的部分" +"è¶…è¿‡å…¶è¾¹è·æ—¶ï¼Œç¢°æ’žç®—æ³•çš„æˆæœ¬ä¼šæ›´é«˜ï¼Œæ‰€ä»¥è¾¹è·çš„æ•°å€¼è¶Šé«˜å¯¹æ€§èƒ½è¶Šå¥½ï¼Œä½†ä»£ä»·æ˜¯è¾¹" +"缘的精度会é™ä½Žã€‚" #: doc/classes/Shape2D.xml:4 msgid "Base class for all 2D shapes." @@ -62060,14 +63138,13 @@ msgstr "" "试的è¿åЍ ([code]shape_motion[/code])。" #: doc/classes/Shape2D.xml:62 -#, fuzzy msgid "" "Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled " "with the specified [code]color[/code]. The exact drawing method is specific " "for each shape and cannot be configured." msgstr "" -"使用填充了指定 [code] color [/code] çš„ [RenderingServer] API 在 [CanvasItem] " -"上绘制实体形状。确切的绘制方法是针对æ¯ä¸ªå½¢çŠ¶çš„ï¼Œæ— æ³•é…置。" +"用[VisualServer]API在[CanvasItem]上绘制实体形状,并填充指定的[code]color[/" +"code]。确切的绘制方法是æ¯ä¸ªå½¢çŠ¶ç‰¹æœ‰çš„ï¼Œæ— æ³•é…置。" #: doc/classes/Shape2D.xml:68 msgid "The shape's custom solver bias." @@ -62116,7 +63193,6 @@ msgid "Skeleton for characters and animated objects." msgstr "角色和动画对象的骨架。" #: doc/classes/Skeleton.xml:7 -#, fuzzy msgid "" "Skeleton provides a hierarchical interface for managing bones, including " "pose, rest and animation (see [Animation]). It can also use ragdoll " @@ -62127,11 +63203,12 @@ msgid "" "with respect to skeleton, so it not the actual global/world transform of the " "bone." msgstr "" -"Skeleton3D æä¾›äº†ç”¨äºŽç®¡ç†éª¨éª¼çš„分层界é¢ï¼ŒåŒ…括姿势ã€ä¼‘æ¯å’ŒåŠ¨ç”»ï¼ˆå‚阅 " -"[Animation])。它还å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†(ragdoll physics)。\n" -"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ç”±ä»¥ä¸‹å±‚次顺åºç¡®å®šï¼šé™æ¢å§¿åŠ¿ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿åŠ¿ã€‚\n" -"请注æ„,下é¢çš„â€œå…¨å±€å§¿åŠ¿â€æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œå› æ¤å®ƒä¸æ˜¯éª¨éª¼çš„实际全" -"å±€/ä¸–ç•Œå˜æ¢ã€‚" +"骨架为管ç†éª¨éª¼æä¾›äº†åˆ†å±‚的界é¢ï¼ŒåŒ…括姿势ã€ä¼‘æ¢å’ŒåŠ¨ç”»ï¼ˆå‚阅[Animation])。它还" +"å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†ã€‚\n" +"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢æ˜¯ç”±ä»¥ä¸‹å±‚次顺åºå†³å®šçš„:休æ¢å§¿åŠ¿ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿" +"势。\n" +"注æ„,下é¢çš„ \"global pose\"å…¨å±€å§¿åŠ¿æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ï¼Œæ‰€ä»¥å®ƒä¸æ˜¯" +"éª¨éª¼çš„å®žé™…å…¨å±€æˆ–ä¸–ç•Œå˜æ¢ã€‚" #: doc/classes/Skeleton.xml:20 msgid "" @@ -62174,14 +63251,13 @@ msgstr "" "\"全局 \"å˜æ¢ã€‚" #: doc/classes/Skeleton.xml:73 -#, fuzzy msgid "" "Returns the overall transform of the specified bone, with respect to the " "skeleton, but without any global pose overrides. Being relative to the " "skeleton frame, this is not the actual \"global\" transform of the bone." msgstr "" -"è¿”å›žç›¸å¯¹äºŽéª¨æž¶çš„æŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ã€‚ç”±äºŽæ˜¯ç›¸å¯¹äºŽéª¨æž¶çš„ï¼Œè¿™ä¸æ˜¯è¯¥éª¨éª¼çš„实际 " -"\"全局 \"å˜æ¢ã€‚" +"è¿”å›žæŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œç›¸å¯¹äºŽéª¨æž¶ï¼Œä½†æ²¡æœ‰ä»»ä½•全局姿势覆盖。相对于骨架帧,这" +"䏿˜¯éª¨éª¼çš„实际 \"global\" å˜æ¢ã€‚" #: doc/classes/Skeleton.xml:80 msgid "Returns the name of the bone at index [code]index[/code]." @@ -62221,9 +63297,8 @@ msgstr "" "[b]注æ„:[/b] [code]parent_idx[/code] å¿…é¡»å°äºŽ [code]bone_idx[/code]。" #: doc/classes/Skeleton.xml:196 -#, fuzzy msgid "Sets the pose transform for bone [code]bone_idx[/code]." -msgstr "为骨骼[code]bone_idx[/code]设置休æ¯å˜æ¢ã€‚" +msgstr "设置骨骼 [code]bone_idx[/code] çš„å§¿åŠ¿å˜æ¢ã€‚" #: doc/classes/Skeleton.xml:204 msgid "Sets the rest transform for bone [code]bone_idx[/code]." @@ -62246,7 +63321,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/2d_skeletons." +"html" #: doc/classes/Skeleton2D.xml:17 msgid "" @@ -62274,6 +63350,8 @@ msgid "" "SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a " "certain point in 3D by rotating all bones in the chain accordingly." msgstr "" +"SkeletonIK用于将[Skeleton]骨链的末端骨骼置于3Dä¸çš„æŸä¸€ç‚¹ï¼Œå¹¶ç›¸åº”åœ°æ—‹è½¬éª¨é“¾ä¸" +"的所有骨骼。" #: doc/classes/SkeletonIK.xml:7 msgid "" @@ -62308,6 +63386,32 @@ msgid "" "skeleton_ik_node.set_interpolation(0.0)\n" "[/codeblock]" msgstr "" +"SkeletonIK用于将[Skeleton]骨链的末端骨骼放置在3DæŸä¸€ç‚¹ä¸Šï¼Œå¹¶ç›¸åº”地旋转骨链ä¸" +"的所有骨骼。游æˆä¸IK的典型场景是将角色的脚放在地é¢ä¸Šï¼Œæˆ–者将角色的手放在当å‰" +"æŒæœ‰çš„物体上。SkeletonIK在内部使用FabrikInverseKinematicæ¥è§£å†³éª¨éª¼é“¾ï¼Œå¹¶å°†ç»“" +"果应用于[Skeleton] [code]bones_global_pose_override[/code]å±žæ€§ä¸æ‰€æœ‰å—å½±å“çš„" +"骨骼链。如果完全应用,这将覆盖任何æ¥è‡ª[Animation]çš„éª¨éª¼å˜æ¢æˆ–用户设置的骨骼自" +"定义姿势。应用é‡å¯ä»¥ç”¨[code]interpolation[/code]å±žæ€§æ¥æŽ§åˆ¶ã€‚\n" +"[codeblock]\n" +"# 在æ¯ä¸€ä¸ªæ–°çš„帧上自动应用IKæ•ˆæžœï¼ˆä¸æ˜¯å½“å‰çš„)。\n" +"skeleton_ik_node.start()\n" +"\n" +"# åªåœ¨å½“å‰å¸§ä¸Šåº”用IK效果\n" +"skeleton_ik_node.start(true)\n" +"\n" +"# åœæ¢IK效果并é‡ç½®éª¨éª¼ä¸Šçš„bones_global_pose_override\n" +"skeleton_ik_node.stop()\n" +"\n" +"# 应用完整的IK效果\n" +"skeleton_ik_node.set_interpolation(1.0)\n" +"\n" +"# 应用一åŠçš„IK效果\n" +"skeleton_ik_node.set_interpolation(0.5)\n" +"\n" +"# 应用零IK效果(数值为0.01或低于0.01也会移除骨骼上的" +"bones_global_pose_override)。\n" +"skeleton_ik_node.set_interpolation(0.0)\n" +"[/codeblock]" #: doc/classes/SkeletonIK.xml:35 msgid "" @@ -62315,6 +63419,8 @@ msgid "" "the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node " "when SkeletonIK entered the [SceneTree]." msgstr "" +"返回SkeletonIK进入[SceneTree]æ—¶å˜åœ¨çš„父[Skeleton]节点。如果父节点在SkeletonIK" +"进入[SceneTree]æ—¶ä¸æ˜¯[Skeleton]节点,则返回null。" #: doc/classes/SkeletonIK.xml:41 msgid "" @@ -62323,6 +63429,10 @@ msgid "" "stopped or [method start] was used with the [code]one_time[/code] parameter " "set to [code]true[/code]." msgstr "" +"如果 SkeletonIK å°† IK 效果应用到 [Skeleton] 骨骼的连ç»å¸§ä¸Šï¼Œåˆ™è¿”回 " +"[code]true[/code]。如果 SkeletonIK åœæ¢æˆ–使用 [method start] 且 " +"[code]one_time[/code] 傿•°è®¾ç½®ä¸º [code]true[/code],则返回 [code]false[/" +"code]。" #: doc/classes/SkeletonIK.xml:48 msgid "" @@ -62331,6 +63441,8 @@ msgid "" "[code]true[/code], this will take effect immediately but also reset on the " "next frame." msgstr "" +"开始将 IK 效果应用到æ¯ä¸€å¸§çš„ [Skeleton] 骨骼,但åªä¼šåœ¨ä¸‹ä¸€å¸§å¼€å§‹ç”Ÿæ•ˆã€‚如果 " +"[code]one_time[/code] 为 [code]true[/code],这将立å³ç”Ÿæ•ˆï¼Œä½†ä¼šåœ¨ä¸‹ä¸€å¸§é‡ç½®ã€‚" #: doc/classes/SkeletonIK.xml:54 msgid "" @@ -62338,6 +63450,8 @@ msgid "" "calls [method Skeleton.clear_bones_global_pose_override] to remove existing " "overrides on all bones." msgstr "" +"åœæ¢å°† IK 效果应用到æ¯å¸§çš„ [Skeleton] 骨骼,并调用 [method Skeleton." +"clear_bones_global_pose_override] 以移除所有骨骼上的现有覆盖。" #: doc/classes/SkeletonIK.xml:60 msgid "" @@ -62347,6 +63461,10 @@ msgid "" "disable the SkeletonIK. A value at or below [code]0.01[/code] also calls " "[method Skeleton.clear_bones_global_pose_override]." msgstr "" +"IK 效果应用于当å‰éª¨æž¶éª¨éª¼é“¾çš„æ’å€¼ã€‚ [code]1.0[/code] 的值将完全覆盖所有骨架骨" +"éª¼å˜æ¢ï¼Œè€Œ [code]0.0[/code] 的值将在视觉上ç¦ç”¨ SkeletonIK。ç‰äºŽæˆ–低于 " +"[code]0.01[/code] 的值也调用 [method Skeleton." +"clear_bones_global_pose_override]。" #: doc/classes/SkeletonIK.xml:63 msgid "" @@ -62356,28 +63474,35 @@ msgid "" "bones. The middle chain bone position will be linearly interpolated with the " "magnet position." msgstr "" +"IK 链的次è¦ç›®æ ‡ä½ç½®ï¼ˆé¦–先是 [member target] 属性或 [member target_node])。使" +"用ç£é“ä½ç½®ï¼ˆæžç‚¹ç›®æ ‡ï¼‰æ¥æŽ§åˆ¶ IK 链的弯曲。仅当骨骼链具有 2 ä¸ªä»¥ä¸Šçš„éª¨éª¼æ—¶æ‰æœ‰" +"效。ä¸é—´é“¾éª¨ä½ç½®å°†ä¸Žç£é“ä½ç½®è¿›è¡Œçº¿æ€§æ’值。" #: doc/classes/SkeletonIK.xml:66 msgid "" "Number of iteration loops used by the IK solver to produce more accurate " "(and elegant) bone chain results." -msgstr "" +msgstr "IK解算器使用的è¿ä»£å¾ªçŽ¯çš„æ•°é‡ï¼Œä»¥äº§ç”Ÿæ›´å‡†ç¡®ï¼ˆå’Œä¼˜é›…)的骨链效果。" #: doc/classes/SkeletonIK.xml:69 msgid "" "The minimum distance between bone and goal target. If the distance is below " "this value, the IK solver stops further iterations." msgstr "" +"éª¨éª¼ä¸Žç›®æ ‡å¯¹è±¡ä¹‹é—´çš„æœ€å°è·ç¦»ã€‚如果è·ç¦»ä½ŽäºŽè¿™ä¸ªå€¼ï¼ŒIKè§£ç®—å™¨å°†åœæ¢è¿›ä¸€æ¥çš„è¿" +"代。" #: doc/classes/SkeletonIK.xml:72 msgid "" "If [code]true[/code] overwrites the rotation of the tip bone with the " "rotation of the [member target] (or [member target_node] if defined)." msgstr "" +"如果[code]true[/code],则用 [member target] (或者如果定义了[member " +"target_node]])的旋转覆盖尖端骨骼的旋转。" #: doc/classes/SkeletonIK.xml:75 msgid "The name of the current root bone, the first bone in the IK chain." -msgstr "" +msgstr "当剿 ¹éª¨çš„å称,å³IK链ä¸çš„第一个骨。" #: doc/classes/SkeletonIK.xml:78 msgid "" @@ -62386,18 +63511,25 @@ msgid "" "[member target_node] path is available the nodes transform is used instead " "and this property is ignored." msgstr "" +"放置尖端骨骼的 IK é“¾çš„ç¬¬ä¸€ä¸ªç›®æ ‡ï¼Œå¦‚æžœ [member override_tip_basis] 是 " +"[code]true[/code],尖端骨骼的旋转方å¼ã€‚如果 [member target_node] 路径å¯ç”¨ï¼Œåˆ™" +"ä½¿ç”¨èŠ‚ç‚¹å˜æ¢ï¼Œå¹¶å¿½ç•¥æ¤å±žæ€§ã€‚" #: doc/classes/SkeletonIK.xml:81 msgid "" "Target node [NodePath] for the IK chain. If available, the node's current " "[Transform] is used instead of the [member target] property." msgstr "" +"IKé“¾çš„ç›®æ ‡èŠ‚ç‚¹[NodePath]。如果有的è¯ï¼Œå°†ä½¿ç”¨èŠ‚ç‚¹å½“å‰çš„[Transform]ï¼Œè€Œä¸æ˜¯" +"[member target]属性。" #: doc/classes/SkeletonIK.xml:84 msgid "" "The name of the current tip bone, the last bone in the IK chain placed at " "the [member target] transform (or [member target_node] if defined)." msgstr "" +"当å‰å°–端骨骼的å称,IK 链䏿”¾ç½®åœ¨ [member target] å˜æ¢å¤„的最åŽä¸€ä¸ªéª¨éª¼ï¼ˆæˆ–者" +"已定义 [member target_node])。" #: doc/classes/SkeletonIK.xml:87 msgid "" @@ -62405,13 +63537,14 @@ msgid "" "magnet target (pole target) when calculating the bone chain. Use the magnet " "position (pole target) to control the bending of the IK chain." msgstr "" +"如果[code]true[/code],指示IK求解器在解算器链时考虑次è¦ç£é“ç›®æ ‡ï¼ˆæžç‚¹ç›®æ ‡ï¼‰ã€‚" +"使用ç£é“ä½ç½®ï¼ˆç£æžç›®æ ‡ï¼‰æ¥æŽ§åˆ¶IK链的弯曲。" #: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7 msgid "The base class for [PanoramaSky] and [ProceduralSky]." -msgstr "" +msgstr "[PanoramaSky] å’Œ [ProceduralSky] 的基类。" #: doc/classes/Sky.xml:15 -#, fuzzy msgid "" "The [Sky]'s radiance map size. The higher the radiance map size, the more " "detailed the lighting from the [Sky] will be.\n" @@ -62423,10 +63556,12 @@ msgid "" "and performance. Be careful when using high radiance size values as these " "can cause crashes on low-end GPUs." msgstr "" -"[Sky]çš„è¾ç…§åº¦è´´å›¾å¤§å°ã€‚è¾ç…§åº¦è´´å›¾å°ºå¯¸è¶Šå¤§ï¼Œ[Sky]的照明就越细致。\n" -"有关值,请å‚阅 [enum RadianceSize] 常é‡ã€‚\n" -"[b]注æ„:[/b] æŸäº›ç¡¬ä»¶åœ¨æ›´é«˜çš„è¾ç…§åº¦å°ºå¯¸ä¸‹ä¼šå‡ºçŽ°é—®é¢˜ï¼Œå°¤å…¶æ˜¯ [constant " -"RADIANCE_SIZE_512] åŠä»¥ä¸Šã€‚仅在高端硬件上使用如æ¤é«˜çš„值。" +"[Sky]çš„è¾å°„贴图大å°ã€‚è¾å°„贴图尺寸越大,[Sky]的照明就越详细。\n" +"有关值,å‚阅 [enum RadianceSize] 常é‡ã€‚\n" +"[b]注æ„:[/b] å¦‚æžœæ‚¨çš„é¡¹ç›®ä¸æœ‰éžå¸¸æ¸…æ™°çš„å射表é¢ï¼Œå¹¶ä¸”ä¸ä½¿ç”¨ " +"[ReflectionProbe] 或 [GIProbe],您æ‰ä¼šå—益于高è¾å°„尺寸。对于大多数项目,将 " +"[member radiance_size] ä¿æŒä¸ºé»˜è®¤å€¼æ˜¯è§†è§‰æ•ˆæžœå’Œæ€§èƒ½ä¹‹é—´çš„æœ€ä½³æŠ˜è¡·ã€‚使用高è¾å°„" +"大å°å€¼æ—¶è¦å°å¿ƒï¼Œå› 为这å¯èƒ½ä¼šå¯¼è‡´ä½Žç«¯ GPU 崩溃。" #: doc/classes/Sky.xml:22 msgid "Radiance texture size is 32×32 pixels." @@ -62454,6 +63589,9 @@ msgid "" "[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector " "as it is known to cause GPU hangs on certain systems." msgstr "" +"è¾å°„纹ç†å°ºå¯¸ä¸º1024×1024åƒç´ 。\n" +"[b]注æ„:[/b] [constant RADIANCE_SIZE_1024]åœ¨æ£€æŸ¥å™¨ä¸æ²¡æœ‰å…¬å¼€ï¼Œå› 为它在æŸäº›ç³»" +"统上会导致GPU挂起。" #: doc/classes/Sky.xml:41 msgid "" @@ -62461,6 +63599,9 @@ msgid "" "[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector " "as it is known to cause GPU hangs on certain systems." msgstr "" +"è¾å°„纹ç†å°ºå¯¸ä¸º2048×2048åƒç´ 。\n" +"[b]注æ„:[/b] [constant RADIANCE_SIZE_2048]没有在检查器ä¸å…¬å¼€ï¼Œå› 为它在æŸäº›ç³»" +"统上会导致GPU挂起。" #: doc/classes/Sky.xml:45 msgid "Represents the size of the [enum RadianceSize] enum." @@ -62476,6 +63617,9 @@ msgid "" "[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] " "signals are part of the [Range] class which this class inherits from." msgstr "" +"GUI滑å—的基类。\n" +"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯è¯¥ç±»" +"继承的[Range]类的一部分。" #: doc/classes/Slider.xml:16 msgid "" @@ -62502,15 +63646,13 @@ msgid "" msgstr "如果 [code]true[/code],滑å—将显示最å°å€¼å’Œæœ€å¤§å€¼çš„刻度。" #: doc/classes/SliderJoint.xml:4 -#, fuzzy msgid "Slider between two PhysicsBodies in 3D." -msgstr "3D ä¸ä¸¤ä¸ªç‰©ä½“ä¹‹é—´çš„æ´»å¡žå¼æ»‘å—。" +msgstr "在3Dä¸ä¸¤ä¸ªç‰©ç†ä½“之间的滑å—。" #: doc/classes/SliderJoint.xml:7 -#, fuzzy msgid "" "Slides across the X axis of the pivot object. See also [Generic6DOFJoint]." -msgstr "在ä¸å¿ƒå¯¹è±¡çš„ X 轴上滑动。" +msgstr "在枢轴对象的X轴上滑动。å‚阅[Generic6DOFJoint]。" #: doc/classes/SliderJoint.xml:28 msgid "" @@ -62574,7 +63716,8 @@ msgstr "" #: doc/classes/SoftBody.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/soft_body.html" #: doc/classes/SoftBody.xml:44 msgid "Returns local translation of a vertex in the surface array." @@ -62612,7 +63755,7 @@ msgstr "" "并䏿˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用" "collision_mask属性。\n" "如果对象A在对象B所扫æçš„任何层ä¸ï¼Œæˆ–者对象B在对象A所扫æçš„任何层ä¸ï¼Œå°±ä¼šæ£€æµ‹" -"到接触。更多信æ¯è¯·å‚阅文档ä¸çš„[url=https://docs.godotengine.org/en/3.4/" +"到接触。更多信æ¯è¯·å‚阅文档ä¸çš„[url=https://docs.godotengine.org/zh_CN/stable/" "tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层" "和掩ç [/url]。" @@ -62623,25 +63766,25 @@ msgid "" "layers-and-masks]Collision layers and masks[/url] in the documentation for " "more information." msgstr "" +"æ¤è½¯ä½“扫æç¢°æ’žçš„物ç†å±‚。更多信æ¯è¯·å‚阅文档ä¸çš„[url=https://docs.godotengine." +"org/zh_CN/stable/tutorials/physics/physics_introduction.html#collision-" +"layers-and-masks]碰撞层和掩ç [/url]。" #: doc/classes/SoftBody.xml:105 -#, fuzzy msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping." -msgstr "[NodePath] 到 [CollisionObject3D] æ¤ SoftBody3D 应é¿å…剪è£ã€‚" +msgstr "[NodePath]到[CollisionObject],这个软体应该é¿å…剪è£ã€‚" #: doc/classes/SoftBody.xml:108 -#, fuzzy msgid "" "If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to " "[code]false[/code] to pause the physics simulation." msgstr "" -"如果[code]true[/code],触摸的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果[code]false[/code],触摸的状æ€è¢«" -"释放。" +"如果[code]true[/code],[SoftBody]ä¼šç‰©ç†æ¨¡æ‹Ÿã€‚å¯ä»¥è®¾ç½®ä¸º[code]false[/code]æ¥æš‚" +"åœç‰©ç†æ¨¡æ‹Ÿã€‚" #: doc/classes/SoftBody.xml:115 -#, fuzzy msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s." -msgstr "如果 [code]true[/code],则 [SoftBody3D] å°†å“应 [RayCast3D]。" +msgstr "如果[code]true[/code],则 [SoftBody] å°†å“应 [RayCast]。" #: doc/classes/SoftBody.xml:118 msgid "" @@ -62658,7 +63801,6 @@ msgid "Most basic 3D game object, parent of all 3D-related nodes." msgstr "最基本的3D游æˆå¯¹è±¡ï¼Œæ‰€æœ‰ä¸Ž3D节点相关的父节点。" #: doc/classes/Spatial.xml:7 -#, fuzzy msgid "" "Most basic 3D game object, with a 3D [Transform] and visibility settings. " "All other 3D game objects inherit from Spatial. Use [Spatial] as a parent " @@ -62674,20 +63816,21 @@ msgid "" "to radians, use [method @GDScript.deg2rad]." msgstr "" "最基本的3D游æˆå¯¹è±¡ï¼Œå…·æœ‰3D[Transform]å’Œå¯è§æ€§è®¾ç½®ã€‚所有其他的3D游æˆå¯¹è±¡éƒ½ç»§æ‰¿" -"自Node3D。使用[Node3D]作为父节点,在3D项目ä¸ç§»åЍã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å节" +"自空间。使用[Spatial]作为父节点,在3D项目ä¸ç§»åЍã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å节" "点。\n" -"除éž[Node3D]对象被设置为顶层,å¦åˆ™å¹³å·®æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬" -"åœ°åæ ‡ç³»ä¸è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸çš„仿射æ“作对应于对[Node3D]çš„å˜æ¢çš„直接仿射æ“" -"作。下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯è¿™ä¸ªåæ ‡ç³»ã€‚é™„åŠ åˆ°[Node3D]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-" -"æœ¬åœ°åæ ‡ç³»ã€‚\n" +"除éž[Spatial]对象被设置为顶层,å¦åˆ™ä»¿å°„æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬" +"åœ°åæ ‡ç³»ä¸è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸çš„仿射æ“作对应于对[Spatial]å˜æ¢çš„直接仿射è¿ç®—。" +"下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯å±€éƒ¨åæ ‡ç³»ã€‚é™„åŠ åˆ°[Spatial]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-本" +"åœ°åæ ‡ç³»ã€‚\n" "[b]注æ„:[/b]除éžå¦æœ‰è§„å®šï¼Œæ‰€æœ‰æœ‰è§’åº¦å‚æ•°çš„æ–¹æ³•必须将角度指定为[i]弧度[/i]。" -"è¦å°†åº¦æ•°è½¬æ¢ä¸ºå¼§åº¦ï¼Œè¯·ä½¿ç”¨[method @GDScript.deg2rad]。" +"使用[method @GDScript.deg2rad]将度数转æ¢ä¸ºå¼§åº¦ã€‚" #: doc/classes/Spatial.xml:12 msgid "" "https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/introduction_to_3d." +"html" #: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16 msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d" @@ -62733,11 +63876,11 @@ msgid "" msgstr "ç¦ç”¨è¯¥èŠ‚ç‚¹çš„æ¸²æŸ“ã€‚å®ƒå°†[member visible]改为[code]false[/code]。" #: doc/classes/Spatial.xml:65 -#, fuzzy msgid "" "Returns whether node notifies about its local transformation changes. " "[Spatial] will not propagate this by default." -msgstr "返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Node3D]默认情况下ä¸ä¼šå¯¹å…¶è¿›è¡Œé€šçŸ¥ã€‚" +msgstr "" +"返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šå¯¹æ¤è¿›è¡Œä¼ æ’。" #: doc/classes/Spatial.xml:71 msgid "" @@ -62752,12 +63895,12 @@ msgid "" msgstr "返回该节点是å¦è¢«è®¾ç½®ä¸ºToplevel,也就是是å¦å¿½ç•¥å…¶çˆ¶èŠ‚ç‚¹çš„å˜æ¢ã€‚" #: doc/classes/Spatial.xml:83 -#, fuzzy msgid "" "Returns whether the node notifies about its global and local transformation " "changes. [Spatial] will not propagate this by default." msgstr "" -"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。[Node3D]默认情况下ä¸ä¼šä¼ æ’这个。" +"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šå¯¹æ¤è¿›è¡Œä¼ " +"æ’。" #: doc/classes/Spatial.xml:97 msgid "" @@ -62851,20 +63994,20 @@ msgid "" msgstr "设置节点是å¦å¿½ç•¥å…¶è½¬æ¢ï¼ˆå…¨å±€æˆ–局部)改å˜çš„通知。" #: doc/classes/Spatial.xml:192 -#, fuzzy msgid "" "Sets whether the node notifies about its local transformation changes. " "[Spatial] will not propagate this by default." -msgstr "设置节点是å¦é€šçŸ¥å…¶æœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’æ¤æ›´æ”¹ã€‚" +msgstr "" +"设置节点是å¦é€šçŸ¥å®ƒçš„å±€éƒ¨å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šä¼ æ’这一点。" #: doc/classes/Spatial.xml:199 -#, fuzzy msgid "" "Sets whether the node notifies about its global and local transformation " "changes. [Spatial] will not propagate this by default, unless it is in the " "editor context and it has a valid gizmo." msgstr "" -"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œæœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’æ¤æ›´æ”¹ã€‚" +"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šä¼ æ’ï¼Œé™¤éžæ˜¯åœ¨" +"编辑器上下文ä¸ï¼Œå¹¶ä¸”它有一个有效的gizmo。" #: doc/classes/Spatial.xml:205 msgid "" @@ -62903,23 +64046,20 @@ msgid "" msgstr "通过给定的åç§»é‡[Vector3]改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸çš„ä½ç½®ã€‚" #: doc/classes/Spatial.xml:240 -#, fuzzy msgid "Updates the [SpatialGizmo] of this node." -msgstr "更新该节点的[Node3DGizmo]。" +msgstr "更新该节点的[SpatialGizmo]。" #: doc/classes/Spatial.xml:246 -#, fuzzy msgid "" "The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] " "as custom visualization and editing handles in Editor." msgstr "" -"这个节点的[Node3DGizmo]。例如在[EditorNode3DGizmo]ä¸ä½œä¸ºè‡ªå®šä¹‰å¯è§†åŒ–和编辑å¥" -"柄使用。" +"æ¤èŠ‚ç‚¹çš„ [SpatialGizmo]。例如在 [EditorSpatialGizmo] ä¸ç”¨ä½œç¼–辑器ä¸çš„自定义å¯" +"视化和编辑手柄。" #: doc/classes/Spatial.xml:249 -#, fuzzy msgid "World space (global) [Transform] of this node." -msgstr "这个节点的World3D空间(全局)[Transform]。" +msgstr "æ¤èŠ‚ç‚¹çš„ä¸–ç•Œç©ºé—´ï¼ˆå…¨å±€ï¼‰[Transform]。" #: doc/classes/Spatial.xml:252 msgid "" @@ -62971,20 +64111,19 @@ msgstr "" msgid "" "Emitted by portal system gameplay monitor when a node enters the gameplay " "area." -msgstr "" +msgstr "当节点进入游æˆåŒºåŸŸæ—¶ç”±å…¥å£ç³»ç»Ÿæ¸¸æˆç›‘视器触å‘。" #: doc/classes/Spatial.xml:279 msgid "" "Emitted by portal system gameplay monitor when a node exits the gameplay " "area." -msgstr "" +msgstr "当节点退出游æˆåŒºåŸŸæ—¶ï¼Œç”±ç•Œé¢ç³»ç»Ÿçš„æ¸¸æˆç›‘视器触å‘。" #: doc/classes/Spatial.xml:284 msgid "Emitted when node visibility changes." msgstr "当节点å¯è§æ€§æ›´æ”¹æ—¶è§¦å‘。" #: doc/classes/Spatial.xml:290 -#, fuzzy msgid "" "Spatial nodes receives this notification when their global transform " "changes. This means that either the current or a parent node changed its " @@ -62993,41 +64132,39 @@ msgid "" "need to ask for it, with [method set_notify_transform]. The notification is " "also sent if the node is in the editor context and it has a valid gizmo." msgstr "" -"当Node3DèŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶èŠ‚ç‚¹æ”¹" -"å˜äº†å®ƒçš„å˜æ¢ã€‚\n" -"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]呿Œ¥ä½œç”¨ï¼Œç”¨æˆ·é¦–先需è¦é€šè¿‡" -"[method set_notify_transform]æ¥è¦æ±‚它。" +"å½“ç©ºé—´èŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,空间节点会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶" +"节点改å˜äº†å®ƒçš„å˜æ¢ã€‚\n" +"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]生效,用户首先需è¦ç”¨[method " +"set_notify_transform]å‘é€è¯·æ±‚。如果节点是在编辑器的上下文ä¸ï¼Œå¹¶ä¸”它有一个有效" +"çš„gizmo,那么该通知也会被å‘é€ã€‚" #: doc/classes/Spatial.xml:294 -#, fuzzy msgid "" "Spatial nodes receives this notification when they are registered to new " "[World] resource." -msgstr "当Node3D节点被注册到新的[World3D]èµ„æºæ—¶ï¼Œå®ƒä»¬ä¼šæ”¶åˆ°è¿™ä¸ªé€šçŸ¥ã€‚" +msgstr "空间节点在注册到新的 [World] èµ„æºæ—¶ä¼šæ”¶åˆ°æ¤é€šçŸ¥ã€‚" #: doc/classes/Spatial.xml:297 -#, fuzzy msgid "" "Spatial nodes receives this notification when they are unregistered from " "current [World] resource." -msgstr "当Node3D节点从当å‰[World3D]资æºä¸å–消注册时,它们会收到这个通知。" +msgstr "当空间节点从当å‰çš„ [World] 资æºä¸å–消注册时,它们会收到æ¤é€šçŸ¥ã€‚" #: doc/classes/Spatial.xml:300 -#, fuzzy msgid "Spatial nodes receives this notification when their visibility changes." -msgstr "当Node3D节点的å¯è§æ€§å‘生å˜åŒ–时,会收到这个通知。" +msgstr "空间节点在其å¯è§æ€§å‘生å˜åŒ–时会收到æ¤é€šçŸ¥ã€‚" #: doc/classes/Spatial.xml:303 msgid "" "Spatial nodes receives this notification if the portal system gameplay " "monitor detects they have entered the gameplay area." -msgstr "" +msgstr "如果门户系统游æˆç›‘视器检测到它们已进入游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ¤é€šçŸ¥ã€‚" #: doc/classes/Spatial.xml:306 msgid "" "Spatial nodes receives this notification if the portal system gameplay " "monitor detects they have exited the gameplay area." -msgstr "" +msgstr "如果门户系统游æˆç›‘视器检测到它们已退出游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ¤é€šçŸ¥ã€‚" #: doc/classes/SpatialMaterial.xml:4 msgid "Default 3D rendering material." @@ -63044,7 +64181,8 @@ msgstr "" #: doc/classes/SpatialMaterial.xml:10 msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/spatial_material.html" #: doc/classes/SpatialMaterial.xml:17 msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled." @@ -63064,19 +64202,17 @@ msgid "" msgstr "返回与指定的 [enum TextureParam] å…³è”çš„ [Texture]。" #: doc/classes/SpatialMaterial.xml:39 -#, fuzzy msgid "" "If [code]true[/code], enables the specified [enum Feature]. Many features " "that are available in [SpatialMaterial]s need to be enabled before use. This " "way the cost for using the feature is only incurred when specified. Features " "can also be enabled by setting the corresponding member to [code]true[/code]." msgstr "" -"如果为 [code]true[/code],å¯ç”¨æŒ‡å®šçš„ [enum Feature]。很多在 [BaseMaterial3D] " -"ä¸å¯ä»¥ä½¿ç”¨çš„特性都需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·è¯¥ç‰¹æ€§çš„æˆæœ¬åªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿã€‚也" -"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨ç‰¹å¾ã€‚" +"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„ [enum Feature]。 [SpatialMaterial]s ä¸å¯" +"用的许多功能需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·ï¼Œåªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿä½¿ç”¨è¯¥åŠŸèƒ½çš„æˆæœ¬ã€‚也" +"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨åŠŸèƒ½ã€‚" #: doc/classes/SpatialMaterial.xml:47 -#, fuzzy msgid "" "If [code]true[/code], enables the specified flag. Flags are optional " "behaviour that can be turned on and off. Only one flag can be enabled at a " @@ -63085,16 +64221,18 @@ msgid "" "setting the corresponding member to [code]true[/code]. See [enum Flags] " "enumerator for options." msgstr "" -"如果 [code]true[/code],å¯ç”¨æŒ‡å®šçš„æ ‡å¿—ã€‚æ ‡å¿—æ˜¯å¯é€‰çš„行为,å¯ä»¥æ‰“开和关é—。使" +"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„æ ‡å¿—ã€‚æ ‡å¿—æ˜¯å¯ä»¥æ‰“开和关é—çš„å¯é€‰è¡Œä¸ºã€‚使" "用该函数一次åªèƒ½å¯ç”¨ä¸€ä¸ªæ ‡å¿—,ä¸èƒ½å°†æ ‡å¿—æžšä¸¾å™¨è¿›è¡Œä½æŽ©ç ,以一次å¯ç”¨æˆ–ç¦ç”¨å¤š" -"ä¸ªæ ‡å¿—ã€‚ä¹Ÿå¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º[code]true[/code]æ¥å¯ç”¨æ ‡å¿—。选项å‚阅 " -"[enum Flags] 枚举器。" +"ä¸ªæ ‡å¿—ã€‚ä¹Ÿå¯ä»¥é€šè¿‡å°†ç›¸åº”æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨æ ‡å¿—。有关选项,请" +"å‚阅 [enum Flags] 枚举器。" #: doc/classes/SpatialMaterial.xml:55 msgid "" "Sets the [Texture] to be used by the specified [enum TextureParam]. This " "function is called when setting members ending in [code]*_texture[/code]." msgstr "" +"设置指定的 [enum TextureParam] 所使用的 [Texture]。该函数在设置以 " +"[code]*_texture[/code] 结尾的æˆå‘˜æ—¶è°ƒç”¨ã€‚" #: doc/classes/SpatialMaterial.xml:61 msgid "The material's base color." @@ -63178,7 +64316,6 @@ msgid "" msgstr "设置清漆效果的强度。设置为 [code]0[/code] 与ç¦ç”¨æ¸…漆效果相åŒã€‚" #: doc/classes/SpatialMaterial.xml:94 -#, fuzzy msgid "" "If [code]true[/code], clearcoat rendering is enabled. Adds a secondary " "transparent pass to the lighting calculation resulting in an added specular " @@ -63187,9 +64324,11 @@ msgid "" "[b]Note:[/b] Clearcoat rendering is not visible if the material has [member " "flags_unshaded] set to [code]true[/code]." msgstr "" -"如果[code]true[/code],则å¯ç”¨é€æ˜Žæ¶‚å±‚æ¸²æŸ“ã€‚åœ¨å…‰ç…§è®¡ç®—ä¸æ·»åŠ ä¸€ä¸ªäºŒçº§é€æ˜Žé€šé“," -"从而产生一个é¢å¤–çš„é•œé¢æ–‘点。这使得æè´¨çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€ä¸ªé€æ˜Žå±‚,å¯ä»¥æ˜¯å…‰æ»‘或粗" -"糙的。" +"如果 [code]true[/code],则å¯ç”¨æ¸…æ¼†æ¸²æŸ“ã€‚åœ¨ç…§æ˜Žè®¡ç®—ä¸æ·»åŠ äºŒçº§é€æ˜Žé€šè·¯ï¼Œä»Žè€Œå¯¼" +"è‡´æ·»åŠ é•œé¢åå°„æ–‘ç‚¹ã€‚è¿™ä½¿å¾—ææ–™çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€å±‚逿˜Žå±‚,å¯ä»¥æ˜¯æœ‰å…‰æ³½çš„也å¯ä»¥æ˜¯" +"粗糙的。\n" +"[b]注æ„:[/b]如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则" +"逿˜Žæ¶‚层渲染ä¸å¯è§ã€‚" #: doc/classes/SpatialMaterial.xml:98 msgid "" @@ -63214,6 +64353,8 @@ msgid "" "along the view ray to determine occlusion and parrallax. This can be very " "performance demanding, but results in more realistic looking depth mapping." msgstr "" +"如果 [code]true[/code],ç€è‰²å™¨å°†åœ¨æ²¿è§†å›¾å°„çº¿çš„å¤šä¸ªç‚¹ä¸Šè¯»å–æ·±åº¦çº¹ç†ä»¥ç¡®å®šé®æŒ¡" +"和视差。这å¯èƒ½å¯¹æ€§èƒ½è¦æ±‚å¾ˆé«˜ï¼Œä½†ä¼šäº§ç”Ÿæ›´é€¼çœŸçš„æ·±åº¦æ˜ å°„ã€‚" #: doc/classes/SpatialMaterial.xml:107 msgid "" @@ -63223,6 +64364,10 @@ msgid "" "the same material. The value of [member depth_enabled] will be ignored if " "[member uv1_triplanar] is enabled." msgstr "" +"如果 [code]true[/code],则å¯ç”¨æ·±åº¦æ˜ å°„ï¼ˆä¹Ÿç§°ä¸ºâ€œè§†å·®æ˜ å°„â€æˆ–â€œé«˜åº¦æ˜ å°„â€ï¼‰ã€‚å¦è§ " +"[member normal_enabled]。\n" +"[b]注æ„:[/b]如果在åŒä¸€æè´¨ä¸Šä½¿ç”¨ä¸‰å¹³é¢è´´å›¾ï¼Œåˆ™ä¸æ”¯æŒæ·±åº¦è´´å›¾ã€‚如果å¯ç”¨ " +"[member uv1_triplanar],则 [member depth_enabled] 的值将被忽略。" #: doc/classes/SpatialMaterial.xml:111 msgid "" @@ -63230,6 +64375,8 @@ msgid "" "the depth effect. This may be necessary if you have encoded your binormals " "in a way that is conflicting with the depth effect." msgstr "" +"如果 [code]true[/code],则在深度效果ä¸ä½¿ç”¨ä¹‹å‰ä¼šç¿»è½¬å‰¯æ³•线的方å‘ã€‚å¦‚æžœä½ å¯¹ä½ " +"çš„å‰¯æ³•çº¿çš„ç¼–ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。" #: doc/classes/SpatialMaterial.xml:114 msgid "" @@ -63237,6 +64384,8 @@ msgid "" "the depth effect. This may be necessary if you have encoded your tangents in " "a way that is conflicting with the depth effect." msgstr "" +"如果 [code]true[/code],切线方å‘在深度效果ä¸ä½¿ç”¨å‰ä¼šç¿»è½¬ã€‚å¦‚æžœä½ å¯¹åˆ‡çº¿çš„ç¼–ç " +"æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。" #: doc/classes/SpatialMaterial.xml:117 msgid "" @@ -63245,6 +64394,8 @@ msgid "" "will be more performance demanding while a lower number may not look as " "crisp." msgstr "" +"使用 [member depth_deep_parallax] 且视图方å‘åž‚ç›´äºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高" +"的数å—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数å—å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。" #: doc/classes/SpatialMaterial.xml:120 msgid "" @@ -63252,17 +64403,19 @@ msgid "" "direction is parallel to the surface of the object. A higher number will be " "more performance demanding while a lower number may not look as crisp." msgstr "" +"使用 [member depth_deep_parallax] 且视图方å‘å¹³è¡ŒäºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高" +"的数å—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数å—å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。" #: doc/classes/SpatialMaterial.xml:123 msgid "" "Scales the depth offset effect. A higher number will create a larger depth." -msgstr "" +msgstr "缩放深度å移效果。更高的数å—将创建更大的深度。" #: doc/classes/SpatialMaterial.xml:126 msgid "" "Texture used to determine depth at a given pixel. Depth is always stored in " "the red channel." -msgstr "" +msgstr "用æ¥ç¡®å®šæŸä¸ªåƒç´ 深度的纹ç†ã€‚深度总是å˜å‚¨åœ¨çº¢è‰²é€šé“ä¸ã€‚" #: doc/classes/SpatialMaterial.xml:129 msgid "Texture that specifies the color of the detail overlay." @@ -63324,6 +64477,11 @@ msgid "" "and will fully disappear once it reaches [code]distance_fade_min_distance[/" "code]." msgstr "" +"物体看起æ¥å®Œå…¨ä¸é€æ˜Žçš„è·ç¦»ã€‚\n" +"[b]注æ„:[/b]如果 [code]distance_fade_max_distance[/code] å°äºŽ " +"[code]distance_fade_min_distance[/code],则行为相å。物体将在 " +"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ " +"[code]distance_fade_min_distance[/code] 时完全消失。" #: doc/classes/SpatialMaterial.xml:152 msgid "" @@ -63335,6 +64493,11 @@ msgid "" "and will fully disappear once it reaches [code]distance_fade_min_distance[/" "code]." msgstr "" +"物体开始å˜å¾—å¯è§çš„è·ç¦»ã€‚如果物体的è·ç¦»å°äºŽè¿™ä¸ªè·ç¦»ï¼Œå®ƒå°†æ˜¯ä¸å¯è§çš„。\n" +"[b]注æ„:[/b]如果 [code]distance_fade_min_distance[/code] 大于 " +"[code]distance_fade_max_distance[/code],则行为将相å。物体将在 " +"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ " +"[code]distance_fade_min_distance[/code] 时完全消失。" #: doc/classes/SpatialMaterial.xml:156 msgid "" @@ -63347,15 +64510,15 @@ msgid "The emitted light's color. See [member emission_enabled]." msgstr "å‘出的光的颜色。å‚阅[member emission_enabled]。" #: doc/classes/SpatialMaterial.xml:162 -#, fuzzy msgid "" "If [code]true[/code], the body emits light. Emitting light makes the object " "appear brighter. The object can also cast light on other objects if a " "[GIProbe] or [BakedLightmap] is used and this object is used in baked " "lighting." msgstr "" -"如果[code]true[/code],则物体会å‘出光。å‘光会使物体显得更亮。如果使用了" -"[GIProbe],并且该物体在烘焙照明ä¸ä½¿ç”¨ï¼Œé‚£ä¹ˆè¯¥ç‰©ä½“也å¯ä»¥å‘其他物体投光。" +"如果 [code]true[/code],物体会å‘光。å‘å…‰ä½¿ç‰©ä½“çœ‹èµ·æ¥æ›´äº®ã€‚如果使用 [GIProbe] " +"或 [BakedLightmap] 并且æ¤å¯¹è±¡ç”¨äºŽçƒ˜ç„™ç…§æ˜Žï¼Œåˆ™è¯¥å¯¹è±¡è¿˜å¯ä»¥å°†å…‰æŠ•射到其他对象" +"上。" #: doc/classes/SpatialMaterial.xml:165 msgid "The emitted light's strength. See [member emission_enabled]." @@ -63399,6 +64562,8 @@ msgid "" "the normal stays correct when using a non-uniform scale. Only enable if " "using non-uniform scaling." msgstr "" +"如果 [code]true[/code],ç€è‰²å™¨å°†è®¡ç®—é¢å¤–çš„æ“作,以确ä¿åœ¨ä½¿ç”¨éžå‡åŒ€æ¯”例时法线" +"ä¿æŒæ£ç¡®ã€‚仅在使用éžå‡åŒ€ç¼©æ”¾æ—¶å¯ç”¨ã€‚" #: doc/classes/SpatialMaterial.xml:189 msgid "" @@ -63419,9 +64584,8 @@ msgid "" msgstr "如果[code]true[/code],则å¯ç”¨ç‰©ä½“çš„é€æ˜Žåº¦ã€‚å‚阅[member blend_mode]。" #: doc/classes/SpatialMaterial.xml:198 -#, fuzzy msgid "If [code]true[/code], the object is unaffected by lighting." -msgstr "如果[code]true[/code]ï¼Œåˆ™å¯¹è±¡ä¸æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚" +msgstr "如果 [code]true[/code],则物体ä¸å—光照影å“。" #: doc/classes/SpatialMaterial.xml:201 msgid "" @@ -63449,15 +64613,16 @@ msgid "" "If [code]true[/code], lighting is calculated per vertex rather than per " "pixel. This may increase performance on low-end devices." msgstr "" +"如果 [code]true[/code]ï¼Œåˆ™æŒ‰é¡¶ç‚¹è€Œä¸æ˜¯æŒ‰åƒç´ 计算光照。这å¯èƒ½ä¼šæé«˜ä½Žç«¯è®¾å¤‡çš„" +"性能。" #: doc/classes/SpatialMaterial.xml:211 -#, fuzzy msgid "" "If [code]true[/code], triplanar mapping is calculated in world space rather " "than object local space. See also [member uv1_triplanar]." msgstr "" -"如果 [code]true[/code],[code]UV[/code]的三平é¢è´´å›¾æ˜¯åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯å¯¹è±¡å±€éƒ¨" -"空间计算的。å¦è¯·å‚阅 [member uv1_triplanar]。" +"如果 [code]true[/code]ï¼Œåˆ™åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯ç‰©ä½“局部空间ä¸è®¡ç®—䏉平颿˜ 射。å¦è§ " +"[member uv1_triplanar]。" #: doc/classes/SpatialMaterial.xml:214 msgid "" @@ -63516,7 +64681,6 @@ msgid "The strength of the normal map's effect." msgstr "法线贴图的效果强度。" #: doc/classes/SpatialMaterial.xml:233 -#, fuzzy msgid "" "Texture used to specify the normal at a given pixel. The " "[code]normal_texture[/code] only uses the red and green channels; the blue " @@ -63533,27 +64697,30 @@ msgid "" "Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for " "a comparison of normal map coordinates expected by popular engines." msgstr "" -"纹ç†ç”¨äºŽæŒ‡å®šç»™å®šåƒç´ 的法线。[code]normal_texture[/code] åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€š" -"é“。从[code]normal_texture[/code]读å–的法线是围绕[Mesh]æä¾›çš„è¡¨é¢æ³•线的。\n" -"[b]注æ„:[/b] Godot希望法线图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚å‚阅[url=http://wiki." -"polycount.com/wiki/" -"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url],以了" -"è§£æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿å›¾åæ ‡çš„æ¯”较。" +"ç”¨æ¥æŒ‡å®šåƒç´ 点的法线的纹ç†ã€‚[code]normal_texture[/code]åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€šé“," +"忽略è“色和alpha通é“。从 [code]normal_texture[/code] 读å–的法线围绕 [Mesh] æ" +"ä¾›çš„è¡¨é¢æ³•线定å‘。\n" +"[b]注æ„:[/b] Mesh必须在其顶点数æ®ä¸åŒæ—¶å®šä¹‰æ³•线和切线。å¦åˆ™ï¼Œæ³•çº¿è´´å›¾å°†æ— æ³•" +"æ£ç¡®æ¸²æŸ“,会出现整个表é¢å˜æš—的情况。如果用[SurfaceTool]åˆ›å»ºå‡ ä½•ä½“ï¼Œå¯ä»¥ä½¿ç”¨" +"[method SurfaceTool.generate_normals]å’Œ[method SurfaceTool.generate_tangents]" +"æ¥åˆ†åˆ«è‡ªåŠ¨ç”Ÿæˆæ³•线和切线。\n" +"[b]注æ„:[/b] Godot希望法线贴图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki." +"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该" +"页[/url],了解æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。" #: doc/classes/SpatialMaterial.xml:238 msgid "Threshold at which the alpha scissor will discard values." msgstr "alpha scissor 会丢弃数值的阈值。" #: doc/classes/SpatialMaterial.xml:241 -#, fuzzy msgid "" "If [code]true[/code], the shader will keep the scale set for the mesh. " "Otherwise the scale is lost when billboarding. Only applies when [member " "params_billboard_mode] is [constant BILLBOARD_ENABLED]." msgstr "" -"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘æ ¼è®¾ç½®çš„æ¯”ä¾‹ã€‚å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”" -"ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“ [member billboard_mode] 为 [constant BILLBOARD_ENABLED] æ—¶" -"æ‰é€‚用。" +"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘æ ¼ç¼©æ”¾è®¾ç½®ã€‚å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾" +"会丢失。仅在 [member params_billboard_mode] 为 [constant BILLBOARD_ENABLED] " +"时适用。" #: doc/classes/SpatialMaterial.xml:244 msgid "" @@ -63563,6 +64730,10 @@ msgid "" "head instead of on the table. See [url=https://github.com/godotengine/godot/" "issues/41567]GitHub issue #41567[/url] for details." msgstr "" +"控制对象如何é¢å‘æ‘„åƒæœºã€‚å‚阅[enum BillboardMode]。\n" +"[b]注æ„:[/b] 广告牌模å¼ä¸é€‚åˆVRï¼Œå› ä¸ºå½“å±å¹•è´´åœ¨ä½ çš„å¤´éƒ¨è€Œä¸æ˜¯åœ¨æ¡Œå上时,摄" +"åƒæœºçš„å·¦å³å‘é‡ä¸æ˜¯æ°´å¹³çš„。å‚阅[url=https://github.com/godotengine/godot/" +"issues/41567]GitHub issue #41567[/url]。" #: doc/classes/SpatialMaterial.xml:248 msgid "" @@ -63581,39 +64752,36 @@ msgid "" msgstr "æ¸²æŸ“èƒŒé¢æ—¶ï¼Œä¸ç»˜åˆ¶å¯¹è±¡çš„哪一é¢ã€‚å‚阅 [enum CullMode]。" #: doc/classes/SpatialMaterial.xml:255 -#, fuzzy msgid "" "Determines when depth rendering takes place. See [enum DepthDrawMode]. See " "also [member flags_transparent]." msgstr "" -"确定何时进行深度渲染。å‚阅 [enum DepthDrawMode]。也请å‚阅 [member " -"transparency]。" +"确定深度渲染å‘生的时间。请å‚é˜…æ·±åº¦ç»˜åˆ¶æ¨¡å¼ [enum DepthDrawMode] 。å¦è§" +"[member flags_transparent]。" #: doc/classes/SpatialMaterial.xml:258 msgid "" "The algorithm used for diffuse light scattering. See [enum DiffuseMode]." -msgstr "用于漫射光散射的算法。å‚阅[enum DiffuseMode]。" +msgstr "用于漫å射光散射的算法。å‚è§ [enum DiffuseMode]。" #: doc/classes/SpatialMaterial.xml:261 -#, fuzzy msgid "" "If [code]true[/code], enables the vertex grow setting. See [member " "params_grow_amount]." -msgstr "如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚阅[member grow_amount]。" +msgstr "" +"如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚è§[member params_grow_amount]。" #: doc/classes/SpatialMaterial.xml:264 msgid "Grows object vertices in the direction of their normals." msgstr "æ²¿ç€æ³•线的方å‘生长对象顶点。" #: doc/classes/SpatialMaterial.xml:267 -#, fuzzy msgid "Currently unimplemented in Godot." -msgstr "ç›®å‰åœ¨ Godot 3.x 䏿œªå®žçŽ°ã€‚" +msgstr "ç›®å‰åœ¨ Godot 䏿œªå®žçŽ°ã€‚" #: doc/classes/SpatialMaterial.xml:270 -#, fuzzy msgid "The point size in pixels. See [member flags_use_point_size]." -msgstr "点的大å°ï¼Œå•ä½ä¸ºåƒç´ 。å‚阅[member use_point_size]。" +msgstr "点的大å°ï¼Œä»¥åƒç´ 为å•ä½ã€‚å‚è§[member flags_use_point_size]。" #: doc/classes/SpatialMaterial.xml:273 msgid "The method for rendering the specular blob. See [enum SpecularMode]." @@ -63624,35 +64792,34 @@ msgid "" "If [code]true[/code], the shader will discard all pixels that have an alpha " "value less than [member params_alpha_scissor_threshold]." msgstr "" +"如果[code]true[/code],ç€è‰²å™¨å°†ä¸¢å¼ƒæ‰€æœ‰alpha值å°äºŽ[member " +"params_alpha_scissor_threshold]çš„åƒç´ 。" #: doc/classes/SpatialMaterial.xml:279 -#, fuzzy msgid "" "The number of horizontal frames in the particle sprite sheet. Only enabled " "when using [constant BILLBOARD_PARTICLES]. See [member " "params_billboard_mode]." msgstr "" -"ç²’åç²¾çµè¡¨çš„æ°´å¹³å¸§æ•°ã€‚仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅" -"[member billboard_mode]。" +"ç²’åç²¾çµè¡¨ä¸çš„æ°´å¹³å¸§æ•°ã€‚仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅" +"[member params_billboard_mode]。" #: doc/classes/SpatialMaterial.xml:282 -#, fuzzy msgid "" "If [code]true[/code], particle animations are looped. Only enabled when " "using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]." msgstr "" -"如果[code]true[/code]ï¼Œåˆ™å¾ªçŽ¯æ’æ”¾ç²’å动画。仅当使用[constant " -"BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅[member billboard_mode]。" +"如果 [code]true[/code],循环粒å动画。仅在使用 [constant " +"BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅[member params_billboard_mode]。" #: doc/classes/SpatialMaterial.xml:285 -#, fuzzy msgid "" "The number of vertical frames in the particle sprite sheet. Only enabled " "when using [constant BILLBOARD_PARTICLES]. See [member " "params_billboard_mode]." msgstr "" -"ç²’åç²¾çµè¡¨çš„垂直帧数。仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅" -"[member billboard_mode]。" +"ç²’åç²¾çµè¡¨ä¸çš„垂直帧数。仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅" +"[member params_billboard_mode]。" #: doc/classes/SpatialMaterial.xml:288 msgid "" @@ -63675,12 +64842,15 @@ msgid "" "backend, the material's roughness value will affect the blurriness of the " "refraction. Higher roughness values will make the refraction look blurrier." msgstr "" +"如果[code]true[/code],则å¯ç”¨æŠ˜å°„æ•ˆæžœã€‚æŠ˜å°„æ˜¯æ ¹æ®æ¥è‡ªç‰©ä½“åŽé¢çš„å…‰çº¿æ¥æ‰æ›²é€æ˜Ž" +"度的。当使用GLES3åŽç«¯æ—¶ï¼Œæè´¨çš„ç²—ç³™åº¦å€¼ä¼šå½±å“æŠ˜å°„çš„æ¨¡ç³Šåº¦ã€‚è¾ƒé«˜çš„ç²—ç³™åº¦å€¼ä¼šä½¿" +"æŠ˜å°„çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚" #: doc/classes/SpatialMaterial.xml:297 msgid "" "The strength of the refraction effect. Higher values result in a more " "distorted appearance for the refraction." -msgstr "" +msgstr "æŠ˜å°„æ•ˆæžœçš„å¼ºåº¦ã€‚è¾ƒé«˜çš„å€¼ä¼šä½¿æŠ˜å°„çš„è¡¨çŽ°æ›´åŠ æ‰æ›²ã€‚" #: doc/classes/SpatialMaterial.xml:300 msgid "" @@ -63689,7 +64859,6 @@ msgid "" msgstr "控制æ¯ä¸ªåƒç´ 折射强度的纹ç†ã€‚乘以[member refraction_scale]。" #: doc/classes/SpatialMaterial.xml:303 -#, fuzzy msgid "" "Specifies the channel of the [member refraction_texture] in which the " "refraction information is stored. This is useful when you store the " @@ -63697,23 +64866,25 @@ msgid "" "stored metallic in the red channel, roughness in the blue, and ambient " "occlusion in the green you could reduce the number of textures you use." msgstr "" -"指定å˜å‚¨é‡‘属信æ¯çš„ [member metallic_texture] 的通é“。当您在一个纹ç†ä¸å˜å‚¨å¤šä¸ª" -"æ•ˆæžœçš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚例如,如果您将金属效果å˜å‚¨åœ¨çº¢è‰²é€šé“ä¸ï¼Œå°†ç²—糙度å˜å‚¨" -"在è“色通é“ä¸ï¼Œå°†çŽ¯å¢ƒé®æŒ¡å˜å‚¨åœ¨ç»¿è‰²é€šé“ä¸ï¼Œå°±å¯ä»¥å‡å°‘æ‚¨ä½¿ç”¨çš„çº¹ç†æ•°é‡ã€‚" +"指定å˜å‚¨æŠ˜å°„ä¿¡æ¯çš„[member refraction_texture]的通é“ã€‚å½“ä½ åœ¨çº¹ç†ä¸å˜å‚¨å¤šç§æ•ˆæžœ" +"çš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ åœ¨çº¢è‰²é€šé“ä¸å˜å‚¨é‡‘属效果,在è“色通é“ä¸å˜å‚¨ç²—" +"糙度,在绿色通é“ä¸å˜å‚¨çŽ¯å¢ƒé®æŒ¡ï¼Œå°±å¯ä»¥å‡å°‘使用纹ç†çš„æ•°é‡ã€‚" #: doc/classes/SpatialMaterial.xml:306 msgid "Sets the strength of the rim lighting effect." msgstr "设置边缘照明效果的强度。" #: doc/classes/SpatialMaterial.xml:309 -#, fuzzy msgid "" "If [code]true[/code], rim effect is enabled. Rim lighting increases the " "brightness at glancing angles on an object.\n" "[b]Note:[/b] Rim lighting is not visible if the material has [member " "flags_unshaded] set to [code]true[/code]." msgstr "" -"如果[code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚è¾¹æ¡†ç…§æ˜Žä¼šå¢žåŠ ç‰©ä½“ä¸Šçš„æ–œè§’äº®åº¦ã€‚" +"如果 [code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚è¾¹ç¼˜ç…§æ˜Žå¢žåŠ äº†ç‰©ä½“ä¸ŠæŽ è¿‡è§’åº¦çš„äº®" +"度。\n" +"[b]注æ„:[/b] 如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则" +"边缘光照ä¸å¯è§ã€‚" #: doc/classes/SpatialMaterial.xml:313 msgid "" @@ -63766,23 +64937,20 @@ msgstr "" "subsurf_scatter_strength]。" #: doc/classes/SpatialMaterial.xml:337 -#, fuzzy msgid "" "The color used by the transmission effect. Represents the light passing " "through an object." -msgstr "背光效果使用的颜色。表示穿过物体的光线。" +msgstr "ä¼ è¾“æ•ˆæžœä½¿ç”¨çš„é¢œè‰²ã€‚è¡¨ç¤ºç©¿è¿‡ç‰©ä½“çš„å…‰ã€‚" #: doc/classes/SpatialMaterial.xml:340 -#, fuzzy msgid "If [code]true[/code], the transmission effect is enabled." -msgstr "如果为[code]true[/code],则å¯ç”¨glow效果。" +msgstr "如果 [code]true[/code],则å¯ç”¨ä¼ 输效果。" #: doc/classes/SpatialMaterial.xml:343 -#, fuzzy msgid "" "Texture used to control the transmission effect per-pixel. Added to [member " "transmission]." -msgstr "用于控制æ¯ä¸ªåƒç´ 的背光效果的纹ç†ã€‚æ·»åŠ åˆ° [member backlight]。" +msgstr "纹ç†ç”¨äºŽæŽ§åˆ¶æ¯ä¸ªåƒç´ çš„ä¼ è¾“æ•ˆæžœã€‚æ·»åŠ åˆ°[member transmission]。" #: doc/classes/SpatialMaterial.xml:346 msgid "" @@ -63910,18 +65078,16 @@ msgid "Texture specifying per-pixel ambient occlusion value." msgstr "指定æ¯ä¸ªåƒç´ çŽ¯å¢ƒé®æŒ¡å€¼çš„纹ç†ã€‚" #: doc/classes/SpatialMaterial.xml:405 -#, fuzzy msgid "Texture specifying per-pixel depth." -msgstr "指定æ¯ä¸ªåƒç´ 高度的纹ç†ã€‚" +msgstr "指定æ¯ä¸ªåƒç´ 深度的纹ç†ã€‚" #: doc/classes/SpatialMaterial.xml:408 msgid "Texture specifying per-pixel subsurface scattering." msgstr "指定æ¯ä¸ªåƒç´ çš„äºšè¡¨é¢æ•£å°„的纹ç†ã€‚" #: doc/classes/SpatialMaterial.xml:411 -#, fuzzy msgid "Texture specifying per-pixel transmission color." -msgstr "指定æ¯ä¸ªåƒç´ å‘射颜色的纹ç†ã€‚" +msgstr "指定æ¯ä¸ªåƒç´ ä¼ è¾“é¢œè‰²çš„çº¹ç†ã€‚" #: doc/classes/SpatialMaterial.xml:414 msgid "Texture specifying per-pixel refraction strength." @@ -63952,9 +65118,8 @@ msgid "Use [code]UV2[/code] with the detail texture." msgstr "使用[code]UV2[/code]与细节纹ç†ã€‚" #: doc/classes/SpatialMaterial.xml:435 -#, fuzzy msgid "Constant for setting [member flags_transparent]." -msgstr "用于设置[member ao_enabled]的常é‡ã€‚" +msgstr "用于设置 [member flags_transparent] 的常é‡ã€‚" #: doc/classes/SpatialMaterial.xml:438 msgid "Constant for setting [member emission_enabled]." @@ -63981,18 +65146,16 @@ msgid "Constant for setting [member ao_enabled]." msgstr "用于设置[member ao_enabled]的常é‡ã€‚" #: doc/classes/SpatialMaterial.xml:456 -#, fuzzy msgid "Constant for setting [member depth_enabled]." -msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member detail_enabled]。" +msgstr "用于设置 [member depth_enabled] 的常é‡ã€‚" #: doc/classes/SpatialMaterial.xml:459 msgid "Constant for setting [member subsurf_scatter_enabled]." msgstr "用于设置[member subsurf_scatter_enabled]的常é‡ã€‚" #: doc/classes/SpatialMaterial.xml:462 -#, fuzzy msgid "Constant for setting [member transmission_enabled]." -msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member emission_enabled]。" +msgstr "用于设置 [member transmission_enabled] 的常é‡ã€‚" #: doc/classes/SpatialMaterial.xml:465 msgid "Constant for setting [member refraction_enabled]." @@ -64036,7 +65199,7 @@ msgstr "没有深度的绘制。" msgid "" "For transparent objects, an opaque pass is made first with the opaque parts, " "then transparency is drawn." -msgstr "" +msgstr "å¯¹äºŽé€æ˜Žå¯¹è±¡ï¼Œé¦–先对ä¸é€æ˜Žéƒ¨åˆ†è¿›è¡Œä¸é€æ˜Žä¼ 递,然åŽç»˜åˆ¶é€æ˜Žåº¦ã€‚" #: doc/classes/SpatialMaterial.xml:498 msgid "Default cull mode. The back of the object is culled when not visible." @@ -64054,13 +65217,15 @@ msgstr "ä¸è¿›è¡Œå‰”除。" msgid "" "No lighting is used on the object. Color comes directly from [code]ALBEDO[/" "code]." -msgstr "" +msgstr "物体上ä¸ä½¿ç”¨ç…§æ˜Žã€‚颜色直接æ¥è‡ª [code]ALBEDO[/code]。" #: doc/classes/SpatialMaterial.xml:510 msgid "" "Lighting is calculated per-vertex rather than per-pixel. This can be used to " "increase the speed of the shader at the cost of quality." msgstr "" +"å…‰ç…§æ˜¯æŒ‰é¡¶ç‚¹è®¡ç®—çš„ï¼Œè€Œä¸æ˜¯æŒ‰åƒç´ 计算。这å¯ç”¨äºŽä»¥ç‰ºç‰²è´¨é‡ä¸ºä»£ä»·æé«˜ç€è‰²å™¨çš„速" +"度。" #: doc/classes/SpatialMaterial.xml:513 msgid "" @@ -64075,11 +65240,10 @@ msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh." msgstr "å°† [code]ALBEDO[/code] è®¾ç½®ä¸ºç½‘æ ¼ä¸æŒ‡å®šçš„æ¯é¡¶ç‚¹é¢œè‰²ã€‚" #: doc/classes/SpatialMaterial.xml:519 -#, fuzzy msgid "" "Vertex color is in sRGB space and needs to be converted to linear. Only " "applies in the GLES3 renderer." -msgstr "顶点颜色在sRGB空间,需è¦è½¬æ¢ä¸ºçº¿æ€§é¢œè‰²ã€‚仅适用于Vulkan渲染器。" +msgstr "顶点颜色在sRGB空间,需è¦è½¬æˆçº¿æ€§ã€‚仅适用于 GLES3 渲染器。" #: doc/classes/SpatialMaterial.xml:522 msgid "" @@ -64096,14 +65260,13 @@ msgid "" msgstr "按深度缩放对象,使其在å±å¹•上显示的大å°å§‹ç»ˆç›¸åŒã€‚" #: doc/classes/SpatialMaterial.xml:528 -#, fuzzy msgid "" "Shader will keep the scale set for the mesh. Otherwise the scale is lost " "when billboarding. Only applies when [member params_billboard_mode] is " "[constant BILLBOARD_ENABLED]." msgstr "" -"Shaderä¼šä¿æŒç½‘æ ¼çš„æ¯”ä¾‹è®¾ç½®ã€‚å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“[member " -"billboard_mode]为[constant BILLBOARD_ENABLED]时,æ‰é€‚用。" +"ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘æ ¼çš„ç¼©æ”¾è®¾ç½®ã€‚å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾ä¼šä¸¢å¤±ã€‚仅在 [member " +"params_billboard_mode] 为 [constant BILLBOARD_ENABLED] 时适用。" #: doc/classes/SpatialMaterial.xml:531 msgid "" @@ -64130,13 +65293,13 @@ msgstr "使用[code]UV2[/code]åæ ‡ï¼Œä»Ž[member emission_texture]䏿Ÿ¥æ‰¾ã€‚" #: doc/classes/SpatialMaterial.xml:543 msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]." -msgstr "" +msgstr "使用alpha剪刀。由 [member params_use_alpha_scissor] 设置。" #: doc/classes/SpatialMaterial.xml:546 msgid "" "Use world coordinates in the triplanar texture lookup instead of local " "coordinates." -msgstr "" +msgstr "在三平é¢çº¹ç†æŸ¥æ‰¾ä¸ä½¿ç”¨ä¸–ç•Œåæ ‡è€Œä¸æ˜¯å±€éƒ¨åæ ‡ã€‚" #: doc/classes/SpatialMaterial.xml:549 msgid "Forces the shader to convert albedo from sRGB space to linear space." @@ -64152,7 +65315,7 @@ msgstr "ç¦ç”¨æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚" #: doc/classes/SpatialMaterial.xml:558 msgid "Ensures that normals appear correct, even with non-uniform scaling." -msgstr "" +msgstr "ç¡®ä¿æ³•线显示æ£ç¡®ï¼Œå³ä½¿ç¼©æ”¾æ¯”例ä¸å‡åŒ€ã€‚" #: doc/classes/SpatialMaterial.xml:561 msgid "Enables the shadow to opacity feature." @@ -64207,17 +65370,16 @@ msgid "The object's X axis will always face the camera." msgstr "对象的X轴将始终é¢å‘相机。" #: doc/classes/SpatialMaterial.xml:606 -#, fuzzy msgid "" "Used for particle systems when assigned to [Particles] and [CPUParticles] " "nodes. Enables [code]particles_anim_*[/code] properties.\n" "The [member ParticlesMaterial.anim_speed] or [member CPUParticles." "anim_speed] should also be set to a positive value for the animation to play." msgstr "" -"分é…ç»™ [GPUParticles3D] å’Œ [CPUParticles3D] 节点时,用于粒å系统。å¯ç”¨" +"当分é…ç»™[Particles]å’Œ[CPUParticles]节点时用于粒å系统。å¯ç”¨" "[code]particles_anim_*[/code]属性。\n" -"[member ParticlesMaterial.anim_speed]或[member CPUParticles3D.anim_speed]也应" -"设置为æ£å€¼æ‰èƒ½æ’放动画。" +"ä¸ºäº†æ’æ”¾åŠ¨ç”»ï¼Œ[member ParticlesMaterial.anim_speed]或[member CPUParticles." +"anim_speed]也应该被设置为æ£å€¼ã€‚" #: doc/classes/SpatialMaterial.xml:610 msgid "Used to read from the red channel of a texture." @@ -64309,13 +65471,12 @@ msgid "Sphere shape for 3D collisions." msgstr "用于 3D 碰撞的çƒå½¢ã€‚" #: doc/classes/SphereShape.xml:7 -#, fuzzy msgid "" "Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or " "[Area]. This shape is useful for modeling sphere-like 3D objects." msgstr "" -"用于3D碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®æˆ[PhysicsBody3D]或[Area3D]。这ç§å½¢çŠ¶å¯¹äºŽå»ºæ¨¡ç±»" -"ä¼¼çƒä½“的三维物体很有用。" +"3D 碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody] 或 [Area]。æ¤å½¢çŠ¶å¯¹äºŽæ¨¡æ‹Ÿçƒçж 3D " +"对象很有用。" #: doc/classes/SphereShape.xml:16 msgid "The sphere's radius. The shape's diameter is double the radius." @@ -64326,7 +65487,6 @@ msgid "Numerical input text field." msgstr "æ•°å€¼è¾“å…¥æ–‡æœ¬å—æ®µã€‚" #: doc/classes/SpinBox.xml:7 -#, fuzzy msgid "" "SpinBox is a numerical input text field. It allows entering integers and " "floats.\n" @@ -64345,7 +65505,7 @@ msgid "" "[SpinBox]'s background, add theme items for [LineEdit] and customize them." msgstr "" "SpinBox是一个数å—è¾“å…¥æ–‡æœ¬å—æ®µã€‚它å…许输入整数和浮点数。\n" -"[b]例如:[/b]\n" +"[b]例å:[/b]\n" "[codeblock]\n" "var spin_box = SpinBox.new()\n" "add_child(spin_box)\n" @@ -64355,7 +65515,9 @@ msgstr "" "[/codeblock]\n" "上é¢çš„代ç 将创建一个[SpinBox],ç¦ç”¨å…¶ä¸Šçš„上下文èœå•ï¼Œå¹¶å°†æ–‡æœ¬å¯¹é½æ–¹å¼è®¾ç½®ä¸ºå³" "对é½ã€‚\n" -"关于[SpinBox]的更多选项,请å‚阅[Range]类。" +"å‚阅[Range]类,以获得更多关于[SpinBox]的选项。\n" +"[b]注æ„:[/b] [SpinBox] ä¾èµ–于底层的[LineEdit]节点。è¦ä¸º[SpinBox]的背景设置主" +"题,请为[LineEdit]æ·»åŠ ä¸»é¢˜é¡¹ï¼Œå¹¶å¯¹å…¶è¿›è¡Œå®šåˆ¶ã€‚" #: doc/classes/SpinBox.xml:26 msgid "Applies the current value of this [SpinBox]." @@ -64369,6 +65531,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回这个[SpinBox]ä¸çš„[LineEdit]å®žä¾‹ã€‚ä½ å¯ä»¥ç”¨å®ƒæ¥è®¿é—®[LineEdit]的属性和方" +"法。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³éš" +"è—它或它的任何å节点,请使用其 [member CanvasItem.visible] 属性。" #: doc/classes/SpinBox.xml:39 msgid "Sets the text alignment of the [SpinBox]." @@ -64394,9 +65560,8 @@ msgid "" msgstr "在 [SpinBox] çš„æ•°å€¼åŽæ·»åŠ æŒ‡å®šçš„ [code] suffix [/code] å—符串。" #: doc/classes/SpinBox.xml:55 -#, fuzzy msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]." -msgstr "为 [SpinBox] 的上下ç®å¤´è®¾ç½®è‡ªå®šä¹‰ [Texture2D]。" +msgstr "为 [SpinBox] 的上下ç®å¤´è®¾ç½®è‡ªå®šä¹‰ [Texture]。" #: doc/classes/SplitContainer.xml:4 msgid "Container for splitting and adjusting." @@ -64470,6 +65635,13 @@ msgid "" "lights per mesh, you can increase [member ProjectSettings.rendering/limits/" "rendering/max_lights_per_object] at the cost of shader compilation times." msgstr "" +"èšå…‰ç¯æ˜¯ä¸€ç§ [Light] 节点,它在特定方å‘上以圆锥体的形状å‘光。光线在远处衰å‡ã€‚" +"è¿™ç§è¡°å‡å¯ä»¥é€šè¿‡æ”¹å˜[Light]的能é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置。\n" +"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 èšå…‰ç¯å¯ä»¥åŒæ—¶å½±å“å•ä¸ªç½‘æ ¼ [i] èµ„æº [/" +"i]ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘æ ¼ï¼Œä»¥é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘æ ¼èµ„æºçš„å¯èƒ½æ€§ã€‚" +"æ‹†åˆ†æ°´å¹³ç½‘æ ¼ä¹Ÿå¯æé«˜è§†é”¥å‰”é™¤æ•ˆæžœï¼Œä»Žè€Œæé«˜æ€§èƒ½ã€‚如果您需è¦ä¸ºæ¯ä¸ªç½‘æ ¼ä½¿ç”¨æ›´å¤š" +"ç¯å…‰ï¼Œæ‚¨å¯ä»¥å¢žåŠ [member ProjectSettings.rendering/limits/rendering/" +"max_lights_per_object],以ç€è‰²å™¨ç¼–译时间为代价。" #: doc/classes/SpotLight.xml:18 msgid "The spotlight's angle in degrees." @@ -64499,7 +65671,6 @@ msgid "A helper node, mostly used in 3rd person cameras." msgstr "辅助节点,主è¦ç”¨äºŽç¬¬ä¸‰äººç§°ç›¸æœºã€‚" #: doc/classes/SpringArm.xml:7 -#, fuzzy msgid "" "The SpringArm node is a node that casts a ray (or collision shape) along its " "z axis and moves all its direct children to the collision point, minus a " @@ -64511,39 +65682,35 @@ msgid "" "If you use the SpringArm as a camera controller for your player, you might " "need to exclude the player's collider from the SpringArm's collision check." msgstr "" -"SpringArm3D 节点会沿其 z 轴投射一æ¡å°„线(或碰撞形状)并将其所有直接å节点移动" -"到碰撞点,å‡åŽ»ä¸€ä¸ªè¾¹è·ã€‚\n" -"最常è§çš„用例是制作一个对环境ä¸çš„碰撞åšå‡ºå应的第三人称相机。\n" -"SpringArm3D 将投射一æ¡å°„线,或者如果给定了一个形状,它将沿其 z è½´çš„æ–¹å‘æŠ•å°„è¯¥" -"形状。\n" -"如果您使用 SpringArm3D ä½œä¸ºæ’æ”¾å™¨çš„相机控制器,您å¯èƒ½éœ€è¦ä»Ž SpringArm3D 的碰" -"æ’žæ£€æŸ¥ä¸æŽ’é™¤æ’æ”¾å™¨çš„碰撞器。" +"SpringArm节点是沿其Z轴投射射线(或碰撞形状)的节点,并将其所有的直接å节点移" +"动到碰撞点,å‡åŽ»è¾¹è·ã€‚\n" +"最常è§çš„使用情况是制作第三人称相机,对环境ä¸çš„碰撞åšå‡ºå应。\n" +"SpringArm将投射一æ¡å°„线,或者给出形状,它将在其Z轴的方å‘上投射该形状。\n" +"å¦‚æžœä½ ä½¿ç”¨SpringArmä½œä¸ºçŽ©å®¶çš„ç›¸æœºæŽ§åˆ¶å™¨ï¼Œä½ å¯èƒ½éœ€è¦å°†çŽ©å®¶çš„ç¢°æ’žå™¨æŽ’é™¤åœ¨" +"SpringArm的碰撞检查之外。" #: doc/classes/SpringArm.xml:19 -#, fuzzy msgid "" "Adds the [PhysicsBody] object with the given [RID] to the list of " "[PhysicsBody] objects excluded from the collision check." msgstr "" -"将具有给定[RID]çš„[PhysicsBody3D]å¯¹è±¡æ·»åŠ åˆ°æŽ’é™¤åœ¨ç¢°æ’žæ£€æŸ¥ä¹‹å¤–çš„[PhysicsBody3D]" -"对象列表ä¸ã€‚" +"将具有指定 [RID] çš„ [PhysicsBody] å¯¹è±¡æ·»åŠ åˆ°æŽ’é™¤åœ¨ç¢°æ’žæ£€æŸ¥ä¹‹å¤–çš„ " +"[PhysicsBody] 对象列表ä¸ã€‚" #: doc/classes/SpringArm.xml:25 -#, fuzzy msgid "" "Clears the list of [PhysicsBody] objects excluded from the collision check." -msgstr "æ¸…é™¤ä»Žç¢°æ’žæ£€æŸ¥ä¸æŽ’é™¤çš„ [PhysicsBody3D] 对象列表。" +msgstr "æ¸…é™¤ä»Žç¢°æ’žæ£€æŸ¥ä¸æŽ’é™¤çš„ [PhysicsBody] 对象列表。" #: doc/classes/SpringArm.xml:31 msgid "Returns the spring arm's current length." msgstr "返回弹簧臂的当å‰é•¿åº¦ã€‚" #: doc/classes/SpringArm.xml:38 -#, fuzzy msgid "" "Removes the given [RID] from the list of [PhysicsBody] objects excluded from " "the collision check." -msgstr "从碰撞检查排除的 [PhysicsBody3D] 对象列表ä¸åˆ 除给定的 [RID]。" +msgstr "从碰撞检查排除的 [PhysicsBody] 对象列表ä¸åˆ 除指定的 [RID]。" #: doc/classes/SpringArm.xml:44 msgid "" @@ -64552,9 +65719,11 @@ msgid "" "html#collision-layers-and-masks]Collision layers and masks[/url] in the " "documentation for more information." msgstr "" +"ç¢°æ’žæ£€æµ‹çš„ç›®æ ‡å±‚ã€‚æ›´å¤šä¿¡æ¯è¯·å‚阅文档ä¸çš„[url=https://docs.godotengine.org/" +"zh_CN/stable/tutorials/physics/physics_introduction.html#collision-layers-" +"and-masks]碰撞层与é®ç½©[/url]。" #: doc/classes/SpringArm.xml:47 -#, fuzzy msgid "" "When the collision check is made, a candidate length for the SpringArm is " "given.\n" @@ -64565,24 +65734,21 @@ msgid "" "collision, while with the margin the [Camera] would be placed close to the " "point of collision." msgstr "" -"进行碰撞检查时,会给出 SpringArm3D 的候选长度。\n" -"ç„¶åŽå°†è¾¹è·å‡åŽ»æ¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”用于 SpringArm3D çš„å对象。\n" -"当 SpringArm3D å°† [Camera3D] 作为å节点时,æ¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ" -"[Camera3D] å°†æ”¾ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera3D] 将放置在é 近碰撞" -"点。" +"进行碰撞检查时,会给出 SpringArm 的候选长度。\n" +"ç„¶åŽå°†è¾¹è·å‡åŽ»æ¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”用于 SpringArm çš„å对象。\n" +"当 SpringArm å°† [Camera] 作为å节点时,æ¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ[Camera] 将放" +"ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera] 将放置在é 近碰撞点。" #: doc/classes/SpringArm.xml:52 -#, fuzzy msgid "" "The [Shape] to use for the SpringArm.\n" "When the shape is set, the SpringArm will cast the [Shape] on its z axis " "instead of performing a ray cast." msgstr "" -"用于SpringArm3Dçš„[Shape3D]。\n" -"当形状被设置时,SpringArm3D将在其Z轴上投射[Shape3D]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。" +"用于 SpringArm çš„[Shape]。\n" +"当形状被设置时,SpringArm 将在其 Z 轴上投射 [Shape]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。" #: doc/classes/SpringArm.xml:56 -#, fuzzy msgid "" "The maximum extent of the SpringArm. This is used as a length for both the " "ray and the shape cast used internally to calculate the desired position of " @@ -64590,10 +65756,10 @@ msgid "" "To know more about how to perform a shape cast or a ray cast, please consult " "the [PhysicsDirectSpaceState] documentation." msgstr "" -"SpringArm3D 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 " -"SpringArm3D å节点的所需ä½ç½®ã€‚\n" +"SpringArm 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 SpringArm " +"å节点的所需ä½ç½®ã€‚\n" "è¦äº†è§£æœ‰å…³å¦‚何执行形状投射或光线投射的更多信æ¯ï¼Œè¯·å‚阅 " -"[PhysicsDirectSpaceState3D] 文档。" +"[PhysicsDirectSpaceState] 文档。" #: doc/classes/Sprite.xml:4 msgid "General-purpose sprite node." @@ -64608,7 +65774,6 @@ msgstr "" "表动画的帧。" #: doc/classes/Sprite.xml:16 -#, fuzzy msgid "" "Returns a [Rect2] representing the Sprite's boundary in local coordinates. " "Can be used to detect if the Sprite was clicked. Example:\n" @@ -64620,8 +65785,8 @@ msgid "" " print(\"A click!\")\n" "[/codeblock]" msgstr "" -"返回一个 [Rect2]ï¼Œåœ¨å±€éƒ¨åæ ‡ä¸è¡¨ç¤º Sprite2D 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite2D 是å¦" -"被点击。例å:\n" +"返回 [Rect2] è¡¨ç¤ºå±€éƒ¨åæ ‡ä¸ Sprite 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite 是å¦è¢«ç‚¹å‡»ã€‚例" +"å:\n" "[codeblock]\n" "func _input(event):\n" " if event is InputEventMouseButton and event.pressed and event." @@ -64647,29 +65812,26 @@ msgid "If [code]true[/code], texture is centered." msgstr "如果 [code]true[/code],纹ç†å±…ä¸ã€‚" #: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15 -#, fuzzy msgid "" "Current frame to display from sprite sheet. [member hframes] or [member " "vframes] must be greater than 1." msgstr "" -"从精çµè¡¨æ˜¾ç¤ºçš„当å‰å¸§ã€‚ [member vframes] 或 [member hframes] 必须大于 1。" +"当剿˜¾ç¤ºçš„ç²¾çµè¡¨ä¸çš„帧。[member vframes] 或 [member hframes] 必须大于 1。" #: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18 -#, fuzzy msgid "" "Coordinates of the frame to display from sprite sheet. This is as an alias " "for the [member frame] property. [member hframes] or [member vframes] must " "be greater than 1." msgstr "" -"从精çµè¡¨æ˜¾ç¤ºçš„å¸§åæ ‡ã€‚这是 [member frame] 属性的别å。 [member vframes] 或 " -"[member hframes] 必须大于 1。" +"显示的帧在精çµè¡¨ä¸çš„åæ ‡ã€‚这是 [member frame] 属性的别å。[member vframes] " +"或 [member hframes] 必须大于 1。" #: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21 msgid "The number of columns in the sprite sheet." msgstr "ç²¾çµè¡¨ä¸çš„列数。" #: doc/classes/Sprite.xml:54 -#, fuzzy msgid "" "The normal map gives depth to the Sprite.\n" "[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. " @@ -64677,10 +65839,11 @@ msgid "" "Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for " "a comparison of normal map coordinates expected by popular engines." msgstr "" -"为 Sprite2D æä¾›æ·±åº¦çš„æ³•线贴图。\n" -"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki." -"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™" -"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚" +"为 Sprite æä¾›æ·±åº¦çš„æ³•线贴图。\n" +"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://" +"wiki.polycount.com/wiki/" +"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ" +"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚" #: doc/classes/Sprite.xml:61 msgid "" @@ -64702,9 +65865,8 @@ msgstr "" "è¦æ˜¾ç¤ºçš„图集纹ç†åŒºåŸŸã€‚ [member region_enabled] 必须是 [code]true[/code]。" #: doc/classes/Sprite.xml:70 -#, fuzzy msgid "[Texture] object to draw." -msgstr "[Texture2D] è¦ç»˜åˆ¶çš„对象。" +msgstr "[Texture] è¦ç»˜åˆ¶çš„对象。" #: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33 msgid "The number of rows in the sprite sheet." @@ -64723,14 +65885,13 @@ msgid "2D sprite node in a 3D world." msgstr "3D 世界ä¸çš„ 2D ç²¾çµèŠ‚ç‚¹ã€‚" #: doc/classes/Sprite3D.xml:7 -#, fuzzy msgid "" "A node that displays a 2D texture in a 3D environment. The texture displayed " "can be a region from a larger atlas texture, or a frame from a sprite sheet " "animation." msgstr "" -"显示 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯ä»¥æ˜¯æ¥è‡ªç²¾çµ" -"表动画的帧。" +"在 3D çŽ¯å¢ƒä¸æ˜¾ç¤º 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯" +"以是æ¥è‡ªç²¾çµè¡¨åŠ¨ç”»çš„å¸§ã€‚" #: doc/classes/Sprite3D.xml:24 msgid "" @@ -64745,6 +65906,8 @@ msgid "" "[Texture] object to draw. If [member GeometryInstance.material_override] is " "used, this will be overridden." msgstr "" +"è¦ç»˜åˆ¶çš„ [Texture] 对象。如果 [member GeometryInstance.material_override] 被" +"使用,这将被覆盖。" #: doc/classes/SpriteBase3D.xml:4 msgid "2D sprite node in 3D environment." @@ -64781,22 +65944,20 @@ msgid "" msgstr "乘以颜色值,用于色调调制和模拟光的颜色。" #: doc/classes/SpriteBase3D.xml:66 -#, fuzzy msgid "" "The objects' visibility on a scale from [code]0[/code] fully invisible to " "[code]1[/code] fully visible." -msgstr "物体的能è§åº¦ï¼Œä»Ž[code]0[/code]完全ä¸å¯è§åˆ°[code]1[/code]完全å¯è§ã€‚" +msgstr "物体的å¯è§åº¦ä»Ž [code]0 [/code] 完全ä¸å¯è§åˆ° [code]1 [/code] 完全å¯è§ã€‚" #: doc/classes/SpriteBase3D.xml:69 msgid "The size of one pixel's width on the sprite to scale it in 3D." msgstr "ç²¾çµä¸Šä¸€ä¸ªåƒç´ 宽度的大å°ï¼Œä»¥ 3D 缩放。" #: doc/classes/SpriteBase3D.xml:72 -#, fuzzy msgid "" "If [code]true[/code], the [Light] in the [Environment] has effects on the " "sprite." -msgstr "如果[code]true[/code],则[Environment]ä¸çš„[Light3D]å¯¹ç²¾çµæœ‰å½±å“。" +msgstr "如果 [code]true[/code],则 [Environment] ä¸çš„ [Light] å¯¹ç²¾çµæœ‰å½±å“。" #: doc/classes/SpriteBase3D.xml:75 msgid "" @@ -64826,9 +65987,8 @@ msgid "Represents the size of the [enum DrawFlags] enum." msgstr "代表[enum DrawFlags]枚举的大å°ã€‚" #: doc/classes/SpriteFrames.xml:4 -#, fuzzy msgid "Sprite frame library for AnimatedSprite." -msgstr "AnimatedSprite2D 的精çµå¸§åº“。" +msgstr "AnimatedSprite çš„ Sprite 帧数库。" #: doc/classes/SpriteFrames.xml:7 msgid "" @@ -64839,6 +65999,11 @@ msgid "" "having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" "code] will make it so the [code]run[/code] animation uses the normal map." msgstr "" +"[AnimatedSprite] 的精çµå¸§åº“。包å«å¯ç”¨äºŽæ’放的帧和动画数æ®ã€‚\n" +"[b]注æ„:[/b] ä½ å¯ä»¥é€šè¿‡åˆ›å»ºå¸¦æœ‰ [code]_normal[/code] åŽç¼€çš„ [SpriteFrames] " +"æ¥å…³è”ä¸€ç»„æ³•çº¿è´´å›¾ã€‚ä¾‹å¦‚ï¼ŒåŒæ—¶å˜åœ¨ä¸¤ä¸ªåˆ†åˆ«å«åš [code]run[/code] å’Œ " +"[code]run_normal[/code] çš„ [SpriteFrames] 资æºï¼Œé‚£ä¹ˆ [code]run[/code] ä¸çš„动" +"画就会使用法线贴图。" #: doc/classes/SpriteFrames.xml:17 msgid "Adds a new animation to the library." @@ -64857,13 +66022,12 @@ msgid "Removes all animations. A \"default\" animation will be created." msgstr "åˆ é™¤æ‰€æœ‰åŠ¨ç”»ã€‚å°†åˆ›å»ºä¸€ä¸ªâ€œé»˜è®¤â€åŠ¨ç”»ã€‚" #: doc/classes/SpriteFrames.xml:46 -#, fuzzy msgid "" "Returns [code]true[/code] if the given animation is configured to loop when " "it finishes playing. Otherwise, returns [code]false[/code]." msgstr "" -"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/" -"code]。" +"当指定的动画被é…ç½®ä¸ºç»“æŸæ’放åŽå¾ªçŽ¯æ—¶ï¼Œè¿”å›ž [code]true[/code],å¦åˆ™è¿”回 " +"[code]false[/code]。" #: doc/classes/SpriteFrames.xml:52 msgid "" @@ -64916,7 +66080,6 @@ msgid "Static body for 3D physics." msgstr "用于 3D 物ç†çš„陿€ç‰©ä½“。" #: doc/classes/StaticBody.xml:7 -#, fuzzy msgid "" "Static body for 3D physics. A static body is a simple body that is not " "intended to move. In contrast to [RigidBody], they don't consume any CPU " @@ -64925,7 +66088,7 @@ msgid "" "static body, so even if it doesn't move, it affects other bodies as if it " "was moving (this is useful for simulating conveyor belts or conveyor wheels)." msgstr "" -"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸ç§»åŠ¨çš„ç®€å•物体。与 [RigidBody3D] 相比,它" +"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸åº”移动的简å•物体。与 [RigidBody] 相比,它" "们åªè¦ä¸åЍ就ä¸ä¼šæ¶ˆè€—任何 CPU 资æºã€‚\n" "æ¤å¤–,å¯ä»¥ä¸ºé™æ€ç‰©ä½“设置æ’å®šçš„çº¿é€Ÿåº¦æˆ–è§’é€Ÿåº¦ï¼Œå› æ¤å³ä½¿å®ƒä¸ç§»åŠ¨ï¼Œä¹Ÿä¼šåƒç§»åЍ䏀" "æ ·å½±å“å…¶ä»–ç‰©ä½“ï¼ˆè¿™å¯¹äºŽæ¨¡æ‹Ÿä¼ é€å¸¦æˆ–ä¼ é€è½®å¾ˆæœ‰ç”¨ï¼‰ã€‚" @@ -64952,6 +66115,9 @@ msgid "" "Deprecated, use [member PhysicsMaterial.friction] instead via [member " "physics_material_override]." msgstr "" +"物体的摩擦,从 0ï¼ˆæ— æ‘©æ“¦ï¼‰åˆ° 1(最大摩擦)。\n" +"已废弃,请通过 [member physics_material_override] 使用 [member " +"PhysicsMaterial.friction]。" #: doc/classes/StaticBody2D.xml:4 msgid "Static body for 2D physics." @@ -64986,28 +66152,29 @@ msgstr "" "物体的æ’定线速度。这ä¸ä¼šç§»åŠ¨ç‰©ä½“ï¼Œä½†ä¼šå½±å“碰撞的物体,就åƒå®ƒåœ¨ç§»åŠ¨ä¸€æ ·ã€‚" #: doc/classes/StaticBody2D.xml:26 -#, fuzzy msgid "" "The body's friction. Values range from [code]0[/code] (no friction) to " "[code]1[/code] (full friction).\n" "Deprecated, use [member PhysicsMaterial.friction] instead via [member " "physics_material_override]." msgstr "" -"物体的摩擦。å–值范围从[code]0[/code](æ— æ‘©æ“¦)到[code]1[/code](最大摩擦)。" +"物体的摩擦。å–值范围从 [code]0[/code]ï¼ˆæ— æ‘©æ“¦ï¼‰åˆ° [code]1[/code](最大摩" +"擦)。\n" +"已废弃,请通过 [member physics_material_override] 使用 [member " +"PhysicsMaterial.friction]。" #: doc/classes/StreamPeer.xml:4 msgid "Abstraction and base class for stream-based protocols." msgstr "基于æµçš„å议的抽象和基类。" #: doc/classes/StreamPeer.xml:7 -#, fuzzy msgid "" "StreamPeer is an abstraction and base class for stream-based protocols (such " "as TCP). It provides an API for sending and receiving data through streams " "as raw data or strings." msgstr "" -"StreamPeer是基于æµå议(如TCP或UNIX套接å—)的一个抽象和基类。它æä¾›äº†ä¸€ä¸ª" -"API,用于通过æµå‘é€å’ŒæŽ¥æ”¶åŽŸå§‹æ•°æ®æˆ–å—符串的数æ®ã€‚" +"StreamPeer 是对æµå¼å议(如 TCP)的抽象和基类。它æä¾›äº†ç”¨äºŽé€šè¿‡æµå‘é€å’ŒæŽ¥æ”¶åŽŸ" +"å§‹æ•°æ®æˆ–å—符串的数æ®çš„ API。" #: doc/classes/StreamPeer.xml:15 msgid "Gets a signed 16-bit value from the stream." @@ -65154,7 +66321,6 @@ msgstr "" "值,一个 [enum @GlobalScope.Error] 错误ç 以åŠä¸€ä¸ªæ•´æ•°ï¼Œè¡¨ç¤ºå®žé™…å‘é€çš„æ•°æ®é‡ã€‚" #: doc/classes/StreamPeer.xml:174 -#, fuzzy msgid "" "Puts a zero-terminated ASCII string into the stream prepended by a 32-bit " "unsigned integer representing its size.\n" @@ -65166,7 +66332,8 @@ msgid "" msgstr "" "呿µä¸æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 ASCII å—符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´" "数。\n" -"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII å—符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n" +"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII å—符串,å¯ä»¥ä½¿ç”¨ [method " +"put_data]:\n" "[codeblock]\n" "put_data(\"Hello world\".to_ascii())\n" "[/codeblock]" @@ -65188,7 +66355,6 @@ msgid "Puts an unsigned byte into the stream." msgstr "呿µä¸æ”¾å…¥ä¸€ä¸ªæ— 符å·å—节。" #: doc/classes/StreamPeer.xml:213 -#, fuzzy msgid "" "Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits " "unsigned integer representing its size.\n" @@ -65200,7 +66366,8 @@ msgid "" msgstr "" "呿µä¸æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 UTF-8 å—符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´" "数。\n" -"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 å—符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n" +"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 å—符串,å¯ä»¥ä½¿ç”¨ [method " +"put_data]:\n" "[codeblock]\n" "put_data(\"Hello world\".to_utf8())\n" "[/codeblock]" @@ -65321,13 +66488,12 @@ msgid "Returns the status of the connection, see [enum Status]." msgstr "返回连接的状æ€ï¼Œè§[enum Status]。" #: doc/classes/StreamPeerTCP.xml:47 -#, fuzzy msgid "" "Returns [code]true[/code] if this peer is currently connected or is " "connecting to a host, [code]false[/code] otherwise." msgstr "" -"如果这个对ç‰ä½“当å‰è¿žæŽ¥åˆ°ä¸€ä¸ªä¸»æœºï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回" -"[code]false[/code]。" +"当本对ç‰ä½“当å‰å·²è¿žæŽ¥åˆ°ä¸»æœºæˆ–者æ£åœ¨è¿žæŽ¥ä¸»æœºï¼Œåˆ™è¿”回 [code]true[/code],å¦åˆ™è¿”" +"回 [code]false[/code]。" #: doc/classes/StreamPeerTCP.xml:54 msgid "" @@ -65339,6 +66505,12 @@ msgid "" "send large packets or need to transfer a lot of data, as enabling this can " "decrease the total available bandwidth." msgstr "" +"如果 [code]enabled[/code] 为 [code]true[/code] 时,数æ®åŒ…会立å³å‘é€ã€‚如果 " +"[code]enabled[/code] 为 [code]false[/code] 时(默认如æ¤ï¼‰ï¼Œæ•°æ®åŒ…会延迟å‘é€ï¼Œ" +"使用 [url=https://zh.wikipedia.org/wiki/%E7%B4%8D%E6%A0%BC%E7%AE%97%E6%B3%95]" +"çº³æ ¼ç®—æ³•[/url]åˆå¹¶ã€‚\n" +"[b]注æ„:[/b] å¦‚æžœä½ çš„åº”ç”¨æ‰€ä¼ è¾“çš„æ•°æ®åŒ…很大,或者需è¦ä¼ è¾“å¤§é‡æ•°æ®ï¼Œå»ºè®®å°†æœ¬" +"å±žæ€§ä¿æŒç¦ç”¨ï¼Œå› 为å¯ç”¨åŽå¯èƒ½é™ä½Žæ€»ä½“å¯ç”¨å¸¦å®½ã€‚" #: doc/classes/StreamPeerTCP.xml:61 msgid "" @@ -65394,7 +66566,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" "gdscript_format_string.html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/" "gdscript_format_string.html" #: doc/classes/String.xml:17 @@ -65555,6 +66727,18 @@ msgid "" "To get a boolean result from a string comparison, use the [code]==[/code] " "operator instead. See also [method nocasecmp_to]." msgstr "" +"与å¦ä¸€ä¸ªå—符串进行比较,区分大å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 " +"[code]1[/code]ã€ç‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是å—符串ä¸çš„ " +"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC" +"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url]ï¼Œå¤§è‡´ä¸Žå—æ¯è¡¨é¡ºåºä¸€è‡´ã€‚\n" +"[b]å—符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å—符串比 [code]to[/code] å—符串长时返" +"回 [code]-1[/code],“基准â€å—符串比 [code]to[/code] å—ç¬¦ä¸²çŸæ—¶è¿”回 [code]-1[/" +"code]ã€‚è¯·æ³¨æ„æ¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å—符。\n" +"[b]å˜åœ¨ç©ºå—符串的行为:[/b] “基准â€å—符串为空时返回 [code]-1[/code],å—符串 " +"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/" +"code]。\n" +"如果想在比较å—符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 " +"[method nocasecmp_to]。" #: doc/classes/String.xml:229 msgid "" @@ -65601,7 +66785,6 @@ msgstr "" "从该å—符串的 [code]position[/code] ä½ç½®å¼€å§‹ï¼Œæ“¦é™¤ [code]chars[/code] 个å—符。" #: doc/classes/String.xml:272 -#, fuzzy msgid "" "Finds the first occurrence of a substring. Returns the starting position of " "the substring or [code]-1[/code] if not found. Optionally, the initial " @@ -65614,12 +66797,12 @@ msgid "" " pass\n" "[/codeblock]" msgstr "" -"返回æ¤å®žä¾‹ä¸æŒ‡å®šå—符串的 [b]first[/b] 出现的索引(区分大å°å†™),或 [code]-1[/" -"code]。å¯ä»¥æŒ‡å®šèµ·å§‹æœç´¢ç´¢å¼•,一直到å—符串的结尾。\n" -"[b]注:[/b] å¦‚æžœåªæƒ³çŸ¥é“å—符串是å¦åŒ…å«åå—符串,请使用 [code]in[/code] è¿ç®—" +"查找首次出现的åå—符串。返回该åå—符串的起始ä½ç½®ï¼Œæœªæ‰¾åˆ°æ—¶åˆ™è¿”回 [code]-1[/" +"code]。还å¯ä»¥ä¼ 入查找的起始ä½ç½®ã€‚\n" +"[b]注æ„:[/b] å¦‚æžœåªæƒ³çŸ¥é“å—符串是å¦åŒ…å«åå—符串,请使用 [code]in[/code] è¿ç®—" "符,如下所示:\n" "[codeblock]\n" -"# 将判æ–为 `false`.\n" +"# 判æ–结果将为 `false`。\n" "if \"i\" in \"team\":\n" " pass\n" "[/codeblock]" @@ -65877,6 +67060,10 @@ msgid "" "trim_prefix] method that will remove a single prefix string rather than a " "set of characters." msgstr "" +"返回该å—ç¬¦ä¸²ä»Žå·¦ä¾§åˆ é™¤è‹¥å¹²å—符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ " +"除å—符的å—符串。\n" +"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯å‰ç¼€ã€‚å¦‚æžœä¸æƒ³åˆ 除一组å—ç¬¦ï¼Œè€Œæ˜¯æƒ³åˆ é™¤å•" +"一的å‰ç¼€å—符串,请å‚阅 [method trim_prefix]。" #: doc/classes/String.xml:492 msgid "" @@ -65928,6 +67115,22 @@ msgid "" "To get a boolean result from a string comparison, use the [code]==[/code] " "operator instead. See also [method nocasecmp_to] and [method casecmp_to]." msgstr "" +"与å¦ä¸€ä¸ªå—符串进行[i]自然顺åº[/i]比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/" +"code]ã€å¤§äºŽæ—¶è¿”回 [code]1[/code]ã€ç‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”" +"较的是å—符串ä¸çš„ [url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC" +"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url]ï¼Œå¤§è‡´ä¸Žå—æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时," +"会将å°å†™å—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n" +"使用自然顺åºè¿›è¡ŒæŽ’åºæ—¶ï¼Œå¯¹è¿žç»æ•°å—的排åºç¬¦åˆå¤§å¤šæ•°äººçš„预期。使用自然顺åºå¯¹ 1 " +"到 10 进行排åºåŽï¼Œä¼šå¾—到 [code][1, 2, 3, ...][/code] è€Œä¸æ˜¯ [code][1, 10, 2, " +"3, ...][/code]。\n" +"[b]å—符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å—符串比 [code]to[/code] å—符串长时返" +"回 [code]-1[/code],“基准â€å—符串比 [code]to[/code] å—ç¬¦ä¸²çŸæ—¶è¿”回 [code]-1[/" +"code]ã€‚è¯·æ³¨æ„æ¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å—符。\n" +"[b]å˜åœ¨ç©ºå—符串的行为:[/b] “基准â€å—符串为空时返回 [code]-1[/code],å—符串 " +"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/" +"code]。\n" +"如果想在比较å—符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 " +"[method casecmp_to]。" #: doc/classes/String.xml:529 msgid "" @@ -65948,6 +67151,19 @@ msgid "" "To get a boolean result from a string comparison, use the [code]==[/code] " "operator instead. See also [method casecmp_to]." msgstr "" +"与å¦ä¸€ä¸ªå—符串进行比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 " +"[code]1[/code]ã€ç‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是å—符串ä¸çš„ " +"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC" +"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url]ï¼Œå¤§è‡´ä¸Žå—æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时," +"会将å°å†™å—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n" +"[b]å—符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å—符串比 [code]to[/code] å—符串长时返" +"回 [code]-1[/code],“基准â€å—符串比 [code]to[/code] å—ç¬¦ä¸²çŸæ—¶è¿”回 [code]-1[/" +"code]ã€‚è¯·æ³¨æ„æ¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å—符。\n" +"[b]å˜åœ¨ç©ºå—符串的行为:[/b] “基准â€å—符串为空时返回 [code]-1[/code],å—符串 " +"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/" +"code]。\n" +"如果想在比较å—符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 " +"[method casecmp_to]。" #: doc/classes/String.xml:539 msgid "Returns the character code at position [code]at[/code]." @@ -65996,25 +67212,26 @@ msgstr "返回é‡å¤å¤šæ¬¡çš„原始å—符串。é‡å¤æ¬¡æ•°ç”±å‚数给出。" msgid "" "Replaces occurrences of a case-sensitive substring with the given one inside " "the string." -msgstr "将出现的åå—符串替æ¢ä¸ºå—符串ä¸ç»™å®šçš„åå—符串(区分大å°å†™)。" +msgstr "将出现的åå—符串替æ¢ä¸ºå—符串ä¸ç»™å®šçš„åå—符串,区分大å°å†™ã€‚" #: doc/classes/String.xml:595 msgid "" "Replaces occurrences of a case-insensitive substring with the given one " "inside the string." -msgstr "将出现的åå—符串替æ¢ä¸ºå—符串ä¸ç»™å®šçš„åå—符串(ä¸åŒºåˆ†å¤§å°å†™)。" +msgstr "将出现的åå—符串替æ¢ä¸ºå—符串ä¸ç»™å®šçš„åå—符串,ä¸åŒºåˆ†å¤§å°å†™ã€‚" #: doc/classes/String.xml:603 msgid "" "Performs a case-sensitive search for a substring, but starts from the end of " "the string instead of the beginning." -msgstr "" +msgstr "执行åå—符串æœç´¢ï¼ŒåŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚" #: doc/classes/String.xml:611 msgid "" "Performs a case-insensitive search for a substring, but starts from the end " "of the string instead of the beginning." msgstr "" +"执行åå—符串æœç´¢ï¼Œä¸åŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚" #: doc/classes/String.xml:618 msgid "Returns the right side of the string from a given position." @@ -66061,6 +67278,10 @@ msgid "" "trim_suffix] method that will remove a single suffix string rather than a " "set of characters." msgstr "" +"返回该å—符串从å³ä¾§åˆ 除若干å—符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ " +"除å—符的å—符串。\n" +"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯åŽç¼€ã€‚å¦‚æžœä¸æƒ³åˆ 除一组å—ç¬¦ï¼Œè€Œæ˜¯æƒ³åˆ é™¤å•" +"一的å‰ç¼€å—符串,请å‚阅 [method trim_suffix]。" #: doc/classes/String.xml:651 msgid "Returns the SHA-1 hash of the string as an array of bytes." @@ -66162,16 +67383,14 @@ msgstr "" "[code]len[/code] 是å¯é€‰çš„,使用 [code]-1[/code] 将返回给定ä½ç½®çš„剩余å—符。" #: doc/classes/String.xml:738 -#, fuzzy msgid "" "Converts the String (which is a character array) to [PoolByteArray] (which " "is an array of bytes). The conversion is faster compared to [method " "to_utf8], as this method assumes that all the characters in the String are " "ASCII characters." msgstr "" -"å°† String(它是一个å—符数组)转æ¢ä¸º [PackedByteArray](它是一个å—节数组)。" -"与 [method to_utf8] 相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ¤æ–¹æ³•å‡å®š String ä¸çš„æ‰€æœ‰å—符都" -"是 ASCII å—符。" +"å°† String(å—符数组)转æ¢ä¸º [PoolByteArray](å—节数组)。与 [method to_utf8] " +"相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ¤æ–¹æ³•å‡å®š String ä¸çš„æ‰€æœ‰å—符都是 ASCII å—符。" #: doc/classes/String.xml:744 msgid "" @@ -66192,14 +67411,13 @@ msgid "Returns the string converted to uppercase." msgstr "返回转æ¢ä¸ºå¤§å†™çš„å—符串。" #: doc/classes/String.xml:768 -#, fuzzy msgid "" "Converts the String (which is an array of characters) to [PoolByteArray] " "(which is an array of bytes). The conversion is a bit slower than [method " "to_ascii], but supports all UTF-8 characters. Therefore, you should prefer " "this function over [method to_ascii]." msgstr "" -"å°†å—符串(å—符数组)转æ¢ä¸º [PackedByteArray](å—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method " +"å°†å—符串(å—符数组)转æ¢ä¸º [PoolByteArray](å—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method " "to_ascii] æ…¢ä¸€ç‚¹ï¼Œä½†æ”¯æŒæ‰€æœ‰ UTF-8 å—ç¬¦ã€‚å› æ¤ï¼Œæ‚¨åº”è¯¥æ›´å–œæ¬¢è¿™ä¸ªå‡½æ•°è€Œä¸æ˜¯ " "[method to_ascii]。" @@ -66207,7 +67425,7 @@ msgstr "" msgid "" "Converts the String (which is an array of characters) to [PoolByteArray] " "(which is an array of bytes)." -msgstr "" +msgstr "å°†å—符串(å—符的数组)转æ¢ä¸º [PoolByteArray](å—节的数组)。" #: doc/classes/String.xml:781 msgid "" @@ -66222,14 +67440,13 @@ msgid "" msgstr "如果以一个给定的å—符串为结尾,则从该å—符串ä¸åˆ é™¤ï¼Œæˆ–è€…ä¸æ”¹å˜è¯¥å—符串。" #: doc/classes/String.xml:794 -#, fuzzy msgid "" "Removes any characters from the string that are prohibited in [Node] names " "([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/" "code])." msgstr "" -"è¿”å›žå½“å‰æ—¥æœŸä½œä¸ºé”®çš„å—å…¸:[code]year[/code], [code]month[/code], [code]day[/" -"code], [code]weekday[/code], [code]dst[/code](å¤ä»¤æ—¶)。" +"从å—符串ä¸åˆ 除所有ä¸å…许在 [Node] åç§°ä¸å‡ºçŽ°çš„å—符([code].[/code] [code]:[/" +"code] [code]@[/code] [code]/[/code] [code]\"[/code])。" #: doc/classes/String.xml:800 msgid "" @@ -66248,7 +67465,6 @@ msgid "Base class for drawing stylized boxes for the UI." msgstr "用于为 UI ç»˜åˆ¶é£Žæ ¼åŒ–æ¡†çš„åŸºç±»ã€‚" #: doc/classes/StyleBox.xml:7 -#, fuzzy msgid "" "StyleBox is [Resource] that provides an abstract base class for drawing " "stylized boxes for the UI. StyleBoxes are used for drawing the styles of " @@ -66261,10 +67477,14 @@ msgid "" "[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the " "[code]focus[/code] [StyleBox] more reusable across different nodes." msgstr "" -"StyleBox 是 [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI ç»˜åˆ¶é£Žæ ¼åŒ–çš„æ¡†ã€‚ " -"StyleBox ç”¨äºŽç»˜åˆ¶æŒ‰é’®æ ·å¼ã€çº¿æ¡ç¼–è¾‘èƒŒæ™¯ã€æ ‘背景ç‰ï¼Œä¹Ÿç”¨äºŽæµ‹è¯•指针信å·çš„逿˜ŽæŽ©" -"ç 。如果在指定为控件的掩ç çš„ StyleBox ä¸Šçš„æŽ©ç æµ‹è¯•失败,点击和è¿åŠ¨ä¿¡å·å°†é€šè¿‡" -"å®ƒä¼ é€’åˆ°ä¸‹é¢çš„一个。" +"æ ·å¼ç›’ StyleBox æ˜¯ä¸€ç§ [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI ç»˜åˆ¶é£Žæ ¼åŒ–" +"的框。 StyleBox è¢«ç”¨äºŽç»˜åˆ¶æŒ‰é’®çš„æ ·å¼ã€è¡Œç¼–è¾‘æ¡†çš„èƒŒæ™¯ã€æ ‘的背景ç‰ï¼Œä¹Ÿè¢«ç”¨ä½œæµ‹" +"试指针信å·çš„逿˜ŽæŽ©ç 。将 StyleBox æŒ‡å®šä¸ºæŽ§ä»¶çš„æŽ©ç æ—¶ï¼Œå¦‚æžœåœ¨æŽ©ç æµ‹è¯•失败,点" +"击和è¿åŠ¨ä¿¡å·å°†é€è¿‡å®ƒä¼ 递至下层控件。\n" +"[b]注æ„:[/b] 对于有 [i]主题属性[/i] çš„ [Control] 控件,å为 [code]focus[/" +"code] çš„ [StyleBox] 会显示在å为 [code]normal[/code]ã€[code]hover[/code]ã€" +"[code]pressed[/code] çš„ [StyleBox]ä¹‹ä¸Šã€‚è¿™æ ·çš„è¡Œä¸ºæœ‰åŠ©äºŽ [code]focus[/code] " +"[StyleBox] 在ä¸åŒèŠ‚ç‚¹ä¸Šå¤ç”¨ã€‚" #: doc/classes/StyleBox.xml:18 msgid "" @@ -66302,7 +67522,7 @@ msgstr "" #: doc/classes/StyleBox.xml:52 msgid "Returns the minimum size that this stylebox can be shrunk to." -msgstr "返回æ¤StyleBoxå¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚" +msgstr "è¿”å›žæ¤æ ·å¼ç›’å¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚" #: doc/classes/StyleBox.xml:58 msgid "" @@ -66310,7 +67530,7 @@ msgid "" "equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style." "get_margin(MARGIN_TOP))[/code]." msgstr "" -"è¿”å›žæ ·å¼æ¡†çš„“åç§»é‡â€ã€‚这个辅助函数返回一个ç‰ä»·äºŽ [code]Vector2(style." +"è¿”å›žæ ·å¼ç›’的“åç§»é‡â€ã€‚这个辅助函数返回一个ç‰ä»·äºŽ [code]Vector2(style." "get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP))[/code] 的值。" #: doc/classes/StyleBox.xml:66 @@ -66318,8 +67538,8 @@ msgid "" "Sets the default value of the specified [enum Margin] to given [code]offset[/" "code] in pixels." msgstr "" -"将指定的 [enum Margin] 的默认值设置为给定的 [code]offset[/code](以åƒç´ 为å•" -"ä½ï¼‰ã€‚" +"将指定 [enum Margin] è¾¹è·çš„默认值设置为给定的 [code]offset[/code],å•ä½ä¸ºåƒ" +"ç´ ã€‚" #: doc/classes/StyleBox.xml:74 msgid "Test a position in a rectangle, return whether it passes the mask test." @@ -66339,13 +67559,13 @@ msgid "" "of reading these properties directly. This is because it correctly respects " "negative values and the fallback mentioned above." msgstr "" -"æ¤æ ·å¼æ¡†å†…容的底部边è·ã€‚å¢žåŠ æ¤å€¼ä¼šå‡å°‘底部内容的å¯ç”¨ç©ºé—´ã€‚\n" -"如果æ¤å€¼ä¸ºè´Ÿï¼Œåˆ™å°†å…¶å¿½ç•¥å¹¶æ”¹ä¸ºä½¿ç”¨ç‰¹å®šäºŽå节点的边è·ã€‚例如,对于 " -"[StyleBoxFlat],使用边框厚度(如果有)。\n" -"ç”±ä½¿ç”¨æ¤æ ·å¼æ¡†çš„代ç 决定这些内容是什么:例如,[Button] éµä»ŽæŒ‰é’®æ–‡æœ¬å†…容的æ¤å†…" -"容边è·ã€‚\n" -"[method get_margin] 应该用于作为使用者获å–è¿™ä¸ªå€¼ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–这些属性。这" -"æ˜¯å› ä¸ºå®ƒæ£ç¡®åœ°éµä»Žäº†è´Ÿå€¼å’Œä¸Šè¿°å›žé€€ã€‚" +"æ¤æ ·å¼ç›’内容的底边è·ã€‚å¢žåŠ æ¤å€¼ä¼šä»Žåº•部å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n" +"如果æ¤å€¼ä¸ºè´Ÿï¼Œåˆ™å°†å…¶å¿½ç•¥å¹¶æ”¹ä¸ºä½¿ç”¨ç‰¹å®šäºŽè¯¥å类型的边è·ã€‚例如,对于 " +"[StyleBoxFlat],(如果有厚度的è¯ï¼‰å°†ä½¿ç”¨è¾¹æ¡†åŽšåº¦ã€‚\n" +"å†…å®¹æ˜¯ä»€ä¹ˆç”±ä½¿ç”¨æ¤æ ·å¼æ¡†çš„代ç 决定:例如 [Button] 会为其文本内容设置æ¤å†…容边" +"è·ã€‚\n" +"使用者应该通过 [method get_margin] 获å–è¾¹è·ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–å•独方å‘上的属性。" +"è¿™æ˜¯å› ä¸ºè¿™ä¸ªå‡½æ•°ä¼šæ£ç¡®å¤„ç†è´Ÿå€¼å’Œä¸Šè¿°å¤‡ç”¨é€»è¾‘。" #: doc/classes/StyleBox.xml:86 msgid "" @@ -66353,8 +67573,8 @@ msgid "" "reduces the space available to the contents from the left.\n" "Refer to [member content_margin_bottom] for extra considerations." msgstr "" -"æ¤stylebox内容的左边è·ã€‚å¢žåŠ æ¤å€¼ä¼šå‡å°‘左侧内容的å¯ç”¨ç©ºé—´ã€‚\n" -"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。" +"æ¤æ ·å¼ç›’内容的左边è·ã€‚å¢žåŠ æ¤å€¼ä¼šä»Žå·¦ä¾§å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n" +"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。" #: doc/classes/StyleBox.xml:90 msgid "" @@ -66362,8 +67582,8 @@ msgid "" "reduces the space available to the contents from the right.\n" "Refer to [member content_margin_bottom] for extra considerations." msgstr "" -"æ¤stylebox内容的å³è¾¹è·ã€‚å¢žåŠ æ¤å€¼ä¼šå‡å°‘å³ä¾§å†…容的å¯ç”¨ç©ºé—´ã€‚\n" -"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。" +"æ¤æ ·å¼ç›’内容的å³è¾¹è·ã€‚å¢žåŠ æ¤å€¼ä¼šä»Žå³ä¾§å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n" +"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。" #: doc/classes/StyleBox.xml:94 msgid "" @@ -66371,24 +67591,23 @@ msgid "" "reduces the space available to the contents from the top.\n" "Refer to [member content_margin_bottom] for extra considerations." msgstr "" -"è¿™ä¸ªæ ·å¼æ¡†çš„内容的上边è·ã€‚å¢žåŠ è¿™ä¸ªå€¼å¯ä»¥å‡å°‘内容从顶部的å¯ç”¨ç©ºé—´ã€‚\n" -"请å‚考[member content_margin_bottom]以获得é¢å¤–的考虑。" +"æ¤æ ·å¼ç›’内容的顶边è·ã€‚å¢žåŠ æ¤å€¼ä¼šä»Žé¡¶éƒ¨å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n" +"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。" #: doc/classes/StyleBoxEmpty.xml:4 msgid "Empty stylebox (does not display anything)." -msgstr "空的StyleBoxï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。" +msgstr "ç©ºçš„æ ·å¼ç›’ï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。" #: doc/classes/StyleBoxEmpty.xml:7 msgid "Empty stylebox (really does not display anything)." -msgstr "空的StyleBoxï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。" +msgstr "ç©ºçš„æ ·å¼ç›’ï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。" #: doc/classes/StyleBoxFlat.xml:4 msgid "" "Customizable [StyleBox] with a given set of parameters (no texture required)." -msgstr "å¯è‡ªå®šä¹‰ [StyleBox] ä¸Žç»™å®šå‚æ•°é›† ï¼ˆæ— éœ€çº¹ç†ï¼‰ 。" +msgstr "å¯é€šè¿‡ä¸€ç³»åˆ—傿•°è‡ªå®šä¹‰çš„ [StyleBox]ï¼ˆæ— éœ€çº¹ç†ï¼‰ 。" #: doc/classes/StyleBoxFlat.xml:7 -#, fuzzy msgid "" "This [StyleBox] can be used to achieve all kinds of looks without the need " "of a texture. The following properties are customizable:\n" @@ -66411,19 +67630,19 @@ msgid "" "corner_radius_bottom_left: 20\n" "[/codeblock]" msgstr "" -"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–è§‚ï¼Œæ— éœ€çº¹ç†ã€‚这些属性是å¯å®šåˆ¶çš„:\n" +"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–è§‚ï¼Œæ— éœ€çº¹ç†ã€‚以下属性是å¯å®šåˆ¶çš„:\n" "- 颜色\n" "- 边框宽度(æ¯ä¸ªè¾¹æ¡†çš„å•独宽度)\n" "- 圆角(æ¯ä¸ªè§’çš„å•独åŠå¾„)\n" "- 阴影(带有模糊和å移)\n" -"å…许将æ‹è§’åŠå¾„设置为高值。一旦角é‡å ï¼Œæ ·å¼æ¡†å°†åˆ‡æ¢åˆ°ç›¸å…³ç³»ç»Ÿã€‚例å:\n" +"å…许将圆角åŠå¾„设置为很高的值。两角é‡å æ—¶ï¼Œæ ·å¼ç›’将切æ¢åˆ°ç›¸å¯¹ç³»ç»Ÿã€‚例å:\n" "[codeblock]\n" "height = 30\n" "corner_radius_top_left = 50\n" "corner_radius_bottom_left = 100\n" "[/codeblock]\n" -"相关系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—å®žé™…è§’å®½åº¦ã€‚æ·»åŠ çš„ä¸¤ä¸ªè§’å°† [b] æ°¸" -"远 [/b] ä¸ä¼šè¶…过高度。结果:\n" +"相对系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—å®žé™…è§’å®½åº¦ã€‚æ·»åŠ çš„ä¸¤ä¸ªè§’[b]永远[/" +"b]ä¸ä¼šè¶…过高度。结果:\n" "[codeblock]\n" "corner_radius_top_left: 10\n" "corner_radius_bottom_left: 20\n" @@ -66511,7 +67730,6 @@ msgstr "" "[code]size_right[/code] å’Œ [code]size_bottom[/code] åƒç´ 。" #: doc/classes/StyleBoxFlat.xml:122 -#, fuzzy msgid "" "Antialiasing draws a small ring around the edges, which fades to " "transparency. As a result, edges look much smoother. This is only noticeable " @@ -66521,8 +67739,11 @@ msgid "" "[code]false[/code] to ensure crisp visuals and avoid possible visual " "glitches." msgstr "" -"抗锯齿在边缘周围绘制一个å°çŽ¯ï¼Œå®ƒé€æ¸å˜é€æ˜Žã€‚最åŽè¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨" -"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚" +"抗锯齿会在边缘周围绘制一个æ¸å˜åˆ°é€æ˜Žçš„å°çŽ¯ã€‚å› æ¤è¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨" +"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚\n" +"[b]注æ„:[/b] 使用 45 度倒角([member corner_detail] = 1)时,建议将 [member " +"anti_aliasing] 设为 [code]false[/code]ï¼Œè¿™æ ·å¯ä»¥ä¿è¯ç”»é¢é”利ã€é¿å…一些显示问" +"题。" #: doc/classes/StyleBoxFlat.xml:126 msgid "" @@ -66559,7 +67780,6 @@ msgid "Border width for the top border." msgstr "顶部边框的宽度。" #: doc/classes/StyleBoxFlat.xml:150 -#, fuzzy msgid "" "This sets the number of vertices used for each corner. Higher values result " "in rounder corners but take more processing power to compute. When choosing " @@ -66571,12 +67791,11 @@ msgid "" "A corner detail of [code]1[/code] will result in chamfered corners instead " "of rounded corners, which is useful for some artistic effects." msgstr "" -"这将设置用于æ¯ä¸ªè§’的顶点数é‡ã€‚æ›´é«˜çš„å€¼ä¼šå½¢æˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†èƒ½åŠ›æ¥" -"计算。选择值时,应考虑角åŠå¾„([method set_corner_radius_all])。\n" -"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够了。对于å°" -"于 30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够了。\n" -"[code]1[/code]çš„corner detail ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰" -"用。" +"设置用于æ¯ä¸ªè§’çš„é¡¶ç‚¹æ•°ã€‚æ›´é«˜çš„å€¼ç”Ÿæˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†è®¡ç®—。选择值" +"时,应考虑角åŠå¾„([method set_corner_radius_all])。\n" +"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够。对于å°äºŽ " +"30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够。\n" +"[code]1[/code]çš„è§’ç»†èŠ‚ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰ç”¨ã€‚" #: doc/classes/StyleBoxFlat.xml:155 msgid "" @@ -66825,7 +68044,7 @@ msgstr "" #: doc/classes/StyleBoxTexture.xml:103 msgid "Modulates the color of the texture when this style box is drawn." -msgstr "ç»˜åˆ¶æ¤æ ·å¼æ¡†æ—¶è°ƒåˆ¶çº¹ç†çš„颜色。" +msgstr "ç»˜åˆ¶æ¤æ ·å¼ç›’时用于调制纹ç†çš„颜色。" #: doc/classes/StyleBoxTexture.xml:106 msgid "" @@ -66835,10 +68054,11 @@ msgid "" "Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for " "a comparison of normal map coordinates expected by popular engines." msgstr "" -"绘制æ¤StyleBox时使用的法线贴图。\n" -"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki." -"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™" -"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚" +"ç»˜åˆ¶æ¤æ ·å¼ç›’时使用的法线贴图。\n" +"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://" +"wiki.polycount.com/wiki/" +"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ" +"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚" #: doc/classes/StyleBoxTexture.xml:110 msgid "" @@ -66851,24 +68071,24 @@ msgstr "" #: doc/classes/StyleBoxTexture.xml:114 msgid "The texture to use when drawing this style box." -msgstr "绘制æ¤Styleæ—¶è¦ä½¿ç”¨çš„纹ç†ã€‚" +msgstr "ç»˜åˆ¶æ¤æ ·å¼ç›’时所使用的纹ç†ã€‚" #: doc/classes/StyleBoxTexture.xml:120 msgid "Emitted when the stylebox's texture is changed." -msgstr "当stylebox的纹ç†è¢«æ”¹å˜æ—¶å‘出。" +msgstr "å½“æ ·å¼ç›’的纹ç†è¢«æ”¹å˜æ—¶å‘出。" #: doc/classes/StyleBoxTexture.xml:126 msgid "" "Stretch the stylebox's texture. This results in visible distortion unless " "the texture size matches the stylebox's size perfectly." msgstr "" -"æ‹‰ä¼¸æ ·å¼æ¡†çš„纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼æ¡†çš„大å°å®Œç¾ŽåŒ¹é…。" +"æ‹‰ä¼¸æ ·å¼ç›’的纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼ç›’的大å°å®Œç¾ŽåŒ¹é…。" #: doc/classes/StyleBoxTexture.xml:129 msgid "" "Repeats the stylebox's texture to match the stylebox's size according to the " "nine-patch system." -msgstr "æ ¹æ®ä¹å®«æ ¼ï¼Œé‡å¤æ ·å¼æ¡†çš„纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚" +msgstr "æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚" #: doc/classes/StyleBoxTexture.xml:132 msgid "" @@ -66876,15 +68096,14 @@ msgid "" "nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may " "be slightly stretched to make the nine-patch texture tile seamlessly." msgstr "" -"æ ¹æ®ä¹å®«æ ¼é‡å¤æ ·å¼æ¡†çš„纹ç†ä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚与 [constant " -"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œçº¹ç†å¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚" +"æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚与 [constant " +"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œå¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸çº¹ç†ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚" #: doc/classes/SurfaceTool.xml:4 msgid "Helper tool to create geometry." msgstr "åˆ›å»ºå‡ ä½•å›¾å½¢çš„è¾…åŠ©å·¥å…·ã€‚" #: doc/classes/SurfaceTool.xml:7 -#, fuzzy msgid "" "The [SurfaceTool] is used to construct a [Mesh] by specifying vertex " "attributes individually. It can be used to construct a [Mesh] from a script. " @@ -66913,9 +68132,9 @@ msgid "" "OpenGL/Face-culling]winding order[/url] for front faces of triangle " "primitive modes." msgstr "" -"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„建 [Mesh]。它å¯ç”¨äºŽä»Žè„šæœ¬æž„å»º " -"[Mesh]。在调用 [method add_vertex] 之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä»¥å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œ" -"è¦æ·»åŠ é¡¶ç‚¹é¢œè‰²å’Œ UV:\n" +"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„é€ [Mesh]。å¯ä»¥ç”¨æ¥ä»Žè„šæœ¬ä¸æž„é€ " +"[Mesh]。在调用[method add_vertex]之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä¹‹å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œæ·»" +"åŠ é¡¶ç‚¹é¢œè‰²å’ŒUV。\n" "[codeblock]\n" "var st = SurfaceTool.new()\n" "st.begin(Mesh.PRIMITIVE_TRIANGLES)\n" @@ -66923,25 +68142,25 @@ msgstr "" "st.add_uv(Vector2(0, 0))\n" "st.add_vertex(Vector3(0, 0, 0))\n" "[/codeblock]\n" -"上é¢çš„ [SurfaceTool] 现在包å«ä¸€ä¸ªä¸‰è§’形的顶点,它具有 UV åæ ‡å’ŒæŒ‡å®šçš„ " -"[Color]。如果在没有调用 [method add_uv] 或 [method add_color] çš„æƒ…å†µä¸‹æ·»åŠ äº†" -"å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œåˆ™å°†ä½¿ç”¨æœ€åŽä¸€ä¸ªå€¼ã€‚\n" -"顶点属性必须在调用[method add_vertex][b]之å‰[/b]ä¼ é€’[b]。如果ä¸è¿™æ ·åšï¼Œå°†åœ¨å°†" -"é¡¶ç‚¹ä¿¡æ¯æäº¤åˆ°ç½‘æ ¼æ—¶ä¼šå¯¼è‡´é”™è¯¯ã€‚\n" -"æ¤å¤–ï¼Œåœ¨æ·»åŠ ç¬¬ä¸€ä¸ªé¡¶ç‚¹ä¹‹å‰ä½¿ç”¨çš„å±žæ€§å†³å®šäº†ç½‘æ ¼çš„æ ¼å¼ã€‚例如,如果仅å‘第一个顶" -"ç‚¹æ·»åŠ UVï¼Œåˆ™æ— æ³•å‘任何åŽç»é¡¶ç‚¹æ·»åŠ é¢œè‰²ã€‚\n" -"å¦è¯·å‚阅 [ArrayMesh]ã€[ImmediateGeometry3D] å’Œ [MeshDataTool] 以了解程åºå‡ 何" -"生æˆã€‚\n" -"[b]注æ„:[/b]Godot使用顺时针[url=https://learnopengl.com/Advanced-OpenGL/" -"Face-culling]ç¼ ç»•é¡ºåº[/url]用于三角形基元模å¼çš„æ£é¢ã€‚" +"上é¢çš„[SurfaceTool]现在包å«äº†ä¸€ä¸ªä¸‰è§’形的顶点,它有UVåæ ‡å’ŒæŒ‡å®šçš„[Color]。如" +"果在没有调用[method add_uv]或[method add_color]çš„æƒ…å†µä¸‹æ·»åŠ å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œé‚£ä¹ˆå°±" +"会使用最åŽçš„值。\n" +"顶点属性必须在调用[method add_vertex][b]之å‰[/b]ä¼ é€’ã€‚å¦‚æžœä¸è¿™æ ·åšï¼Œåœ¨æäº¤é¡¶" +"点信æ¯åˆ°ç½‘æ ¼æ—¶å°†ä¼šå¯¼è‡´é”™è¯¯ã€‚\n" +"æ¤å¤–ï¼Œåœ¨æ·»åŠ ç¬¬ä¸€ä¸ªé¡¶ç‚¹ä¹‹å‰ä½¿ç”¨çš„å±žæ€§å†³å®šäº†ç½‘æ ¼çš„æ ¼å¼ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ åªä¸ºç¬¬ä¸€ä¸ª" +"é¡¶ç‚¹æ·»åŠ UVï¼Œä½ å°±ä¸èƒ½ä¸ºä»»ä½•åŽç»çš„é¡¶ç‚¹æ·»åŠ é¢œè‰²ã€‚\n" +"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[MeshDataTool]ä»¥äº†è§£ç¨‹åºæ€§å‡ 何体的生" +"æˆã€‚\n" +"[b]注æ„:[/b] Godot对三角形基本模å¼çš„æ£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://learnopengl." +"com/Advanced-OpenGL/Face-culling]ç¼ ç»•é¡ºåº[/url]。" #: doc/classes/SurfaceTool.xml:29 -#, fuzzy msgid "" "Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/" "code] must contain 4 integers." msgstr "" -"为下一个è¦ä½¿ç”¨çš„é¡¶ç‚¹æ·»åŠ ä¸€ç»„éª¨éª¼ã€‚ [code]bones[/code] å¿…é¡»åŒ…å« 4 个整数。" +"指定[i]下一个[/i]顶点所使用的骨骼数组。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整" +"数。" #: doc/classes/SurfaceTool.xml:36 msgid "" @@ -66951,6 +68170,10 @@ msgid "" "[b]Note:[/b] The material must have [member SpatialMaterial." "vertex_color_use_as_albedo] enabled for the vertex color to be visible." msgstr "" +"指定[i]下一个[/i]顶点所使用的 [Color]。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½" +"为第一个顶点æäº¤æ¤ä¿¡æ¯ï¼Œæ¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚\n" +"[b]注æ„:[/b]æè´¨å¿…é¡»å¯ç”¨[member SpatialMaterial.vertex_color_use_as_albedo]" +"æ‰èƒ½ä½¿é¡¶ç‚¹é¢œè‰²å¯è§ã€‚" #: doc/classes/SurfaceTool.xml:44 msgid "" @@ -66964,6 +68187,8 @@ msgid "" "to have this information set and you fail to submit it for the first vertex, " "this information may not be used at all." msgstr "" +"指定[i]下一个[/i]顶点所使用的法线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ¤ä¿¡æ¯ï¼Œè€Œä½ 没有为第" +"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— 法使用æ¤ä¿¡æ¯ã€‚" #: doc/classes/SurfaceTool.xml:58 msgid "" @@ -66980,6 +68205,8 @@ msgid "" "to have this information set and you fail to submit it for the first vertex, " "this information may not be used at all." msgstr "" +"指定[i]下一个[/i]顶点所使用的切线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ¤ä¿¡æ¯ï¼Œè€Œä½ 没有为第" +"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— 法使用æ¤ä¿¡æ¯ã€‚" #: doc/classes/SurfaceTool.xml:77 msgid "" @@ -66995,6 +68222,8 @@ msgid "" "every vertex needs to have this information set and you fail to submit it " "for the first vertex, this information may not be used at all." msgstr "" +"指定[i]下一个[/i]顶点所使用的 UV åæ ‡ã€‚如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½" +"为第一个顶点æäº¤æ¤ä¿¡æ¯ï¼Œæ¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚" #: doc/classes/SurfaceTool.xml:92 msgid "" @@ -67002,6 +68231,8 @@ msgid "" "i] vertex. If every vertex needs to have this information set and you fail " "to submit it for the first vertex, this information may not be used at all." msgstr "" +"指定å¯é€‰çš„第二组UVåæ ‡ï¼Œç”¨äºŽ[i]next[/i]顶点。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®è¿™ä¸ªä¿¡æ¯ï¼Œ" +"è€Œä½ æ²¡æœ‰ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤è¿™ä¸ªä¿¡æ¯ï¼Œæ¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚" #: doc/classes/SurfaceTool.xml:99 msgid "" @@ -67016,14 +68247,22 @@ msgid "" "set and you fail to submit it for the first vertex, this information may not " "be used at all." msgstr "" +"指定[i]下一个[/i]顶点所使用的æƒé‡å€¼ã€‚ [code]weights[/code] å¿…é¡»åŒ…å« 4 个值。" +"如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤æ¤ä¿¡æ¯ï¼Œæ¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬" +"å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." -msgstr "将给定 [Mesh] 表é¢çš„é¡¶ç‚¹é™„åŠ åˆ°å…·æœ‰æŒ‡å®š [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。" +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." +msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." @@ -67031,12 +68270,11 @@ msgstr "" "åœ¨æ·»åŠ ä»»ä½•é¡¶ç‚¹ä¹‹å‰è¢«è°ƒç”¨ã€‚æŽ¥æ”¶åŽŸå§‹ç±»åž‹ä½œä¸ºå‚æ•°ï¼ˆä¾‹å¦‚:原始三角形[constant " "Mesh.PRIMITIVE_TRIANGLES])。" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "清除到目å‰ä¸ºæ¢ä¼ 入表é¢å·¥å…·(surface tool)的所有信æ¯ã€‚" -#: doc/classes/SurfaceTool.xml:136 -#, fuzzy +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -67047,11 +68285,13 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" "ä»Žä¼ å…¥çš„å½“å‰ä¿¡æ¯è¿”å›žæž„é€ çš„ [ArrayMesh]。如果现有的 [ArrayMesh] ä½œä¸ºå‚æ•°ä¼ 入," -"则会å‘现有的 [ArrayMesh] æ·»åŠ é¢å¤–的表é¢ã€‚\n" -"é»˜è®¤æ ‡å¿—æ˜¯ [constant Mesh.ARRAY_COMPRESS_DEFAULT]ã€‚æœ‰å…³å…¶ä»–æ ‡å¿—ï¼Œè¯·å‚阅 " -"[enum Mesh.ArrayFormat] ä¸çš„ [code]ARRAY_COMPRESS_*[/code] 常é‡ã€‚" +"则会å‘现有的 [ArrayMesh] æ·»åŠ é¢å¤–çš„é¢ã€‚\n" +"如果å¯ç”¨åŽ‹ç¼©ï¼Œåˆ™é»˜è®¤æ ‡å¿—ä¸º [constant Mesh.ARRAY_COMPRESS_DEFAULT]。如果ç¦ç”¨åŽ‹" +"ç¼©ï¼Œåˆ™é»˜è®¤æ ‡å¿—ä¸º [constant Mesh.ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]。有关" +"å…¶ä»–æ ‡å¿—ï¼Œå‚阅 [enum Mesh.ArrayFormat] ä¸çš„ [code]ARRAY_COMPRESS_*[/code] 常" +"é‡ã€‚" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " @@ -67060,11 +68300,11 @@ msgstr "" "å°†æ•°æ®æäº¤ç»™[method ArrayMesh.add_surface_from_arrays]ä½¿ç”¨çš„ç›¸åŒæ ¼å¼ã€‚è¿™æ ·ä½ " "å°±å¯ä»¥ä½¿ç”¨[ArrayMesh]çš„API接å£è¿›ä¸€æ¥å¤„ç†ç½‘æ ¼æ•°æ®ã€‚" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "ä»ŽçŽ°æœ‰çš„ç½‘æ ¼ [Mesh] 创建一个顶点数组。" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." @@ -67072,11 +68312,11 @@ msgstr "" "从现有 [Mesh] 的指定混åˆå½¢çŠ¶åˆ›å»ºä¸€ä¸ªé¡¶ç‚¹æ•°ç»„ã€‚è¿™å¯ç”¨äºŽä»Žæ··åˆå½¢çж䏿å–特定姿" "势。" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "通过扩展顶点数组移除索引数组。" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -67087,38 +68327,45 @@ msgid "" "[b]Note:[/b] [method generate_normals] only works if the primitive type to " "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" +"ä»Žé¡¶ç‚¹ç”Ÿæˆæ³•çº¿ï¼Œå› æ¤æ‚¨ä¸å¿…手动执行。如果 [code]flip[/code] 为 [code]true[/" +"code],则生æˆçš„æ³•线将被å转。 [method generate_normals] 应在生æˆå‡ 何体[i]之åŽ" +"[/i] 调用,在[i]之å‰[/i]使用 [method commit] 或 [method commit_to_arrays] æ" +"äº¤ç½‘æ ¼ã€‚ä¸ºäº†æ£ç¡®æ˜¾ç¤ºæ³•线贴图表é¢ï¼Œæ‚¨è¿˜å¿…须使用 [method generate_tangents] 生" +"æˆåˆ‡çº¿ã€‚\n" +"[b]注æ„:[/b] [method generate_normals] 仅当基本类型设置为 [constant Mesh." +"PRIMITIVE_TRIANGLES] æ—¶æ‰æœ‰æ•ˆã€‚" -#: doc/classes/SurfaceTool.xml:180 -#, fuzzy +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." -msgstr "为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆä¸€ä¸ªåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹éƒ½å·²ç»è®¾ç½®äº† UV 和法线。" +msgstr "" +"为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹å·²ç»è®¾ç½®äº† UV 和法线,å‚阅 [method " +"generate_normals]。" -#: doc/classes/SurfaceTool.xml:186 -#, fuzzy +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." -msgstr "通过创建索引阵列(é¿å…é‡å¤ä½¿ç”¨é¡¶ç‚¹ï¼‰æ”¶ç¼©é¡¶ç‚¹é˜µåˆ—。" +msgstr "通过创建索引数组æ¥ç¼©å°é¡¶ç‚¹æ•°ç»„。这å¯ä»¥é¿å…顶点é‡å¤è€Œæé«˜æ€§èƒ½ã€‚" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "设置è¦ç”±æ‚¨æ£åœ¨æž„建的 [Mesh] 使用的 [Material]。" #: doc/classes/TabContainer.xml:4 msgid "Tabbed container." -msgstr "æ ‡ç¾å®¹å™¨ã€‚" +msgstr "选项å¡å®¹å™¨ã€‚" #: doc/classes/TabContainer.xml:7 -#, fuzzy msgid "" "Sets the active tab's [code]visible[/code] property to the value [code]true[/" "code]. Sets all other children's to [code]false[/code].\n" "Ignores non-[Control] children." msgstr "" -"当剿 ‡ç¾ç´¢å¼•。设置åŽï¼Œæ¤ç´¢å¼•çš„ [Control] 节点的 [code]visible[/code] 属性设置" -"为 [code]true[/code],其他所有设置为 [code]false[/code]。" +"将活动选项å¡çš„ [code]visible[/code] 属性设为 [code]true[/code],其它所有å节" +"点则设为 [code]false[/code]。\n" +"ä¼šå¿½ç•¥éž [Control] å节点。" #: doc/classes/TabContainer.xml:16 msgid "Returns the child [Control] node located at the active tab index." @@ -67132,10 +68379,13 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"如果已通过 [method set_popup] 设置 [Popup] 节点实例,则返回该实例。\n" +"[b]è¦å‘Šï¼š[/b] 该节点为必è¦çš„内部节点,将其移除或释放å¯èƒ½é€ æˆå´©æºƒã€‚å¦‚æžœä½ å¸Œæœ›" +"将其或其å节点éšè—,请使用对应节点的 [member CanvasItem.visible] 属性。" #: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36 msgid "Returns the previously active tab index." -msgstr "返回以å‰å·²æ¿€æ´»çš„选项å¡ç´¢å¼•。" +msgstr "返回上一个活动选项å¡çš„索引。" #: doc/classes/TabContainer.xml:36 msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]." @@ -67153,20 +68403,18 @@ msgstr "" "如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/TabContainer.xml:56 -#, fuzzy msgid "" "Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden." msgstr "" -"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。" +"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«éšè—,则返回 [code]true[/code]。" #: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62 -#, fuzzy msgid "" "Returns the [Texture] for the tab at index [code]tab_idx[/code] or " "[code]null[/code] if the tab has no [Texture]." msgstr "" -"å¦‚æžœé€‰é¡¹å¡æ²¡æœ‰ [Texture2D],则返回索引 [code]tab_idx[/code] 或 [code]null[/" -"code] 处的选项å¡çš„ [Texture2D]。" +"返回索引 [code]tab_idx[/code] 处选项å¡çš„ [Texture]ï¼Œå¦‚æžœè¯¥é€‰é¡¹å¡æ²¡æœ‰ " +"[Texture] çš„è¯åˆ™è¿”回 [code]null[/code]。" #: doc/classes/TabContainer.xml:70 msgid "" @@ -67174,6 +68422,8 @@ msgid "" "Returns [code]-1[/code] if the point is outside the control boundaries or if " "there's no tab at the queried position." msgstr "" +"返回ä½äºŽæœ¬åœ°åæ ‡ç‚¹ [code]point[/code] 处的选项å¡çš„索引。如果该点ä½äºŽæŽ§ä»¶èŒƒå›´" +"外或者请求ä½ç½®æ²¡æœ‰é€‰é¡¹å¡ï¼Œåˆ™è¿”回 [code]-1[/code]。" #: doc/classes/TabContainer.xml:77 msgid "" @@ -67197,52 +68447,49 @@ msgstr "" "å›¾æ ‡ã€‚å•击它会展开 [Popup] 节点。" #: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118 -#, fuzzy msgid "" "If [code]disabled[/code] is [code]true[/code], disables the tab at index " "[code]tab_idx[/code], making it non-interactable." msgstr "" -"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。" +"如果 [code]disabled[/code] 是 [code]true[/code],则ç¦ç”¨ç´¢å¼• [code]tab_idx[/" +"code] 处的选项å¡ï¼Œä½¿å…¶ä¸å¯äº¤äº’。" #: doc/classes/TabContainer.xml:106 -#, fuzzy msgid "" "If [code]hidden[/code] is [code]true[/code], hides the tab at index " "[code]tab_idx[/code], making it disappear from the tab area." msgstr "" -"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。" +"如果 [code]hidden[/code] 为 [code]true[/code],éšè—ä½äºŽç´¢å¼• [code]tab_idx[/" +"code] 的选项å¡ï¼Œè®©å®ƒä»Žé€‰é¡¹å¡åŒºåŸŸæ¶ˆå¤±ã€‚" #: doc/classes/TabContainer.xml:114 msgid "Sets an icon for the tab at index [code]tab_idx[/code]." msgstr "为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®å›¾æ ‡ã€‚" #: doc/classes/TabContainer.xml:122 -#, fuzzy msgid "" "Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default " "to the name of the indexed child node." msgstr "" -"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚æ ‡ç¾æ ‡é¢˜é»˜è®¤ä¸ºç´¢å¼•å节点的å" -"称,但这å¯ä»¥ç”¨ [method set_tab_title] 覆盖。" +"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚选项塿 ‡é¢˜é»˜è®¤ä¸ºç´¢å¼•å节点的" +"å称。" #: doc/classes/TabContainer.xml:129 -#, fuzzy msgid "" "Defines rearrange group id, choose for each [TabContainer] the same value to " "enable tab drag between [TabContainer]. Enable drag with [member " "drag_to_rearrange_enabled]." msgstr "" -"å®šä¹‰é‡æ–°æŽ’列组id,为æ¯ä¸ª[TabContainer]选择相åŒçš„值以å¯ç”¨[TabContainer]之间的" -"æ ‡ç¾æ‹–动。使用 [code]set_drag_to_rearrange_enabled(true)[/code] å¯ç”¨æ‹–动。" +"å®šä¹‰é‡æŽ’ç»„çš„ç¼–å·ã€‚为ä¸åŒ [TabContainer] 设置相åŒçš„值,å¯ä»¥å…许选项å¡åœ¨è¿™äº› " +"[TabContainer] 之间拖放。通过 [member drag_to_rearrange_enabled] å¯ç”¨æ‹–放。" #: doc/classes/TabContainer.xml:135 -#, fuzzy msgid "" "If [code]true[/code], all tabs are drawn in front of the panel. If " "[code]false[/code], inactive tabs are drawn behind the panel." msgstr "" -"如果 [code]true[/code],选项å¡å¯è§ã€‚如果 [code]false[/code],选项å¡çš„å†…å®¹å’Œæ ‡" -"题被éšè—。" +"如果为 [code]true[/code],所有选项å¡éƒ½ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹å‰ã€‚如果为 " +"[code]false[/code],未激活的选项å¡ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹åŽã€‚" #: doc/classes/TabContainer.xml:138 msgid "" @@ -67741,6 +68988,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回æ¤[TextEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[TextEdit]的时候" +"显示。\n" +"[b]è¦å‘Šï¼š[/b] 这是一个必è¦çš„å†…éƒ¨èŠ‚ç‚¹ï¼Œåˆ é™¤å’Œé‡Šæ”¾å®ƒå¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚å¦‚æžœä½ æƒ³éš" +"è—它或它的任何å节点,请使用其的 [member CanvasItem.visible] 属性。" #: doc/classes/TextEdit.xml:156 msgid "Returns the selection begin column." @@ -68224,7 +69475,7 @@ msgid "" msgstr "" "纹ç†çš„ä½œç”¨æ˜¯åœ¨è§†é¢‘ç¡¬ä»¶ä¸æ³¨å†Œä¸€ä¸ªå›¾åƒï¼Œç„¶åŽå¯ä»¥åœ¨3D模型或2D[Sprite]或" "GUI[Control]ä¸ä½¿ç”¨ã€‚\n" -"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸åŠ è½½æ¥åˆ›å»ºçš„。å‚阅[方法 @GDScript.load]。\n" +"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸åŠ è½½æ¥åˆ›å»ºçš„。å‚阅[method @GDScript.load]。\n" "[Texture]是其他资æºçš„基础。它ä¸èƒ½è¢«ç›´æŽ¥ä½¿ç”¨ã€‚\n" "[b]注æ„:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§çš„纹ç†å°ºå¯¸æ˜¯16384×16384åƒç´ 。较大的纹ç†" "å¯èƒ½æ— 法导入。" @@ -68306,10 +69557,12 @@ msgid "" "[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support " "repetition." msgstr "" +"é‡å¤çº¹ç†ï¼ˆè€Œä¸æ˜¯é™åˆ¶åˆ°è¾¹ï¼‰ã€‚\n" +"[b]注æ„:[/b] 使用[AtlasTexture]æ—¶å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚" #: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212 msgid "Uses a magnifying filter, to enable smooth zooming in of the texture." -msgstr "" +msgstr "使用放大过滤器,以实现纹ç†çš„平滑放大。" #: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88 #: doc/classes/VisualServer.xml:3215 @@ -68318,11 +69571,12 @@ msgid "" "texture with different aspect ratios.\n" "This results in better-looking textures when viewed from oblique angles." msgstr "" +"使用å„å‘异性的mipmap过滤。生æˆå…·æœ‰ä¸åŒé•¿å®½æ¯”çš„åŒä¸€çº¹ç†çš„较å°ç‰ˆæœ¬ã€‚\n" +"当从斜角观看时,这会产生更好看的纹ç†ã€‚" #: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219 -#, fuzzy msgid "Converts the texture to the sRGB color space." -msgstr "将原始数æ®ä»Ž sRGB 色彩空间转æ¢ä¸ºçº¿æ€§æ¯”例。" +msgstr "将纹ç†è½¬æ¢ä¸º sRGB 颜色空间。" #: doc/classes/Texture.xml:109 msgid "" @@ -68330,21 +69584,21 @@ msgid "" "[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support " "repetition." msgstr "" +"é‡å¤çº¹ç†çš„交替部分,并对其进行镜åƒã€‚\n" +"[b]注æ„:[/b] 在使用[AtlasTexture]æ—¶è¢«å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚" #: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225 -#, fuzzy msgid "Texture is a video surface." -msgstr "设置给定曲é¢çš„å称。" +msgstr "çº¹ç†æ˜¯è§†é¢‘表é¢ã€‚" #: doc/classes/Texture3D.xml:4 -#, fuzzy msgid "Texture with 3 dimensions." -msgstr "返回ä½å›¾çš„尺寸。" +msgstr "具有 3 个维度的纹ç†ã€‚" #: doc/classes/Texture3D.xml:7 msgid "" "Texture3D is a 3-dimensional texture that has a width, height, and depth." -msgstr "" +msgstr "Texture3D 是具有宽度ã€é«˜åº¦å’Œæ·±åº¦çš„ 3 维纹ç†ã€‚" #: doc/classes/Texture3D.xml:20 msgid "" @@ -68353,11 +69607,13 @@ msgid "" "code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/" "code] options." msgstr "" +"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建" +"Texture3D。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum " +"TextureLayered.Flags]枚举器的[code]flags[/code]选项。" #: doc/classes/TextureArray.xml:4 -#, fuzzy msgid "Array of textures stored in a single primitive." -msgstr "在å•个帧ä¸ç»˜åˆ¶çš„顶点数。" +msgstr "å˜å‚¨åœ¨å•个基元ä¸çš„çº¹ç†æ•°ç»„。" #: doc/classes/TextureArray.xml:7 msgid "" @@ -68380,6 +69636,22 @@ msgid "" "Set the integer uniform \"index\" to show a particular part of the texture " "as defined by the Horizontal and Vertical Slices in the importer." msgstr "" +"[TextureArray]在å•个[Texture]基本å•å…ƒä¸å˜å‚¨ä¸€ä¸ª[Image]æ•°ç»„ã€‚çº¹ç†æ•°ç»„çš„æ¯ä¸€å±‚" +"都有自己的mipmap链。这使得它æˆä¸ºçº¹ç†å›¾é›†å¾ˆå¥½çš„æ›¿ä»£å“。\n" +"[TextureArray]必须使用ç€è‰²å™¨æ¥æ˜¾ç¤ºã€‚åœ¨æŠŠä½ çš„æ–‡ä»¶å¯¼å…¥ä¸º[TextureArray]并设置适" +"当的水平和垂直切片åŽï¼Œé€šè¿‡æŠŠå®ƒè®¾ç½®ä¸ºç€è‰²å™¨uniformæ¥æ˜¾ç¤ºå®ƒï¼Œä¾‹å¦‚。\n" +"[codeblock]\n" +"shader_type canvas_item;\n" +"\n" +"uniform sampler2DArray tex;\n" +"uniform int index;\n" +"\n" +"void fragment() {\n" +" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n" +"}\n" +"[/codeblock]\n" +"设置整数uniform \"index\",以显示由importerä¸çš„Horizontalå’ŒVertical Slices定" +"义的纹ç†çš„特定部分。" #: doc/classes/TextureArray.xml:32 msgid "" @@ -68388,6 +69660,9 @@ msgid "" "code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/" "code] options." msgstr "" +"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建" +"TextureArray。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum " +"TextureLayered.Flags]枚举器的[code]flags[/code]选项。" #: doc/classes/TextureButton.xml:4 msgid "" @@ -68510,7 +69785,6 @@ msgid "Base class for 3D texture types." msgstr "3D纹ç†ç±»åž‹çš„基类。" #: doc/classes/TextureLayered.xml:7 -#, fuzzy msgid "" "Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but " "contains all the functions necessary for accessing and using [Texture3D] and " @@ -68518,16 +69792,16 @@ msgid "" "layer specifies the depth or Z-index, they can be treated as a bunch of 2D " "slices. Similarly, for [TextureArray]s, the layer specifies the array layer." msgstr "" -"[Texture2DArray]ã€[Cubemap]å’Œ[CubemapArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«äº†æ‰€æœ‰" -"访问派生资æºç±»åž‹çš„å¿…è¦åŠŸèƒ½ã€‚æ•°æ®æŒ‰å±‚设置。对于多层[Texture2DArray]指定数组" -"层。" +"是[Texture3D]å’Œ[TextureArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«è®¿é—®å’Œä½¿ç”¨" +"[Texture3D]å’Œ[TextureArray]的所有必è¦åŠŸèƒ½ã€‚æ•°æ®æ˜¯ä»¥æ¯å±‚为å•ä½è®¾ç½®çš„。对于" +"[Texture3D],层指定了深度或Z-index,它们å¯ä»¥è¢«è§†ä¸ºä¸€å †äºŒç»´åˆ‡ç‰‡ã€‚åŒæ ·åœ°ï¼Œå¯¹äºŽ" +"[TextureArray],层指定了数组层。" #: doc/classes/TextureLayered.xml:15 -#, fuzzy msgid "" "Returns the depth of the texture. Depth is the 3rd dimension (typically Z-" "axis)." -msgstr "返回纹ç†çš„宽度。宽度通常由X轴表示。" +msgstr "返回纹ç†çš„æ·±åº¦ã€‚深度是第三个维度(通常是 Z 轴)。" #: doc/classes/TextureLayered.xml:21 msgid "" @@ -68559,13 +69833,15 @@ msgid "" "and [code]y_offset[/code] determine where the [Image] is \"stamped\" over " "the texture. The [code]image[/code] must fit within the texture." msgstr "" +"通过使用指定的[code]image[/code]的数æ®è¦†ç›–æ¥éƒ¨åˆ†è®¾ç½®æŒ‡å®šçš„[code]layer[/code]" +"的数æ®ã€‚ [code]x_offset[/code] å’Œ [code]y_offset[/code] 确定 [Image] 在纹ç†ä¸Š" +"\"stamped\" æ ‡è®°çš„ä½ç½®ã€‚ [code]image[/code] 必须适åˆçº¹ç†ã€‚" #: doc/classes/TextureLayered.xml:59 -#, fuzzy msgid "" "Sets the data for the specified layer. Data takes the form of a 2-" "dimensional [Image] resource." -msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。" +msgstr "设置指定图层的数æ®ã€‚æ•°æ®çš„形弿˜¯äºŒç»´çš„[Image]资æºã€‚" #: doc/classes/TextureLayered.xml:65 msgid "Returns a dictionary with all the data used by this texture." @@ -68876,7 +70152,8 @@ msgstr "" #: doc/classes/Theme.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/gui_skinning.html" #: doc/classes/Theme.xml:17 msgid "Clears all values on the theme." @@ -69359,7 +70636,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/thread_safe_apis." +"html" #: doc/classes/Thread.xml:19 msgid "" @@ -69376,6 +70654,9 @@ msgid "" "wait_to_finish]. For checking if a [Thread] is still executing its task, use " "[method is_alive]." msgstr "" +"å¦‚æžœæ¤ [Thread] å·²å¯åŠ¨ï¼Œåˆ™è¿”å›ž [code]true[/code]。一旦开始,这将返回 " +"[code]true[/code] ,直到它使用 [method wait_to_finish] åŠ å…¥ã€‚è¦æ£€æŸ¥ [Thread] " +"是å¦ä»åœ¨æ‰§è¡Œå…¶ä»»åŠ¡ï¼Œè¯·ä½¿ç”¨ [method is_alive]。" #: doc/classes/Thread.xml:31 msgid "" @@ -69384,6 +70665,9 @@ msgid "" "blocking the calling thread.\n" "To check if a [Thread] is joinable, use [method is_active]." msgstr "" +"当本 [Thread] 线程æ£åœ¨ç‰å¾…时,返回 [code]true[/code]。在需è¦ç¡®å®šè°ƒç”¨ [method " +"wait_to_finish] 是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹æ—¶éžå¸¸æœ‰ç”¨ã€‚\n" +"è¦æ£€æŸ¥ [Thread] 线程是å¦å¯åˆå¹¶ï¼Œè¯·ä½¿ç”¨ [method is_active]。" #: doc/classes/Thread.xml:42 msgid "" @@ -69401,7 +70685,6 @@ msgstr "" "æˆåŠŸæ—¶è¿”å›ž[constant OK],失败时返回[constant ERR_CANT_CREATE] 。" #: doc/classes/Thread.xml:49 -#, fuzzy msgid "" "Joins the [Thread] and waits for it to finish. Returns the output of the " "method passed to [method start].\n" @@ -69413,11 +70696,13 @@ msgid "" "[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you " "want to use it again you will have to create a new instance of it." msgstr "" -"åŠ å…¥ [Thread] å¹¶ç‰å¾…它完æˆã€‚返回方法调用返回的内容。\n" -"åº”è¯¥åœ¨æ‚¨æƒ³è¦æ£€ç´¢ä»Ž [Thread] è°ƒç”¨çš„æ–¹æ³•è¿”å›žçš„å€¼æ—¶ä½¿ç”¨ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« " -"[Thread] 的实例之å‰ä½¿ç”¨ã€‚\n" -"[b]注:[/b][Thread]连接完æˆåŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的新实" -"例。" +"åˆå¹¶ [Thread] å¹¶ç‰å¾…它完æˆã€‚è¿”å›žä¼ é€’ç»™ [method start] 的方法的输出。\n" +"åº”åœ¨ä¸¤ç§æƒ…况下使用:想è¦èŽ·å– [Thread] è°ƒç”¨çš„æ–¹æ³•æ‰€è¿”å›žçš„å€¼ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« " +"[Thread] 的实例之å‰ã€‚\n" +"如果想确定调用本方法是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹ï¼Œè¯·æ£€æŸ¥ [method is_alive] 是å¦ä¸º " +"[code]false[/code]。\n" +"[b]注æ„:[/b] [Thread] 在完æˆåˆå¹¶åŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的" +"新实例。" #: doc/classes/Thread.xml:58 msgid "A thread running with lower priority than normally." @@ -69453,7 +70738,8 @@ msgstr "" #: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/using_tilemaps.html" #: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14 msgid "https://godotengine.org/asset-library/asset/111" @@ -69721,8 +71007,8 @@ msgid "" "documentation for more information." msgstr "" "图å—åœ°å›¾ä¸æ‰€æœ‰ç¢°æ’žå™¨çš„碰撞层。更多信æ¯è¯·å‚阅文档ä¸çš„[url=https://docs." -"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-" -"layers-and-masks]碰撞层和掩ç [/url]。" +"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction." +"html#collision-layers-and-masks]碰撞层和掩ç [/url]。" #: doc/classes/TileMap.xml:252 msgid "" @@ -69732,8 +71018,8 @@ msgid "" "documentation for more information." msgstr "" "图å—åœ°å›¾ä¸æ‰€æœ‰ç¢°æ’žå™¨çš„碰撞掩ç 。更多信æ¯è¯·å‚阅文档ä¸çš„[url=https://docs." -"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-" -"layers-and-masks]碰撞层和掩ç [/url]。" +"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction." +"html#collision-layers-and-masks]碰撞层和掩ç [/url]。" #: doc/classes/TileMap.xml:255 msgid "" @@ -70310,6 +71596,12 @@ msgid "" "rendered framerate. For very low wait times, it is recommended to use a " "process loop in a script instead of using a Timer node." msgstr "" +"ç‰å¾…的秒数。\n" +"[b]注æ„:[/b] è®¡æ—¶å™¨åœ¨ä¸€ä¸ªæ¸²æŸ“å¸§ä¸æœ€å¤šåªèƒ½è§¦å‘一次(如果 [member " +"process_mode] 为 [constant TIMER_PROCESS_PHYSICS],则是在一个物ç†å¸§ä¸æœ€å¤šä¸€" +"次)。也就是说,éžå¸¸ä½Žçš„ç‰å¾…时间(å°äºŽ 0.05 ç§’ï¼‰ä¼šæ ¹æ®æ¸²æŸ“帧率的ä¸åŒè€Œäº§ç”Ÿä¸" +"åŒçš„行为。如果ç‰å¾…æ—¶é—´éžå¸¸å°ï¼Œå»ºè®®åœ¨è„šæœ¬ä¸ä½¿ç”¨ process 循环,ä¸è¦ç”¨ Timer 节" +"点。" #: doc/classes/Timer.xml:67 msgid "" @@ -70372,6 +71664,8 @@ msgid "" "text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"èšç„¦ [ToolButton] 时所使用的文本 [Color] é¢œè‰²ã€‚ä»…æ›¿æ¢æ£å¸¸æ–‡å—颜色。ç¦ç”¨ã€æ‚¬" +"åœã€ä»¥åŠæŒ‰ä¸‹çжæ€çš„优先级比该颜色高。" #: doc/classes/ToolButton.xml:42 msgid "Text [Color] used when the [ToolButton] is being hovered." @@ -70805,12 +72099,12 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games." "html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games." -"html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/" +"internationalizing_games.html" #: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11 msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html" +msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/locales.html" #: doc/classes/Translation.xml:18 msgid "Virtual method to override [method get_message]." @@ -73317,7 +74611,8 @@ msgstr "" #: doc/classes/Variant.xml:53 msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html" -msgstr "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/development/cpp/variant_class.html" #: doc/classes/VBoxContainer.xml:4 msgid "Vertical box container." @@ -74413,7 +75708,8 @@ msgstr "" #: doc/classes/Viewport.xml:16 msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html" -msgstr "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html" +msgstr "" +"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/index.html" #: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12 msgid "https://godotengine.org/asset-library/asset/128" @@ -75400,8 +76696,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/" "index.html" msgstr "" -"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/" -"index.html" +"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/" +"visual_script/index.html" #: modules/visual_script/doc_classes/VisualScript.xml:19 msgid "Add a custom signal with the specified name to the VisualScript." @@ -77412,7 +78708,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/" +"using_servers.html" #: doc/classes/VisualServer.xml:28 msgid "Sets images to be rendered in the window margin." @@ -80933,7 +82230,8 @@ msgstr "" msgid "" "https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/visual_shaders." +"html" #: doc/classes/VisualShaderNode.xml:16 msgid "" @@ -81505,7 +82803,7 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/" "visual_shader_plugins.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/" +"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/" "visual_shader_plugins.html" #: doc/classes/VisualShaderNodeCustom.xml:22 @@ -81935,8 +83233,8 @@ msgid "" "https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/" "index.html" msgstr "" -"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/" -"index.html" +"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/" +"shading_reference/index.html" #: doc/classes/VisualShaderNodeInput.xml:20 msgid "" @@ -83596,14 +84894,13 @@ msgid "A class representing a specific WebSocket connection." msgstr "表示特定WebSocket连接的类。" #: modules/websocket/doc_classes/WebSocketPeer.xml:7 -#, fuzzy msgid "" "This class represents a specific WebSocket connection, allowing you to do " "lower level operations with it.\n" "You can choose to write to the socket in binary or text mode, and you can " "recognize the mode used for writing by the other peer." msgstr "" -"该类表示特定的WebSocketè¿žæŽ¥ï¼Œä½ å¯ä»¥ç”¨å®ƒåšä½Žçº§åˆ«çš„æ“ä½œã€‚\n" +"该类表示特定的 WebSocket è¿žæŽ¥ï¼Œä½ å¯ä»¥ç”¨å®ƒæ‰§è¡Œåº•层æ“作。\n" "å¯ä»¥é€‰æ‹©ä»¥äºŒè¿›åˆ¶æˆ–文本模å¼å†™å…¥å¥—接å—,也å¯ä»¥è¯†åˆ«å¦ä¸€ä¸ªå¯¹ç‰ä½“用于写入的模å¼ã€‚" #: modules/websocket/doc_classes/WebSocketPeer.xml:18 @@ -84394,6 +85691,9 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"返回关é—çš„ [TextureButton]。\n" +"[b]è¦å‘Šï¼š[/b] è¿™æ˜¯ä¸€ä¸ªå¿…éœ€çš„å†…éƒ¨èŠ‚ç‚¹ï¼Œåˆ é™¤å’Œé‡Šæ”¾å®ƒå¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望" +"éšè—它或其任何å项,请使用它们的 [member CanvasItem.visible] 属性。" #: doc/classes/WindowDialog.xml:22 msgid "If [code]true[/code], the user can resize the window." @@ -84749,6 +86049,39 @@ msgid "" "If [code]true[/code], child nodes are sorted, otherwise sorting is disabled." msgstr "如果为[code]true[/code],则对å节点进行排åºï¼Œå¦åˆ™ç¦ç”¨æŽ’åºã€‚" +#~ msgid "Returns this [AABB] expanded to include a given point." +#~ msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。" + +#~ msgid "" +#~ "Applies morphological dilation to the bitmap. The first argument is the " +#~ "dilation amount, Rect2 is the area where the dilation will be applied." +#~ msgstr "在ä½å›¾ä¸Šåº”ç”¨å½¢æ€æ‰©å±•ã€‚ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯æ‰©å±•é‡ï¼ŒRect2是è¦åº”用扩展的区域。" + +#~ msgid "Returns the [Physics2DDirectBodyState] of the body." +#~ msgstr "返回物体的[Physics2DDirectBodyState]。" + +#~ msgid "Returns the [PhysicsDirectBodyState] of the body." +#~ msgstr "返回物体的[PhysicsDirectBodyState]。" + +#~ msgid "" +#~ "Output latency in milliseconds for audio. Lower values will result in " +#~ "lower audio latency at the cost of increased CPU usage. Low values may " +#~ "result in audible cracking on slower hardware." +#~ msgstr "" +#~ "音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPU使用率增" +#~ "åŠ ã€‚è¾ƒä½Žçš„å€¼å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„å£°éŸ³ç ´è£‚ã€‚" + +#~ msgid "Returns this [Rect2] expanded to include a given point." +#~ msgstr "返回包å«ç»™å®šç‚¹çš„æ¤ [Rect2] 的扩展。" + +#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#~ msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。" + +#~ msgid "" +#~ "Append vertices from a given [Mesh] surface onto the current vertex array " +#~ "with specified [Transform]." +#~ msgstr "将给定 [Mesh] 表é¢çš„é¡¶ç‚¹é™„åŠ åˆ°å…·æœ‰æŒ‡å®š [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。" + #~ msgid "" #~ "Returns a list of intersecting [Area]s. For performance reasons " #~ "(collisions are all processed at the same time) this list is modified " diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po index 1621b1915b..34ebd06914 100644 --- a/doc/translations/zh_TW.po +++ b/doc/translations/zh_TW.po @@ -3696,112 +3696,121 @@ msgid "" msgstr "" #: doc/classes/AABB.xml:42 -msgid "Returns this [AABB] expanded to include a given point." +msgid "" +"Returns a copy of this [AABB] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2, 0), size (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and " +"Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"[/codeblock]" msgstr "" -#: doc/classes/AABB.xml:48 +#: doc/classes/AABB.xml:55 msgid "Returns the volume of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:55 +#: doc/classes/AABB.xml:62 msgid "Gets the position of the 8 endpoints of the [AABB] in space." msgstr "" -#: doc/classes/AABB.xml:61 +#: doc/classes/AABB.xml:68 msgid "Returns the normalized longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:67 +#: doc/classes/AABB.xml:74 msgid "" "Returns the index of the longest axis of the [AABB] (according to " "[Vector3]'s [code]AXIS_*[/code] constants)." msgstr "" -#: doc/classes/AABB.xml:73 +#: doc/classes/AABB.xml:80 msgid "Returns the scalar length of the longest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:79 +#: doc/classes/AABB.xml:86 msgid "Returns the normalized shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:85 +#: doc/classes/AABB.xml:92 msgid "" "Returns the index of the shortest axis of the [AABB] (according to " "[Vector3]::AXIS* enum)." msgstr "" -#: doc/classes/AABB.xml:91 +#: doc/classes/AABB.xml:98 msgid "Returns the scalar length of the shortest axis of the [AABB]." msgstr "" -#: doc/classes/AABB.xml:98 +#: doc/classes/AABB.xml:105 msgid "" "Returns the support point in a given direction. This is useful for collision " "detection algorithms." msgstr "" -#: doc/classes/AABB.xml:105 +#: doc/classes/AABB.xml:112 msgid "" "Returns a copy of the [AABB] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/AABB.xml:111 +#: doc/classes/AABB.xml:118 msgid "Returns [code]true[/code] if the [AABB] is flat or empty." msgstr "" -#: doc/classes/AABB.xml:117 +#: doc/classes/AABB.xml:124 msgid "Returns [code]true[/code] if the [AABB] is empty." msgstr "" -#: doc/classes/AABB.xml:124 +#: doc/classes/AABB.xml:131 msgid "Returns [code]true[/code] if the [AABB] contains a point." msgstr "" -#: doc/classes/AABB.xml:131 +#: doc/classes/AABB.xml:138 msgid "" "Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is " "returned on failure." msgstr "" -#: doc/classes/AABB.xml:138 +#: doc/classes/AABB.xml:145 msgid "Returns [code]true[/code] if the [AABB] overlaps with another." msgstr "" -#: doc/classes/AABB.xml:145 +#: doc/classes/AABB.xml:152 msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane." msgstr "" -#: doc/classes/AABB.xml:153 +#: doc/classes/AABB.xml:160 msgid "" "Returns [code]true[/code] if the [AABB] intersects the line segment between " "[code]from[/code] and [code]to[/code]." msgstr "" -#: doc/classes/AABB.xml:160 +#: doc/classes/AABB.xml:167 msgid "" "Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are " "approximately equal, by calling [method @GDScript.is_equal_approx] on each " "component." msgstr "" -#: doc/classes/AABB.xml:167 +#: doc/classes/AABB.xml:174 msgid "" "Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]." msgstr "" -#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132 +#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140 msgid "" "Ending corner. This is calculated as [code]position + size[/code]. Setting " "this value will change the size." msgstr "" -#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135 +#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143 msgid "Beginning corner. Typically has values lower than [member end]." msgstr "" -#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138 +#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146 msgid "" "Size from [member position] to [member end]. Typically, all components are " "positive.\n" @@ -4880,7 +4889,7 @@ msgstr "" #: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12 #: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10 #: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10 -#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14 +#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16 #: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16 #: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13 #: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14 @@ -10283,17 +10292,21 @@ msgid "" "lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work " "fine on low-end PCs and mobile devices as they consume almost no resources " "in run-time.\n" +"[b]Procedural generation:[/b] Lightmap baking functionality is only " +"available in the editor. This means [BakedLightmap] is not suited to " +"procedurally generated or user-built levels. For procedurally generated or " +"user-built levels, use [GIProbe] instead.\n" "[b]Note:[/b] Due to how lightmaps work, most properties only have a visible " "effect once lightmaps are baked again." msgstr "" -#: doc/classes/BakedLightmap.xml:11 +#: doc/classes/BakedLightmap.xml:12 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html" msgstr "" "https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html" -#: doc/classes/BakedLightmap.xml:19 +#: doc/classes/BakedLightmap.xml:20 msgid "" "Bakes the lightmap, scanning from the given [code]from_node[/code] root and " "saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If " @@ -10302,24 +10315,24 @@ msgid "" "[member light_data]." msgstr "" -#: doc/classes/BakedLightmap.xml:25 +#: doc/classes/BakedLightmap.xml:26 msgid "" "When enabled, the lightmapper will merge the textures for all meshes into a " "single large layered texture. Not supported in GLES2." msgstr "" -#: doc/classes/BakedLightmap.xml:28 +#: doc/classes/BakedLightmap.xml:29 msgid "" "Maximum size of each lightmap layer, only used when [member atlas_generate] " "is enabled." msgstr "" -#: doc/classes/BakedLightmap.xml:31 +#: doc/classes/BakedLightmap.xml:32 msgid "" "Raycasting bias used during baking to avoid floating point precision issues." msgstr "" -#: doc/classes/BakedLightmap.xml:34 +#: doc/classes/BakedLightmap.xml:35 msgid "" "The energy multiplier for each bounce. Higher values will make indirect " "lighting brighter. A value of [code]1.0[/code] represents physically " @@ -10333,62 +10346,62 @@ msgid "" "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:38 +#: doc/classes/BakedLightmap.xml:39 msgid "" "Number of light bounces that are taken into account during baking. See also " "[member bounce_indirect_energy]." msgstr "" -#: doc/classes/BakedLightmap.xml:41 +#: doc/classes/BakedLightmap.xml:42 msgid "Grid size used for real-time capture information on dynamic objects." msgstr "" -#: doc/classes/BakedLightmap.xml:44 +#: doc/classes/BakedLightmap.xml:45 msgid "" "When enabled, an octree containing the scene's lighting information will be " "computed. This octree will then be used to light dynamic objects in the " "scene." msgstr "" -#: doc/classes/BakedLightmap.xml:47 +#: doc/classes/BakedLightmap.xml:48 msgid "" "Bias value to reduce the amount of light proagation in the captured octree." msgstr "" -#: doc/classes/BakedLightmap.xml:50 +#: doc/classes/BakedLightmap.xml:51 msgid "Bake quality of the capture data." msgstr "" -#: doc/classes/BakedLightmap.xml:53 +#: doc/classes/BakedLightmap.xml:54 msgid "" "If a baked mesh doesn't have a UV2 size hint, this value will be used to " "roughly compute a suitable lightmap size." msgstr "" -#: doc/classes/BakedLightmap.xml:56 +#: doc/classes/BakedLightmap.xml:57 msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" -#: doc/classes/BakedLightmap.xml:59 +#: doc/classes/BakedLightmap.xml:60 msgid "" "The energy scaling factor when when [member environment_mode] is set to " "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:62 +#: doc/classes/BakedLightmap.xml:63 msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" -#: doc/classes/BakedLightmap.xml:65 +#: doc/classes/BakedLightmap.xml:66 msgid "The rotation of the baked custom sky." msgstr "" -#: doc/classes/BakedLightmap.xml:68 +#: doc/classes/BakedLightmap.xml:69 msgid "" "Minimum ambient light for all the lightmap texels. This doesn't take into " "account any occlusion from the scene's geometry, it simply ensures a minimum " @@ -10396,35 +10409,35 @@ msgid "" "on shadow color." msgstr "" -#: doc/classes/BakedLightmap.xml:71 +#: doc/classes/BakedLightmap.xml:72 msgid "Decides which environment to use during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:74 +#: doc/classes/BakedLightmap.xml:75 msgid "" "Size of the baked lightmap. Only meshes inside this region will be included " "in the baked lightmap, also used as the bounds of the captured region for " "dynamic lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:77 +#: doc/classes/BakedLightmap.xml:78 msgid "" "Deprecated, in previous versions it determined the location where lightmaps " "were be saved." msgstr "" -#: doc/classes/BakedLightmap.xml:80 +#: doc/classes/BakedLightmap.xml:81 msgid "The calculated light data." msgstr "" -#: doc/classes/BakedLightmap.xml:83 +#: doc/classes/BakedLightmap.xml:84 msgid "" "Determines the amount of samples per texel used in indrect light baking. The " "amount of samples for each quality level can be configured in the project " "settings." msgstr "" -#: doc/classes/BakedLightmap.xml:86 +#: doc/classes/BakedLightmap.xml:87 msgid "" "Store full color values in the lightmap textures. When disabled, lightmap " "textures will store a single brightness channel. Can be disabled to reduce " @@ -10432,13 +10445,13 @@ msgid "" "color information in indirect lighting." msgstr "" -#: doc/classes/BakedLightmap.xml:89 +#: doc/classes/BakedLightmap.xml:90 msgid "" "When enabled, a lightmap denoiser will be used to reduce the noise inherent " "to Monte Carlo based global illumination." msgstr "" -#: doc/classes/BakedLightmap.xml:92 +#: doc/classes/BakedLightmap.xml:93 msgid "" "If [code]true[/code], stores the lightmap textures in a high dynamic range " "format (EXR). If [code]false[/code], stores the lightmap texture in a low " @@ -10450,78 +10463,78 @@ msgid "" "ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]." msgstr "" -#: doc/classes/BakedLightmap.xml:98 +#: doc/classes/BakedLightmap.xml:99 msgid "The lowest bake quality mode. Fastest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:101 +#: doc/classes/BakedLightmap.xml:102 msgid "The default bake quality mode." msgstr "" -#: doc/classes/BakedLightmap.xml:104 +#: doc/classes/BakedLightmap.xml:105 msgid "A higher bake quality mode. Takes longer to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:107 +#: doc/classes/BakedLightmap.xml:108 msgid "The highest bake quality mode. Takes the longest to calculate." msgstr "" -#: doc/classes/BakedLightmap.xml:110 +#: doc/classes/BakedLightmap.xml:111 msgid "Baking was successful." msgstr "" -#: doc/classes/BakedLightmap.xml:113 +#: doc/classes/BakedLightmap.xml:114 msgid "" "Returns if no viable save path is found. This can happen where an [member " "image_path] is not specified or when the save location is invalid." msgstr "" -#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622 +#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622 msgid "Currently unused." msgstr "" -#: doc/classes/BakedLightmap.xml:119 +#: doc/classes/BakedLightmap.xml:120 #, fuzzy msgid "Returns when the baker cannot save per-mesh textures to file." msgstr "å›žå‚³åƒæ•¸çš„åæ£åˆ‡å€¼ã€‚" -#: doc/classes/BakedLightmap.xml:122 +#: doc/classes/BakedLightmap.xml:123 msgid "The size of the generated lightmaps is too large." msgstr "" -#: doc/classes/BakedLightmap.xml:125 +#: doc/classes/BakedLightmap.xml:126 msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range." msgstr "" -#: doc/classes/BakedLightmap.xml:128 +#: doc/classes/BakedLightmap.xml:129 msgid "Returns if user cancels baking." msgstr "" -#: doc/classes/BakedLightmap.xml:131 +#: doc/classes/BakedLightmap.xml:132 msgid "" "Returns if lightmapper can't be created. Unless you are using a custom " "lightmapper, please report this as bug." msgstr "" -#: doc/classes/BakedLightmap.xml:134 +#: doc/classes/BakedLightmap.xml:135 msgid "" "There is no root node to start baking from. Either provide [code]from_node[/" "code] argument or attach this node to a parent that should be used as root." msgstr "" -#: doc/classes/BakedLightmap.xml:137 +#: doc/classes/BakedLightmap.xml:138 msgid "No environment is used during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:140 +#: doc/classes/BakedLightmap.xml:141 msgid "The baked environment is automatically picked from the current scene." msgstr "" -#: doc/classes/BakedLightmap.xml:143 +#: doc/classes/BakedLightmap.xml:144 msgid "A custom sky is used as environment during baking." msgstr "" -#: doc/classes/BakedLightmap.xml:146 +#: doc/classes/BakedLightmap.xml:147 msgid "A custom solid color is used as environment during baking." msgstr "" @@ -10977,8 +10990,11 @@ msgstr "" #: doc/classes/BitMap.xml:51 msgid "" -"Applies morphological dilation to the bitmap. The first argument is the " -"dilation amount, Rect2 is the area where the dilation will be applied." +"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/" +"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] " +"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the " +"area where the morphological operation is applied. Pixels located outside " +"the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" #: doc/classes/BitMap.xml:66 @@ -25000,21 +25016,32 @@ msgid "" "be turned down in exchange for better performance in the [ProjectSettings] " "using [member ProjectSettings.rendering/quality/voxel_cone_tracing/" "high_quality].\n" +"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, " +"which makes it suitable for procedurally generated or user-built levels as " +"long as all the geometry is generated in advance.\n" +"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not " +"suited to low-end hardware such as integrated graphics (consider " +"[BakedLightmap] instead). To provide a fallback for low-end hardware, " +"consider adding an option to disable [GIProbe] in your project's options " +"menus. A [GIProbe] node can be disabled by hiding it.\n" "[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light " "leaks (avoid one-sided walls). For interior levels, enclose your level " -"geometry in a sufficiently large box and bridge the loops to close the " -"mesh.\n" +"geometry in a sufficiently large box and bridge the loops to close the mesh. " +"To further prevent light leaks, you can also strategically place temporary " +"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] " +"enabled. These temporary nodes can then be hidden after baking the [GIProbe] " +"node.\n" "[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot " "emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can " "emit light in a [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:13 +#: doc/classes/GIProbe.xml:15 #, fuzzy msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html" msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html" -#: doc/classes/GIProbe.xml:22 +#: doc/classes/GIProbe.xml:24 msgid "" "Bakes the effect from all [GeometryInstance]s marked with [member " "GeometryInstance.use_in_baked_light] and [Light]s marked with either " @@ -25023,14 +25050,18 @@ msgid "" "light, this will generate a [MultiMesh] that has a cube representing each " "solid cell with each cube colored to the cell's albedo color. This can be " "used to visualize the [GIProbe]'s data and debug any issues that may be " -"occurring." +"occurring.\n" +"[b]Note:[/b] [method bake] works from the editor and in exported projects. " +"This makes it suitable for procedurally generated or user-built levels. " +"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. " +"Reducing [member subdiv] can speed up baking." msgstr "" -#: doc/classes/GIProbe.xml:28 +#: doc/classes/GIProbe.xml:31 msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled." msgstr "" -#: doc/classes/GIProbe.xml:34 +#: doc/classes/GIProbe.xml:37 msgid "" "Offsets the lookup of the light contribution from the [GIProbe]. This can be " "used to avoid self-shadowing, but may introduce light leaking at higher " @@ -25040,80 +25071,80 @@ msgid "" "size of the voxels." msgstr "" -#: doc/classes/GIProbe.xml:38 +#: doc/classes/GIProbe.xml:41 msgid "" "[i]Deprecated.[/i] This property has been deprecated due to known bugs and " "no longer has any effect when enabled." msgstr "" -#: doc/classes/GIProbe.xml:41 +#: doc/classes/GIProbe.xml:44 msgid "The [GIProbeData] resource that holds the data for this [GIProbe]." msgstr "" -#: doc/classes/GIProbe.xml:44 +#: doc/classes/GIProbe.xml:47 msgid "" "The maximum brightness that the [GIProbe] will recognize. Brightness will be " "scaled within this range." msgstr "" -#: doc/classes/GIProbe.xml:47 +#: doc/classes/GIProbe.xml:50 msgid "" "Energy multiplier. Makes the lighting contribution from the [GIProbe] " "brighter." msgstr "" -#: doc/classes/GIProbe.xml:50 +#: doc/classes/GIProbe.xml:53 msgid "" "The size of the area covered by the [GIProbe]. If you make the extents " "larger without increasing the subdivisions with [member subdiv], the size of " "each cell will increase and result in lower detailed lighting." msgstr "" -#: doc/classes/GIProbe.xml:53 +#: doc/classes/GIProbe.xml:56 msgid "" "If [code]true[/code], ignores the sky contribution when calculating lighting." msgstr "" -#: doc/classes/GIProbe.xml:56 +#: doc/classes/GIProbe.xml:59 msgid "" "Offsets the lookup into the [GIProbe] based on the object's normal " "direction. Can be used to reduce some self-shadowing artifacts." msgstr "" -#: doc/classes/GIProbe.xml:59 +#: doc/classes/GIProbe.xml:62 msgid "" "How much light propagates through the probe internally. A higher value " "allows light to spread further." msgstr "" -#: doc/classes/GIProbe.xml:62 +#: doc/classes/GIProbe.xml:65 msgid "" "Number of times to subdivide the grid that the [GIProbe] operates on. A " "higher number results in finer detail and thus higher visual quality, while " "lower numbers result in better performance." msgstr "" -#: doc/classes/GIProbe.xml:67 +#: doc/classes/GIProbe.xml:70 msgid "" "Use 64 subdivisions. This is the lowest quality setting, but the fastest. " "Use it if you can, but especially use it on lower-end hardware." msgstr "" -#: doc/classes/GIProbe.xml:70 +#: doc/classes/GIProbe.xml:73 msgid "Use 128 subdivisions. This is the default quality setting." msgstr "" -#: doc/classes/GIProbe.xml:73 +#: doc/classes/GIProbe.xml:76 msgid "Use 256 subdivisions." msgstr "" -#: doc/classes/GIProbe.xml:76 +#: doc/classes/GIProbe.xml:79 msgid "" "Use 512 subdivisions. This is the highest quality setting, but the slowest. " -"On lower-end hardware this could cause the GPU to stall." +"On lower-end hardware, this could cause the GPU to stall." msgstr "" -#: doc/classes/GIProbe.xml:79 +#: doc/classes/GIProbe.xml:82 msgid "Represents the size of the [enum Subdiv] enum." msgstr "" @@ -29338,7 +29369,9 @@ msgid "The drag position." msgstr "" #: doc/classes/InputEventScreenDrag.xml:22 -msgid "The drag position relative to its start position." +msgid "" +"The drag position relative to the previous position (position at the last " +"frame)." msgstr "" #: doc/classes/InputEventScreenDrag.xml:25 @@ -30651,7 +30684,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30716,22 +30750,24 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform], then tries to " "move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" -#: doc/classes/KinematicBody.xml:148 +#: doc/classes/KinematicBody.xml:149 msgid "Lock the body's X axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:151 +#: doc/classes/KinematicBody.xml:152 msgid "Lock the body's Y axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:154 +#: doc/classes/KinematicBody.xml:155 msgid "Lock the body's Z axis movement." msgstr "" -#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138 +#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139 msgid "" "Extra margin used for collision recovery in motion functions (see [method " "move_and_collide], [method move_and_slide], [method " @@ -30746,7 +30782,7 @@ msgid "" "bodies." msgstr "" -#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144 +#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145 msgid "" "If [code]true[/code], the body's movement will be synchronized to the " "physics frame. This is useful when animating movement via [AnimationPlayer], " @@ -30754,19 +30790,19 @@ msgid "" "move_and_slide] or [method move_and_collide] functions." msgstr "" -#: doc/classes/KinematicBody.xml:166 +#: doc/classes/KinematicBody.xml:167 msgid "" "Lock the body's X axis movement. Deprecated alias for [member " "axis_lock_motion_x]." msgstr "" -#: doc/classes/KinematicBody.xml:169 +#: doc/classes/KinematicBody.xml:170 msgid "" "Lock the body's Y axis movement. Deprecated alias for [member " "axis_lock_motion_y]." msgstr "" -#: doc/classes/KinematicBody.xml:172 +#: doc/classes/KinematicBody.xml:173 msgid "" "Lock the body's Z axis movement. Deprecated alias for [member " "axis_lock_motion_z]." @@ -30837,7 +30873,8 @@ msgstr "" msgid "" "Moves the body along the vector [code]rel_vec[/code]. The body will stop if " "it collides. Returns a [KinematicCollision2D], which contains information " -"about the collision.\n" +"about the collision when stopped, or when touching another body along the " +"motion.\n" "If [code]test_only[/code] is [code]true[/code], the body does not move but " "the would-be collision information is given." msgstr "" @@ -30895,7 +30932,9 @@ msgid "" "Checks for collisions without moving the body. Virtually sets the node's " "position, scale and rotation to that of the given [Transform2D], then tries " "to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/" -"code] if a collision would occur." +"code] if a collision would stop the body from moving along the whole path.\n" +"Use [method move_and_collide] instead for detecting collision with touching " +"bodies." msgstr "" #: doc/classes/KinematicCollision.xml:4 @@ -34449,7 +34488,7 @@ msgid "" "var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, " "50), Vector2(50, 0)])\n" "polygon.set_vertices(vertices)\n" -"var indices = PoolIntArray(0, 3, 1)\n" +"var indices = PoolIntArray([0, 1, 2, 3])\n" "polygon.add_polygon(indices)\n" "$NavigationPolygonInstance.navpoly = polygon\n" "[/codeblock]" @@ -37765,7 +37804,7 @@ msgstr "" #: doc/classes/OS.xml:353 msgid "" "Returns the dots per inch density of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS, returned value is inaccurate if fractional display " "scaling mode is used.\n" @@ -37795,14 +37834,14 @@ msgstr "" #: doc/classes/OS.xml:379 msgid "" "Returns the position of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" #: doc/classes/OS.xml:386 msgid "" "Return the scale factor of the specified screen by index. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used.\n" "[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) " "screen, and [code]1.0[/code] for all other cases.\n" @@ -37812,7 +37851,7 @@ msgstr "" #: doc/classes/OS.xml:395 msgid "" "Returns the dimensions in pixels of the specified screen. If [code]screen[/" -"code] is [/code]-1[/code] (the default value), the current screen will be " +"code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" @@ -40313,17 +40352,43 @@ msgid "" "Physics2DServer.shape_set_data].\n" "[code]rid[/code]: The intersecting object's [RID].\n" "[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively.\n" "[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " "[code]Segments[/code] build mode are not solid shapes. Therefore, they will " "not be detected." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:86 +#: doc/classes/Physics2DDirectSpaceState.xml:76 +msgid "" +"Checks whether a point is inside any solid shape, in a specific canvas layer " +"given by [code]canvas_instance_id[/code]. The shapes the point is inside of " +"are returned in an array containing dictionaries with the following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]metadata[/code]: The intersecting shape's metadata. This metadata is " +"different from [method Object.get_meta], and is set with [method " +"Physics2DServer.shape_set_data].\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " +"respectively.\n" +"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in " +"[code]Segments[/code] build mode are not solid shapes. Therefore, they will " +"not be detected." +msgstr "" + +#: doc/classes/Physics2DDirectSpaceState.xml:96 msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" @@ -40341,11 +40406,11 @@ msgid "" "Additionally, the method can take an [code]exclude[/code] array of objects " "or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" "code] bitmask representing the physics layers to check in, or booleans to " -"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, " "respectively." msgstr "" -#: doc/classes/Physics2DDirectSpaceState.xml:103 +#: doc/classes/Physics2DDirectSpaceState.xml:113 msgid "" "Checks the intersections of a shape, given through a " "[Physics2DShapeQueryParameters] object, against the space.\n" @@ -40540,7 +40605,9 @@ msgid "Returns the continuous collision detection mode." msgstr "" #: doc/classes/Physics2DServer.xml:351 -msgid "Returns the [Physics2DDirectBodyState] of the body." +msgid "" +"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" +"code] if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348 @@ -41343,6 +41410,24 @@ msgstr "" #: doc/classes/PhysicsDirectSpaceState.xml:55 msgid "" +"Checks whether a point is inside any solid shape. The shapes the point is " +"inside of are returned in an array containing dictionaries with the " +"following fields:\n" +"[code]collider[/code]: The colliding object.\n" +"[code]collider_id[/code]: The colliding object's ID.\n" +"[code]rid[/code]: The intersecting object's [RID].\n" +"[code]shape[/code]: The shape index of the colliding shape.\n" +"The number of intersections can be limited with the [code]max_results[/code] " +"parameter, to reduce the processing time.\n" +"Additionally, the method can take an [code]exclude[/code] array of objects " +"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/" +"code] bitmask representing the physics layers to check in, or booleans to " +"determine if the ray should collide with [PhysicsBody]s or [Area]s, " +"respectively." +msgstr "" + +#: doc/classes/PhysicsDirectSpaceState.xml:73 +msgid "" "Intersects a ray in a given space. The returned object is a dictionary with " "the following fields:\n" "[code]collider[/code]: The colliding object.\n" @@ -41360,7 +41445,7 @@ msgid "" "respectively." msgstr "" -#: doc/classes/PhysicsDirectSpaceState.xml:71 +#: doc/classes/PhysicsDirectSpaceState.xml:89 msgid "" "Checks the intersections of a shape, given through a " "[PhysicsShapeQueryParameters] object, against the space. The intersected " @@ -41474,7 +41559,9 @@ msgid "" msgstr "" #: doc/classes/PhysicsServer.xml:335 -msgid "Returns the [PhysicsDirectBodyState] of the body." +msgid "" +"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " +"if the body is destroyed or removed from the physics space." msgstr "" #: doc/classes/PhysicsServer.xml:370 @@ -44019,24 +44106,30 @@ msgstr "" #: doc/classes/ProjectSettings.xml:279 msgid "" -"Output latency in milliseconds for audio. Lower values will result in lower " -"audio latency at the cost of increased CPU usage. Low values may result in " -"audible cracking on slower hardware." +"Specifies the preferred output latency in milliseconds for audio. Lower " +"values will result in lower audio latency at the cost of increased CPU " +"usage. Low values may result in audible cracking on slower hardware.\n" +"Audio output latency may be constrained by the host operating system and " +"audio hardware drivers. If the host can not provide the specified audio " +"output latency then Godot will attempt to use the nearest latency allowed by " +"the host. As such you should always use [method AudioServer." +"get_output_latency] to determine the actual audio output latency.\n" +"[b]Note:[/b] This setting is ignored on Windows." msgstr "" -#: doc/classes/ProjectSettings.xml:282 +#: doc/classes/ProjectSettings.xml:284 msgid "" "Safer override for [member audio/output_latency] in the Web platform, to " "avoid audio issues especially on mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:285 +#: doc/classes/ProjectSettings.xml:287 msgid "" "Setting to hardcode audio delay when playing video. Best to leave this " "untouched unless you know what you are doing." msgstr "" -#: doc/classes/ProjectSettings.xml:288 +#: doc/classes/ProjectSettings.xml:290 msgid "" "The default compression level for gzip. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44046,7 +44139,7 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:291 +#: doc/classes/ProjectSettings.xml:293 msgid "" "The default compression level for Zlib. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " @@ -44056,27 +44149,27 @@ msgid "" "updates." msgstr "" -#: doc/classes/ProjectSettings.xml:294 +#: doc/classes/ProjectSettings.xml:296 msgid "" "The default compression level for Zstandard. Affects compressed scenes and " "resources. Higher levels result in smaller files at the cost of compression " "speed. Decompression speed is mostly unaffected by the compression level." msgstr "" -#: doc/classes/ProjectSettings.xml:297 +#: doc/classes/ProjectSettings.xml:299 msgid "" "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-" "distance matching[/url] in Zstandard." msgstr "" -#: doc/classes/ProjectSettings.xml:300 +#: doc/classes/ProjectSettings.xml:302 msgid "" "Largest size limit (in power of 2) allowed when compressing using long-" "distance matching with Zstandard. Higher values can result in better " "compression, but will require more memory when compressing and decompressing." msgstr "" -#: doc/classes/ProjectSettings.xml:303 +#: doc/classes/ProjectSettings.xml:305 msgid "" "If [code]true[/code], displays getters and setters in autocompletion results " "in the script editor. This setting is meant to be used when porting old " @@ -44084,81 +44177,81 @@ msgid "" "Godot 3 onwards." msgstr "" -#: doc/classes/ProjectSettings.xml:306 +#: doc/classes/ProjectSettings.xml:308 msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" -#: doc/classes/ProjectSettings.xml:309 +#: doc/classes/ProjectSettings.xml:311 msgid "" "If [code]true[/code], enables warnings when deprecated keywords such as " "[code]slave[/code] are used." msgstr "" -#: doc/classes/ProjectSettings.xml:312 +#: doc/classes/ProjectSettings.xml:314 msgid "" "If [code]true[/code], enables specific GDScript warnings (see [code]debug/" "gdscript/warnings/*[/code] settings). If [code]false[/code], disables all " "GDScript warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:315 +#: doc/classes/ProjectSettings.xml:317 msgid "" "If [code]true[/code], scripts in the [code]res://addons[/code] folder will " "not generate warnings." msgstr "" -#: doc/classes/ProjectSettings.xml:318 +#: doc/classes/ProjectSettings.xml:320 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" -#: doc/classes/ProjectSettings.xml:321 +#: doc/classes/ProjectSettings.xml:323 msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a variable. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:324 +#: doc/classes/ProjectSettings.xml:326 msgid "" "If [code]true[/code], enables warnings when a function assigned to a " "variable may yield and return a function state instead of a value." msgstr "" -#: doc/classes/ProjectSettings.xml:327 +#: doc/classes/ProjectSettings.xml:329 msgid "" "If [code]true[/code], enables warnings when using a function as if it was a " "property." msgstr "" -#: doc/classes/ProjectSettings.xml:330 +#: doc/classes/ProjectSettings.xml:332 msgid "" "If [code]true[/code], enables warnings when a ternary operator may emit " "values with incompatible types." msgstr "" -#: doc/classes/ProjectSettings.xml:333 +#: doc/classes/ProjectSettings.xml:335 msgid "" "If [code]true[/code], enables warnings when dividing an integer by another " "integer (the decimal part will be discarded)." msgstr "" -#: doc/classes/ProjectSettings.xml:336 +#: doc/classes/ProjectSettings.xml:338 msgid "" "If [code]true[/code], enables warnings when passing a floating-point value " "to a function that expects an integer (it will be converted and lose " "precision)." msgstr "" -#: doc/classes/ProjectSettings.xml:339 +#: doc/classes/ProjectSettings.xml:341 msgid "" "If [code]true[/code], enables warnings when using a property as if it was a " "function." msgstr "" -#: doc/classes/ProjectSettings.xml:342 +#: doc/classes/ProjectSettings.xml:344 msgid "" "If [code]true[/code], enables warnings when calling a function without using " "its return value (by assigning it to a variable or using it as a function " @@ -44166,109 +44259,109 @@ msgid "" "using the [enum Error] enum." msgstr "" -#: doc/classes/ProjectSettings.xml:345 +#: doc/classes/ProjectSettings.xml:347 msgid "" "If [code]true[/code], enables warnings when defining a local or subclass " "member variable that would shadow a variable at an upper level (such as a " "member variable)." msgstr "" -#: doc/classes/ProjectSettings.xml:348 +#: doc/classes/ProjectSettings.xml:350 msgid "" "If [code]true[/code], enables warnings when calling an expression that has " "no effect on the surrounding code, such as writing [code]2 + 2[/code] as a " "statement." msgstr "" -#: doc/classes/ProjectSettings.xml:351 +#: doc/classes/ProjectSettings.xml:353 msgid "" "If [code]true[/code], enables warnings when calling a ternary expression " "that has no effect on the surrounding code, such as writing [code]42 if " "active else 0[/code] as a statement." msgstr "" -#: doc/classes/ProjectSettings.xml:354 +#: doc/classes/ProjectSettings.xml:356 msgid "" "If [code]true[/code], all warnings will be reported as if they were errors." msgstr "" -#: doc/classes/ProjectSettings.xml:357 +#: doc/classes/ProjectSettings.xml:359 msgid "" "If [code]true[/code], enables warnings when using a variable that wasn't " "previously assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:360 +#: doc/classes/ProjectSettings.xml:362 msgid "" "If [code]true[/code], enables warnings when assigning a variable using an " "assignment operator like [code]+=[/code] if the variable wasn't previously " "assigned." msgstr "" -#: doc/classes/ProjectSettings.xml:363 +#: doc/classes/ProjectSettings.xml:365 msgid "" "If [code]true[/code], enables warnings when unreachable code is detected " "(such as after a [code]return[/code] statement that will always be executed)." msgstr "" -#: doc/classes/ProjectSettings.xml:366 +#: doc/classes/ProjectSettings.xml:368 msgid "" "If [code]true[/code], enables warnings when using an expression whose type " "may not be compatible with the function parameter expected." msgstr "" -#: doc/classes/ProjectSettings.xml:369 +#: doc/classes/ProjectSettings.xml:371 msgid "If [code]true[/code], enables warnings when performing an unsafe cast." msgstr "" -#: doc/classes/ProjectSettings.xml:372 +#: doc/classes/ProjectSettings.xml:374 msgid "" "If [code]true[/code], enables warnings when calling a method whose presence " "is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:375 +#: doc/classes/ProjectSettings.xml:377 msgid "" "If [code]true[/code], enables warnings when accessing a property whose " "presence is not guaranteed at compile-time in the class." msgstr "" -#: doc/classes/ProjectSettings.xml:378 +#: doc/classes/ProjectSettings.xml:380 msgid "" "If [code]true[/code], enables warnings when a function parameter is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:381 +#: doc/classes/ProjectSettings.xml:383 msgid "" "If [code]true[/code], enables warnings when a member variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:384 +#: doc/classes/ProjectSettings.xml:386 msgid "If [code]true[/code], enables warnings when a signal is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:387 +#: doc/classes/ProjectSettings.xml:389 msgid "If [code]true[/code], enables warnings when a local variable is unused." msgstr "" -#: doc/classes/ProjectSettings.xml:390 +#: doc/classes/ProjectSettings.xml:392 msgid "" "If [code]true[/code], enables warnings when a variable is declared with the " "same name as a function. This will turn into an error in a future version " "when first-class functions become supported in GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:393 +#: doc/classes/ProjectSettings.xml:395 msgid "" "If [code]true[/code], enables warnings when assigning the result of a " "function that returns [code]void[/code] to a variable." msgstr "" -#: doc/classes/ProjectSettings.xml:396 +#: doc/classes/ProjectSettings.xml:398 msgid "Message to be displayed before the backtrace when the engine crashes." msgstr "" -#: doc/classes/ProjectSettings.xml:399 +#: doc/classes/ProjectSettings.xml:401 msgid "" "Maximum number of frames per second allowed. The actual number of frames per " "second may still be below this value if the game is lagging.\n" @@ -44279,91 +44372,91 @@ msgid "" "project under lag conditions." msgstr "" -#: doc/classes/ProjectSettings.xml:404 +#: doc/classes/ProjectSettings.xml:406 msgid "Maximum call stack allowed for debugging GDScript." msgstr "" -#: doc/classes/ProjectSettings.xml:407 +#: doc/classes/ProjectSettings.xml:409 msgid "Maximum amount of functions per frame allowed when profiling." msgstr "" -#: doc/classes/ProjectSettings.xml:410 +#: doc/classes/ProjectSettings.xml:412 msgid "Print frames per second to standard output every second." msgstr "" -#: doc/classes/ProjectSettings.xml:413 +#: doc/classes/ProjectSettings.xml:415 msgid "" "Print more information to standard output when running. It displays " "information such as memory leaks, which scenes and resources are being " "loaded, etc." msgstr "" -#: doc/classes/ProjectSettings.xml:416 +#: doc/classes/ProjectSettings.xml:418 msgid "Maximum call stack in visual scripting, to avoid infinite recursion." msgstr "" -#: doc/classes/ProjectSettings.xml:419 +#: doc/classes/ProjectSettings.xml:421 msgid "" "Color of the contact points between collision shapes, visible when \"Visible " "Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:422 +#: doc/classes/ProjectSettings.xml:424 msgid "" "Sets whether 2D physics will display collision outlines in game when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:425 +#: doc/classes/ProjectSettings.xml:427 msgid "" "Maximum number of contact points between collision shapes to display when " "\"Visible Collision Shapes\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:428 +#: doc/classes/ProjectSettings.xml:430 msgid "" "Color of the collision shapes, visible when \"Visible Collision Shapes\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:431 +#: doc/classes/ProjectSettings.xml:433 msgid "" "Color of the disabled navigation geometry, visible when \"Visible Navigation" "\" is enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:434 +#: doc/classes/ProjectSettings.xml:436 msgid "" "Color of the navigation geometry, visible when \"Visible Navigation\" is " "enabled in the Debug menu." msgstr "" -#: doc/classes/ProjectSettings.xml:437 +#: doc/classes/ProjectSettings.xml:439 msgid "Custom image for the mouse cursor (limited to 256×256)." msgstr "" -#: doc/classes/ProjectSettings.xml:440 +#: doc/classes/ProjectSettings.xml:442 msgid "Hotspot for the custom mouse cursor image." msgstr "" -#: doc/classes/ProjectSettings.xml:443 +#: doc/classes/ProjectSettings.xml:445 msgid "Position offset for tooltips, relative to the mouse cursor's hotspot." msgstr "" -#: doc/classes/ProjectSettings.xml:446 +#: doc/classes/ProjectSettings.xml:448 msgid "" "If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 " "platform. This setting has no effect on desktop Linux, as DPI-awareness " "fallbacks are not supported there." msgstr "" -#: doc/classes/ProjectSettings.xml:449 +#: doc/classes/ProjectSettings.xml:451 msgid "" "If [code]true[/code], keeps the screen on (even in case of inactivity), so " "the screensaver does not take over. Works on desktop and mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:452 +#: doc/classes/ProjectSettings.xml:454 msgid "" "The default screen orientation to use on mobile devices.\n" "[b]Note:[/b] When set to a portrait orientation, this project setting does " @@ -44372,13 +44465,13 @@ msgid "" "window/size/height] accordingly." msgstr "" -#: doc/classes/ProjectSettings.xml:456 +#: doc/classes/ProjectSettings.xml:458 msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." msgstr "" -#: doc/classes/ProjectSettings.xml:459 +#: doc/classes/ProjectSettings.xml:461 msgid "" "If [code]true[/code], allows per-pixel transparency for the window " "background. This affects performance, so leave it on [code]false[/code] " @@ -44388,7 +44481,7 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:464 +#: doc/classes/ProjectSettings.xml:466 msgid "" "Sets the window background to transparent when it starts.\n" "See [member OS.window_per_pixel_transparency_enabled] for more details.\n" @@ -44396,19 +44489,19 @@ msgid "" "and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:469 +#: doc/classes/ProjectSettings.xml:471 msgid "" "Forces the main window to be always on top.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:473 +#: doc/classes/ProjectSettings.xml:475 msgid "" "Forces the main window to be borderless.\n" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:477 +#: doc/classes/ProjectSettings.xml:479 msgid "" "Sets the main window to full screen when the project starts. Note that this " "is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless " @@ -44422,45 +44515,45 @@ msgid "" "[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5." msgstr "" -#: doc/classes/ProjectSettings.xml:482 +#: doc/classes/ProjectSettings.xml:484 msgid "" "Sets the game's main viewport height. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:485 +#: doc/classes/ProjectSettings.xml:487 msgid "" "Allows the window to be resizable by default.\n" "[b]Note:[/b] This setting is ignored on iOS and Android." msgstr "" -#: doc/classes/ProjectSettings.xml:489 +#: doc/classes/ProjectSettings.xml:491 msgid "" "If greater than zero, overrides the window height when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:492 +#: doc/classes/ProjectSettings.xml:494 msgid "" "If greater than zero, overrides the window width when running the game. " "Useful for testing stretch modes." msgstr "" -#: doc/classes/ProjectSettings.xml:495 +#: doc/classes/ProjectSettings.xml:497 msgid "" "Sets the game's main viewport width. On desktop platforms, this is the " "default window size. Stretch mode settings also use this as a reference when " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:498 +#: doc/classes/ProjectSettings.xml:500 msgid "" "Specifies the tablet driver to use. If left empty, the default driver will " "be used." msgstr "" -#: doc/classes/ProjectSettings.xml:501 +#: doc/classes/ProjectSettings.xml:503 msgid "" "If [code]true[/code], enables vertical synchronization. This eliminates " "tearing that may appear in moving scenes, at the cost of higher input " @@ -44469,7 +44562,7 @@ msgid "" "regardless (such as mobile platforms and HTML5)." msgstr "" -#: doc/classes/ProjectSettings.xml:504 +#: doc/classes/ProjectSettings.xml:506 msgid "" "If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], " "enables vertical synchronization via the operating system's window " @@ -44480,7 +44573,7 @@ msgid "" "framerate halving (e.g. from 60 FPS to 30 FPS) when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:508 +#: doc/classes/ProjectSettings.xml:510 msgid "" "The command-line arguments to append to Godot's own command line when " "running the project. This doesn't affect the editor itself.\n" @@ -44496,14 +44589,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:516 +#: doc/classes/ProjectSettings.xml:518 msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." msgstr "" -#: doc/classes/ProjectSettings.xml:519 +#: doc/classes/ProjectSettings.xml:521 msgid "" "Text-based file extensions to include in the script editor's \"Find in Files" "\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse " @@ -44511,49 +44604,49 @@ msgid "" "serialized in the scene files." msgstr "" -#: doc/classes/ProjectSettings.xml:522 +#: doc/classes/ProjectSettings.xml:524 msgid "" "Default value for [member ScrollContainer.scroll_deadzone], which will be " "used for all [ScrollContainer]s unless overridden." msgstr "" -#: doc/classes/ProjectSettings.xml:525 +#: doc/classes/ProjectSettings.xml:527 msgid "" "If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and " "UWP to follow interface conventions." msgstr "" -#: doc/classes/ProjectSettings.xml:530 +#: doc/classes/ProjectSettings.xml:532 msgid "" "Path to a custom [Theme] resource file to use for the project ([code]theme[/" "code] or generic [code]tres[/code]/[code]res[/code] extension)." msgstr "" -#: doc/classes/ProjectSettings.xml:533 +#: doc/classes/ProjectSettings.xml:535 msgid "" "Path to a custom [Font] resource to use as default for all GUI elements of " "the project." msgstr "" -#: doc/classes/ProjectSettings.xml:536 +#: doc/classes/ProjectSettings.xml:538 msgid "If [code]true[/code], makes sure the theme used works with HiDPI." msgstr "" -#: doc/classes/ProjectSettings.xml:539 +#: doc/classes/ProjectSettings.xml:541 msgid "" "Timer setting for incremental search in [Tree], [ItemList], etc. controls " "(in milliseconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:542 +#: doc/classes/ProjectSettings.xml:544 msgid "Timer for detecting idle in [TextEdit] (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:545 +#: doc/classes/ProjectSettings.xml:547 msgid "Default delay for tooltips (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:548 +#: doc/classes/ProjectSettings.xml:550 msgid "" "Default [InputEventAction] to confirm a focused button, menu or list item, " "or validate input.\n" @@ -44562,7 +44655,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:552 +#: doc/classes/ProjectSettings.xml:554 msgid "" "Default [InputEventAction] to discard a modal or pending input.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44570,7 +44663,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:556 +#: doc/classes/ProjectSettings.xml:558 msgid "" "Default [InputEventAction] to move down in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44578,7 +44671,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:560 +#: doc/classes/ProjectSettings.xml:562 msgid "" "Default [InputEventAction] to go to the end position of a [Control] (e.g. " "last item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44588,7 +44681,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:564 +#: doc/classes/ProjectSettings.xml:566 msgid "" "Default [InputEventAction] to focus the next [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_next].\n" @@ -44597,7 +44690,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:568 +#: doc/classes/ProjectSettings.xml:570 msgid "" "Default [InputEventAction] to focus the previous [Control] in the scene. The " "focus behavior can be configured via [member Control.focus_previous].\n" @@ -44606,7 +44699,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:572 +#: doc/classes/ProjectSettings.xml:574 msgid "" "Default [InputEventAction] to go to the start position of a [Control] (e.g. " "first item in an [ItemList] or a [Tree]), matching the behavior of [constant " @@ -44616,7 +44709,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:576 +#: doc/classes/ProjectSettings.xml:578 msgid "" "Default [InputEventAction] to move left in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44624,7 +44717,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:580 +#: doc/classes/ProjectSettings.xml:582 msgid "" "Default [InputEventAction] to go down a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on " @@ -44634,7 +44727,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:584 +#: doc/classes/ProjectSettings.xml:586 msgid "" "Default [InputEventAction] to go up a page in a [Control] (e.g. in an " "[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on " @@ -44644,7 +44737,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:588 +#: doc/classes/ProjectSettings.xml:590 msgid "" "Default [InputEventAction] to move right in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44652,7 +44745,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:592 +#: doc/classes/ProjectSettings.xml:594 msgid "" "Default [InputEventAction] to select an item in a [Control] (e.g. in an " "[ItemList] or a [Tree]).\n" @@ -44661,7 +44754,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:596 +#: doc/classes/ProjectSettings.xml:598 msgid "" "Default [InputEventAction] to move up in the UI.\n" "[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are " @@ -44669,7 +44762,7 @@ msgid "" "to the action can however be modified." msgstr "" -#: doc/classes/ProjectSettings.xml:600 +#: doc/classes/ProjectSettings.xml:602 msgid "" "If [code]true[/code], key/touch/joystick events will be flushed just before " "every idle and physics frame.\n" @@ -44681,477 +44774,477 @@ msgid "" "[b]Note:[/b] Currently implemented only in Android." msgstr "" -#: doc/classes/ProjectSettings.xml:606 +#: doc/classes/ProjectSettings.xml:608 msgid "" "If [code]true[/code], sends mouse input events when tapping or swiping on " "the touchscreen." msgstr "" -#: doc/classes/ProjectSettings.xml:609 +#: doc/classes/ProjectSettings.xml:611 msgid "" "If [code]true[/code], sends touch input events when clicking or dragging the " "mouse." msgstr "" -#: doc/classes/ProjectSettings.xml:612 +#: doc/classes/ProjectSettings.xml:614 msgid "Default delay for touch events. This only affects iOS devices." msgstr "" -#: doc/classes/ProjectSettings.xml:615 +#: doc/classes/ProjectSettings.xml:617 msgid "Optional name for the 2D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:618 +#: doc/classes/ProjectSettings.xml:620 msgid "Optional name for the 2D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:621 +#: doc/classes/ProjectSettings.xml:623 msgid "Optional name for the 2D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:624 +#: doc/classes/ProjectSettings.xml:626 msgid "Optional name for the 2D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:627 +#: doc/classes/ProjectSettings.xml:629 msgid "Optional name for the 2D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:630 +#: doc/classes/ProjectSettings.xml:632 msgid "Optional name for the 2D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:633 +#: doc/classes/ProjectSettings.xml:635 msgid "Optional name for the 2D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:636 +#: doc/classes/ProjectSettings.xml:638 msgid "Optional name for the 2D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:639 +#: doc/classes/ProjectSettings.xml:641 msgid "Optional name for the 2D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:642 +#: doc/classes/ProjectSettings.xml:644 msgid "Optional name for the 2D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:645 +#: doc/classes/ProjectSettings.xml:647 msgid "Optional name for the 2D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:648 +#: doc/classes/ProjectSettings.xml:650 msgid "Optional name for the 2D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:651 +#: doc/classes/ProjectSettings.xml:653 msgid "Optional name for the 2D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:654 +#: doc/classes/ProjectSettings.xml:656 msgid "Optional name for the 2D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:657 +#: doc/classes/ProjectSettings.xml:659 msgid "Optional name for the 2D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:660 +#: doc/classes/ProjectSettings.xml:662 msgid "Optional name for the 2D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:663 +#: doc/classes/ProjectSettings.xml:665 msgid "Optional name for the 2D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:666 +#: doc/classes/ProjectSettings.xml:668 msgid "Optional name for the 2D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:669 +#: doc/classes/ProjectSettings.xml:671 msgid "Optional name for the 2D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:672 +#: doc/classes/ProjectSettings.xml:674 msgid "Optional name for the 2D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:675 +#: doc/classes/ProjectSettings.xml:677 msgid "Optional name for the 2D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:678 +#: doc/classes/ProjectSettings.xml:680 msgid "Optional name for the 2D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:681 +#: doc/classes/ProjectSettings.xml:683 msgid "Optional name for the 2D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:684 +#: doc/classes/ProjectSettings.xml:686 msgid "Optional name for the 2D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:687 +#: doc/classes/ProjectSettings.xml:689 msgid "Optional name for the 2D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:690 +#: doc/classes/ProjectSettings.xml:692 msgid "Optional name for the 2D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:693 +#: doc/classes/ProjectSettings.xml:695 msgid "Optional name for the 2D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:696 +#: doc/classes/ProjectSettings.xml:698 msgid "Optional name for the 2D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:699 +#: doc/classes/ProjectSettings.xml:701 msgid "Optional name for the 2D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:702 +#: doc/classes/ProjectSettings.xml:704 msgid "Optional name for the 2D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:705 +#: doc/classes/ProjectSettings.xml:707 msgid "Optional name for the 2D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:708 +#: doc/classes/ProjectSettings.xml:710 msgid "Optional name for the 2D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:711 +#: doc/classes/ProjectSettings.xml:713 msgid "Optional name for the 2D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:714 +#: doc/classes/ProjectSettings.xml:716 msgid "Optional name for the 2D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:717 +#: doc/classes/ProjectSettings.xml:719 msgid "Optional name for the 2D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:720 +#: doc/classes/ProjectSettings.xml:722 msgid "Optional name for the 2D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:723 +#: doc/classes/ProjectSettings.xml:725 msgid "Optional name for the 2D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:726 +#: doc/classes/ProjectSettings.xml:728 msgid "Optional name for the 2D render layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:729 +#: doc/classes/ProjectSettings.xml:731 msgid "Optional name for the 2D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:732 +#: doc/classes/ProjectSettings.xml:734 msgid "Optional name for the 2D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:735 +#: doc/classes/ProjectSettings.xml:737 msgid "Optional name for the 2D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:738 +#: doc/classes/ProjectSettings.xml:740 msgid "Optional name for the 2D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:741 +#: doc/classes/ProjectSettings.xml:743 msgid "Optional name for the 2D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:744 +#: doc/classes/ProjectSettings.xml:746 msgid "Optional name for the 2D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:747 +#: doc/classes/ProjectSettings.xml:749 msgid "Optional name for the 2D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:750 +#: doc/classes/ProjectSettings.xml:752 msgid "Optional name for the 2D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:753 +#: doc/classes/ProjectSettings.xml:755 msgid "Optional name for the 2D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:756 +#: doc/classes/ProjectSettings.xml:758 msgid "Optional name for the 2D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:759 +#: doc/classes/ProjectSettings.xml:761 msgid "Optional name for the 2D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:762 +#: doc/classes/ProjectSettings.xml:764 msgid "Optional name for the 2D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:765 +#: doc/classes/ProjectSettings.xml:767 msgid "Optional name for the 2D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:768 +#: doc/classes/ProjectSettings.xml:770 msgid "Optional name for the 2D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:771 +#: doc/classes/ProjectSettings.xml:773 msgid "Optional name for the 3D physics layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:774 +#: doc/classes/ProjectSettings.xml:776 msgid "Optional name for the 3D physics layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:777 +#: doc/classes/ProjectSettings.xml:779 msgid "Optional name for the 3D physics layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:780 +#: doc/classes/ProjectSettings.xml:782 msgid "Optional name for the 3D physics layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:783 +#: doc/classes/ProjectSettings.xml:785 msgid "Optional name for the 3D physics layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:786 +#: doc/classes/ProjectSettings.xml:788 msgid "Optional name for the 3D physics layer 14." msgstr "" -#: doc/classes/ProjectSettings.xml:789 +#: doc/classes/ProjectSettings.xml:791 msgid "Optional name for the 3D physics layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:792 +#: doc/classes/ProjectSettings.xml:794 msgid "Optional name for the 3D physics layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:795 +#: doc/classes/ProjectSettings.xml:797 msgid "Optional name for the 3D physics layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:798 +#: doc/classes/ProjectSettings.xml:800 msgid "Optional name for the 3D physics layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:801 +#: doc/classes/ProjectSettings.xml:803 msgid "Optional name for the 3D physics layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:804 +#: doc/classes/ProjectSettings.xml:806 msgid "Optional name for the 3D physics layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:807 +#: doc/classes/ProjectSettings.xml:809 msgid "Optional name for the 3D physics layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:810 +#: doc/classes/ProjectSettings.xml:812 msgid "Optional name for the 3D physics layer 21." msgstr "" -#: doc/classes/ProjectSettings.xml:813 +#: doc/classes/ProjectSettings.xml:815 msgid "Optional name for the 3D physics layer 22." msgstr "" -#: doc/classes/ProjectSettings.xml:816 +#: doc/classes/ProjectSettings.xml:818 msgid "Optional name for the 3D physics layer 23." msgstr "" -#: doc/classes/ProjectSettings.xml:819 +#: doc/classes/ProjectSettings.xml:821 msgid "Optional name for the 3D physics layer 24." msgstr "" -#: doc/classes/ProjectSettings.xml:822 +#: doc/classes/ProjectSettings.xml:824 msgid "Optional name for the 3D physics layer 25." msgstr "" -#: doc/classes/ProjectSettings.xml:825 +#: doc/classes/ProjectSettings.xml:827 msgid "Optional name for the 3D physics layer 26." msgstr "" -#: doc/classes/ProjectSettings.xml:828 +#: doc/classes/ProjectSettings.xml:830 msgid "Optional name for the 3D physics layer 27." msgstr "" -#: doc/classes/ProjectSettings.xml:831 +#: doc/classes/ProjectSettings.xml:833 msgid "Optional name for the 3D physics layer 28." msgstr "" -#: doc/classes/ProjectSettings.xml:834 +#: doc/classes/ProjectSettings.xml:836 msgid "Optional name for the 3D physics layer 29." msgstr "" -#: doc/classes/ProjectSettings.xml:837 +#: doc/classes/ProjectSettings.xml:839 msgid "Optional name for the 3D physics layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:840 +#: doc/classes/ProjectSettings.xml:842 msgid "Optional name for the 3D physics layer 30." msgstr "" -#: doc/classes/ProjectSettings.xml:843 +#: doc/classes/ProjectSettings.xml:845 msgid "Optional name for the 3D physics layer 31." msgstr "" -#: doc/classes/ProjectSettings.xml:846 +#: doc/classes/ProjectSettings.xml:848 msgid "Optional name for the 3D physics layer 32." msgstr "" -#: doc/classes/ProjectSettings.xml:849 +#: doc/classes/ProjectSettings.xml:851 msgid "Optional name for the 3D physics layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:852 +#: doc/classes/ProjectSettings.xml:854 msgid "Optional name for the 3D physics layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:855 +#: doc/classes/ProjectSettings.xml:857 msgid "Optional name for the 3D physics layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:858 +#: doc/classes/ProjectSettings.xml:860 msgid "Optional name for the 3D physics layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:861 +#: doc/classes/ProjectSettings.xml:863 msgid "Optional name for the 3D physics layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:864 +#: doc/classes/ProjectSettings.xml:866 msgid "Optional name for the 3D physics layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:867 +#: doc/classes/ProjectSettings.xml:869 msgid "Optional name for the 3D render layer 1." msgstr "" -#: doc/classes/ProjectSettings.xml:870 +#: doc/classes/ProjectSettings.xml:872 msgid "Optional name for the 3D render layer 10." msgstr "" -#: doc/classes/ProjectSettings.xml:873 +#: doc/classes/ProjectSettings.xml:875 msgid "Optional name for the 3D render layer 11." msgstr "" -#: doc/classes/ProjectSettings.xml:876 +#: doc/classes/ProjectSettings.xml:878 msgid "Optional name for the 3D render layer 12." msgstr "" -#: doc/classes/ProjectSettings.xml:879 +#: doc/classes/ProjectSettings.xml:881 msgid "Optional name for the 3D render layer 13." msgstr "" -#: doc/classes/ProjectSettings.xml:882 +#: doc/classes/ProjectSettings.xml:884 msgid "Optional name for the 3D render layer 14" msgstr "" -#: doc/classes/ProjectSettings.xml:885 +#: doc/classes/ProjectSettings.xml:887 msgid "Optional name for the 3D render layer 15." msgstr "" -#: doc/classes/ProjectSettings.xml:888 +#: doc/classes/ProjectSettings.xml:890 msgid "Optional name for the 3D render layer 16." msgstr "" -#: doc/classes/ProjectSettings.xml:891 +#: doc/classes/ProjectSettings.xml:893 msgid "Optional name for the 3D render layer 17." msgstr "" -#: doc/classes/ProjectSettings.xml:894 +#: doc/classes/ProjectSettings.xml:896 msgid "Optional name for the 3D render layer 18." msgstr "" -#: doc/classes/ProjectSettings.xml:897 +#: doc/classes/ProjectSettings.xml:899 msgid "Optional name for the 3D render layer 19." msgstr "" -#: doc/classes/ProjectSettings.xml:900 +#: doc/classes/ProjectSettings.xml:902 msgid "Optional name for the 3D render layer 2." msgstr "" -#: doc/classes/ProjectSettings.xml:903 +#: doc/classes/ProjectSettings.xml:905 msgid "Optional name for the 3D render layer 20." msgstr "" -#: doc/classes/ProjectSettings.xml:906 +#: doc/classes/ProjectSettings.xml:908 msgid "Optional name for the 3D render layer 3." msgstr "" -#: doc/classes/ProjectSettings.xml:909 +#: doc/classes/ProjectSettings.xml:911 msgid "Optional name for the 3D render layer 4." msgstr "" -#: doc/classes/ProjectSettings.xml:912 +#: doc/classes/ProjectSettings.xml:914 msgid "Optional name for the 3D render layer 5." msgstr "" -#: doc/classes/ProjectSettings.xml:915 +#: doc/classes/ProjectSettings.xml:917 msgid "Optional name for the 3D render layer 6." msgstr "" -#: doc/classes/ProjectSettings.xml:918 +#: doc/classes/ProjectSettings.xml:920 msgid "Optional name for the 3D render layer 7." msgstr "" -#: doc/classes/ProjectSettings.xml:921 +#: doc/classes/ProjectSettings.xml:923 msgid "Optional name for the 3D render layer 8." msgstr "" -#: doc/classes/ProjectSettings.xml:924 +#: doc/classes/ProjectSettings.xml:926 msgid "Optional name for the 3D render layer 9." msgstr "" -#: doc/classes/ProjectSettings.xml:927 +#: doc/classes/ProjectSettings.xml:929 msgid "" "The locale to fall back to if a translation isn't available in a given " "language. If left empty, [code]en[/code] (English) will be used." msgstr "" -#: doc/classes/ProjectSettings.xml:930 +#: doc/classes/ProjectSettings.xml:932 msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" -#: doc/classes/ProjectSettings.xml:933 +#: doc/classes/ProjectSettings.xml:935 msgid "If [code]true[/code], logs all output to files." msgstr "" -#: doc/classes/ProjectSettings.xml:936 +#: doc/classes/ProjectSettings.xml:938 msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:939 +#: doc/classes/ProjectSettings.xml:941 msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:942 +#: doc/classes/ProjectSettings.xml:944 msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" -#: doc/classes/ProjectSettings.xml:947 +#: doc/classes/ProjectSettings.xml:949 msgid "" "Godot uses a message queue to defer some function calls. If you run out of " "space on it (you will see an error), you can increase the size here." msgstr "" -#: doc/classes/ProjectSettings.xml:950 +#: doc/classes/ProjectSettings.xml:952 msgid "" "This is used by servers when used in multi-threading mode (servers and " "visual). RIDs are preallocated to avoid stalling the server requesting them " @@ -45159,92 +45252,92 @@ msgid "" "thread, increase this number." msgstr "" -#: doc/classes/ProjectSettings.xml:953 +#: doc/classes/ProjectSettings.xml:955 msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:956 +#: doc/classes/ProjectSettings.xml:958 msgid "" "Maximum number of errors allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:959 +#: doc/classes/ProjectSettings.xml:961 msgid "" "Maximum amount of messages allowed to send as output from the debugger. Over " "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:962 +#: doc/classes/ProjectSettings.xml:964 msgid "" "Maximum number of warnings allowed to be sent as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" -#: doc/classes/ProjectSettings.xml:965 +#: doc/classes/ProjectSettings.xml:967 msgid "" "Default size of packet peer stream for deserializing Godot data (in bytes, " "specified as a power of two). The default value [code]16[/code] is equal to " "65,536 bytes. Over this size, data is dropped." msgstr "" -#: doc/classes/ProjectSettings.xml:968 +#: doc/classes/ProjectSettings.xml:970 msgid "Timeout (in seconds) for connection attempts using TCP." msgstr "" -#: doc/classes/ProjectSettings.xml:971 +#: doc/classes/ProjectSettings.xml:973 msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:974 +#: doc/classes/ProjectSettings.xml:976 msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:977 +#: doc/classes/ProjectSettings.xml:979 msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:980 +#: doc/classes/ProjectSettings.xml:982 msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:983 +#: doc/classes/ProjectSettings.xml:985 msgid "Maximum number of concurrent output packets for [WebSocketClient]." msgstr "" -#: doc/classes/ProjectSettings.xml:986 +#: doc/classes/ProjectSettings.xml:988 msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:989 +#: doc/classes/ProjectSettings.xml:991 msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:992 +#: doc/classes/ProjectSettings.xml:994 msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." msgstr "" -#: doc/classes/ProjectSettings.xml:995 +#: doc/classes/ProjectSettings.xml:997 msgid "Maximum number of concurrent output packets for [WebSocketServer]." msgstr "" -#: doc/classes/ProjectSettings.xml:998 +#: doc/classes/ProjectSettings.xml:1000 msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1001 +#: doc/classes/ProjectSettings.xml:1003 msgid "Page size used by remote filesystem (in bytes)." msgstr "" -#: doc/classes/ProjectSettings.xml:1004 +#: doc/classes/ProjectSettings.xml:1006 msgid "" "The CA certificates bundle to use for SSL connections. If this is set to a " "non-empty value, this will [i]override[/i] Godot's default [url=https://" @@ -45254,33 +45347,33 @@ msgid "" "If in doubt, leave this setting empty." msgstr "" -#: doc/classes/ProjectSettings.xml:1008 +#: doc/classes/ProjectSettings.xml:1010 msgid "" "When creating node names automatically, set the type of casing in this " "project. This is mostly an editor setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1011 +#: doc/classes/ProjectSettings.xml:1013 msgid "" "What to use to separate node name from number. This is mostly an editor " "setting." msgstr "" -#: doc/classes/ProjectSettings.xml:1014 +#: doc/classes/ProjectSettings.xml:1016 msgid "" "Size of the hash table used for the broad-phase 2D hash grid algorithm.\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1018 +#: doc/classes/ProjectSettings.xml:1020 msgid "" "Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n" "[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is " "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1022 +#: doc/classes/ProjectSettings.xml:1024 msgid "" "The default angular damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45293,7 +45386,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1026 +#: doc/classes/ProjectSettings.xml:1028 msgid "" "The default gravity strength in 2D (in pixels per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45305,7 +45398,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1034 +#: doc/classes/ProjectSettings.xml:1036 msgid "" "The default gravity direction in 2D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45317,7 +45410,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1042 +#: doc/classes/ProjectSettings.xml:1044 msgid "" "The default linear damp in 2D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45330,7 +45423,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1046 +#: doc/classes/ProjectSettings.xml:1048 msgid "" "Threshold defining the surface size that constitutes a large object with " "regard to cells in the broad-phase 2D hash grid algorithm.\n" @@ -45338,28 +45431,28 @@ msgid "" "enabled." msgstr "" -#: doc/classes/ProjectSettings.xml:1050 +#: doc/classes/ProjectSettings.xml:1052 msgid "" "Sets which physics engine to use for 2D physics.\n" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" -#: doc/classes/ProjectSettings.xml:1054 +#: doc/classes/ProjectSettings.xml:1056 msgid "" "Threshold angular velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1057 +#: doc/classes/ProjectSettings.xml:1059 msgid "" "Threshold linear velocity under which a 2D physics body will be considered " "inactive. See [constant Physics2DServer." "SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]." msgstr "" -#: doc/classes/ProjectSettings.xml:1060 +#: doc/classes/ProjectSettings.xml:1062 msgid "" "Sets whether physics is run on the main thread or a separate one. Running " "the server on a thread increases performance, but restricts API access to " @@ -45369,25 +45462,25 @@ msgid "" "give you extra performance and no regressions when using it." msgstr "" -#: doc/classes/ProjectSettings.xml:1064 +#: doc/classes/ProjectSettings.xml:1066 msgid "" "Time (in seconds) of inactivity before which a 2D physics body will put to " "sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]." msgstr "" -#: doc/classes/ProjectSettings.xml:1067 +#: doc/classes/ProjectSettings.xml:1069 msgid "" "Enables the use of bounding volume hierarchy instead of hash grid for 2D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1070 +#: doc/classes/ProjectSettings.xml:1072 msgid "" "Sets whether the 3D physics world will be created with support for " "[SoftBody] physics. Only applies to the Bullet physics engine." msgstr "" -#: doc/classes/ProjectSettings.xml:1073 +#: doc/classes/ProjectSettings.xml:1075 msgid "" "The default angular damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45400,7 +45493,7 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1077 +#: doc/classes/ProjectSettings.xml:1079 msgid "" "The default gravity strength in 3D (in meters per second squared).\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45412,7 +45505,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1085 +#: doc/classes/ProjectSettings.xml:1087 msgid "" "The default gravity direction in 3D.\n" "[b]Note:[/b] This property is only read when the project starts. To change " @@ -45424,7 +45517,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/ProjectSettings.xml:1093 +#: doc/classes/ProjectSettings.xml:1095 msgid "" "The default linear damp in 3D.\n" "[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. " @@ -45437,13 +45530,13 @@ msgid "" "stop in one iteration." msgstr "" -#: doc/classes/ProjectSettings.xml:1097 +#: doc/classes/ProjectSettings.xml:1099 msgid "" "Enables the use of bounding volume hierarchy instead of octree for 3D " "physics spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1100 +#: doc/classes/ProjectSettings.xml:1102 msgid "" "Sets which physics engine to use for 3D physics.\n" "\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] " @@ -45451,11 +45544,11 @@ msgid "" "alternative." msgstr "" -#: doc/classes/ProjectSettings.xml:1104 +#: doc/classes/ProjectSettings.xml:1106 msgid "Enables [member Viewport.physics_object_picking] on the root viewport." msgstr "" -#: doc/classes/ProjectSettings.xml:1107 +#: doc/classes/ProjectSettings.xml:1109 msgid "" "If enabled, 2D and 3D physics picking behaves this way in relation to " "pause:\n" @@ -45469,7 +45562,7 @@ msgid "" "that queue on resume, against the state of the 2D/3D world at that point." msgstr "" -#: doc/classes/ProjectSettings.xml:1113 +#: doc/classes/ProjectSettings.xml:1115 msgid "" "The number of fixed iterations per second. This controls how often physics " "simulation and [method Node._physics_process] methods are run.\n" @@ -45478,7 +45571,7 @@ msgid "" "instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1117 +#: doc/classes/ProjectSettings.xml:1119 msgid "" "Controls how much physics ticks are synchronized with real time. For 0 or " "less, the ticks are synchronized. Such values are recommended for network " @@ -45494,7 +45587,7 @@ msgid "" "the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead." msgstr "" -#: doc/classes/ProjectSettings.xml:1122 +#: doc/classes/ProjectSettings.xml:1124 msgid "" "[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to " "uploading batching data. This may not be necessary but can be used for " @@ -45504,7 +45597,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1126 +#: doc/classes/ProjectSettings.xml:1128 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45514,7 +45607,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1130 +#: doc/classes/ProjectSettings.xml:1132 msgid "" "[b]Experimental.[/b] If set to on, this applies buffer orphaning - " "[code]glBufferData[/code] is called with NULL data and the full buffer size " @@ -45525,7 +45618,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1134 +#: doc/classes/ProjectSettings.xml:1136 msgid "" "[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag " "for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] " @@ -45535,7 +45628,7 @@ msgid "" "adversely affect performance for end users." msgstr "" -#: doc/classes/ProjectSettings.xml:1138 +#: doc/classes/ProjectSettings.xml:1140 msgid "" "Choose between fixed mode where corner scalings are preserved matching the " "artwork, and scaling mode.\n" @@ -45543,7 +45636,7 @@ msgid "" "is off." msgstr "" -#: doc/classes/ProjectSettings.xml:1142 +#: doc/classes/ProjectSettings.xml:1144 msgid "" "Some NVIDIA GPU drivers have a bug which produces flickering issues for the " "[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to " @@ -45554,7 +45647,7 @@ msgid "" "rendering, but only on desktop platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1146 +#: doc/classes/ProjectSettings.xml:1148 msgid "" "If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. " "This provides greater compatibility with a wide range of hardware, and also " @@ -45569,7 +45662,7 @@ msgid "" "skinning." msgstr "" -#: doc/classes/ProjectSettings.xml:1152 +#: doc/classes/ProjectSettings.xml:1154 msgid "" "If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. " "May help in some pixel art styles.\n" @@ -45578,13 +45671,13 @@ msgid "" "uv_contract] to prevent artifacts." msgstr "" -#: doc/classes/ProjectSettings.xml:1157 +#: doc/classes/ProjectSettings.xml:1159 msgid "" "When batching is on, this regularly prints a frame diagnosis log. Note that " "this will degrade performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1160 +#: doc/classes/ProjectSettings.xml:1162 msgid "" "[b]Experimental.[/b] For regression testing against the old renderer. If " "this is switched on, and [code]use_batching[/code] is set, the renderer will " @@ -45593,7 +45686,7 @@ msgid "" "Performance will be degraded." msgstr "" -#: doc/classes/ProjectSettings.xml:1163 +#: doc/classes/ProjectSettings.xml:1165 msgid "" "Lights have the potential to prevent joining items, and break many of the " "performance benefits of batching. This setting enables some complex logic to " @@ -45603,7 +45696,7 @@ msgid "" "returns." msgstr "" -#: doc/classes/ProjectSettings.xml:1166 +#: doc/classes/ProjectSettings.xml:1168 msgid "" "Sets the proportion of the total screen area (in pixels) that must be saved " "by a scissor operation in order to activate light scissoring. This can " @@ -45615,7 +45708,7 @@ msgid "" "a lot of lighting." msgstr "" -#: doc/classes/ProjectSettings.xml:1169 +#: doc/classes/ProjectSettings.xml:1171 msgid "" "Enabling this setting uses the legacy method to draw batches containing only " "one rect. The legacy method is faster (approx twice as fast), but can cause " @@ -45625,24 +45718,24 @@ msgid "" "this method." msgstr "" -#: doc/classes/ProjectSettings.xml:1172 +#: doc/classes/ProjectSettings.xml:1174 msgid "" "Turns 2D batching on and off. Batching increases performance by reducing the " "amount of graphics API drawcalls." msgstr "" -#: doc/classes/ProjectSettings.xml:1175 +#: doc/classes/ProjectSettings.xml:1177 msgid "Switches on 2D batching within the editor." msgstr "" -#: doc/classes/ProjectSettings.xml:1178 +#: doc/classes/ProjectSettings.xml:1180 msgid "" "Size of buffer reserved for batched vertices. Larger size enables larger " "batches, but there are diminishing returns for the memory used. This should " "only have a minor effect on performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1181 +#: doc/classes/ProjectSettings.xml:1183 msgid "" "Including color in the vertex format has a cost, however, not including " "color prevents batching across color changes. This threshold determines the " @@ -45651,7 +45744,7 @@ msgid "" "0 will always use colored vertices, 1 will never use colored vertices." msgstr "" -#: doc/classes/ProjectSettings.xml:1184 +#: doc/classes/ProjectSettings.xml:1186 msgid "" "In certain circumstances, the batcher can reorder items in order to better " "join them. This may result in better performance. An overlap test is needed " @@ -45659,7 +45752,7 @@ msgid "" "returns. If you are getting no benefit, setting this to 0 will switch it off." msgstr "" -#: doc/classes/ProjectSettings.xml:1187 +#: doc/classes/ProjectSettings.xml:1189 msgid "" "Sets the number of commands to lookahead to determine whether to batch " "render items. A value of 1 can join items consisting of single commands, 0 " @@ -45668,7 +45761,7 @@ msgid "" "recommended." msgstr "" -#: doc/classes/ProjectSettings.xml:1190 +#: doc/classes/ProjectSettings.xml:1192 msgid "" "On some platforms (especially mobile), precision issues in shaders can lead " "to reading 1 texel outside of bounds, particularly where rects are scaled. " @@ -45678,7 +45771,7 @@ msgid "" "texels." msgstr "" -#: doc/classes/ProjectSettings.xml:1194 +#: doc/classes/ProjectSettings.xml:1196 msgid "" "The amount of UV contraction. This figure is divided by 1000000, and is a " "proportion of the total texture dimensions, where the width and height are " @@ -45686,31 +45779,31 @@ msgid "" "Use the default unless correcting for a problem on particular hardware." msgstr "" -#: doc/classes/ProjectSettings.xml:1198 +#: doc/classes/ProjectSettings.xml:1200 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_HIGH]." msgstr "" -#: doc/classes/ProjectSettings.xml:1201 +#: doc/classes/ProjectSettings.xml:1203 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_LOW]." msgstr "" -#: doc/classes/ProjectSettings.xml:1204 +#: doc/classes/ProjectSettings.xml:1206 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_MEDIUM]." msgstr "" -#: doc/classes/ProjectSettings.xml:1207 +#: doc/classes/ProjectSettings.xml:1209 msgid "" "Amount of light samples taken when using [constant BakedLightmap." "BAKE_QUALITY_ULTRA]." msgstr "" -#: doc/classes/ProjectSettings.xml:1210 +#: doc/classes/ProjectSettings.xml:1212 msgid "" "Default background clear color. Overridable per [Viewport] using its " "[Environment]. See [member Environment.background_mode] and [member " @@ -45718,7 +45811,7 @@ msgid "" "programmatically, use [method VisualServer.set_default_clear_color]." msgstr "" -#: doc/classes/ProjectSettings.xml:1213 +#: doc/classes/ProjectSettings.xml:1215 msgid "" "[Environment] that will be used as a fallback environment in case a scene " "does not specify its own environment. The default environment is loaded in " @@ -45728,21 +45821,21 @@ msgid "" "here." msgstr "" -#: doc/classes/ProjectSettings.xml:1216 +#: doc/classes/ProjectSettings.xml:1218 msgid "" "The use of half-float vertex compression may be producing rendering errors " "on some platforms (especially iOS). These have been seen particularly in " "particles. Disabling half-float may resolve these problems." msgstr "" -#: doc/classes/ProjectSettings.xml:1219 +#: doc/classes/ProjectSettings.xml:1221 msgid "" "iOS specific override for [member rendering/gles2/compatibility/" "disable_half_float], due to poor support for half-float vertex compression " "on many devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1222 +#: doc/classes/ProjectSettings.xml:1224 msgid "" "If [code]true[/code] and available on the target Android device, enables " "high floating point precision for all shader computations in GLES2.\n" @@ -45750,31 +45843,31 @@ msgid "" "devices and is often not available at all. Use with caution." msgstr "" -#: doc/classes/ProjectSettings.xml:1226 +#: doc/classes/ProjectSettings.xml:1228 msgid "" "Max buffer size for blend shapes. Any blend shape bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1229 +#: doc/classes/ProjectSettings.xml:1231 msgid "" "Max buffer size for drawing polygons. Any polygon bigger than this will not " "work." msgstr "" -#: doc/classes/ProjectSettings.xml:1232 +#: doc/classes/ProjectSettings.xml:1234 msgid "" "Max index buffer size for drawing polygons. Any polygon bigger than this " "will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1235 +#: doc/classes/ProjectSettings.xml:1237 msgid "" "Max buffer size for drawing immediate objects (ImmediateGeometry nodes). " "Nodes using more than this size will not work." msgstr "" -#: doc/classes/ProjectSettings.xml:1238 +#: doc/classes/ProjectSettings.xml:1240 msgid "" "Max number of lights renderable per object. This is further limited by " "hardware support. Most devices only support 409 lights, while many devices " @@ -45782,7 +45875,7 @@ msgid "" "memory usage and may decrease shader compile times." msgstr "" -#: doc/classes/ProjectSettings.xml:1241 +#: doc/classes/ProjectSettings.xml:1243 msgid "" "Max amount of elements renderable in a frame. If more elements than this are " "visible per frame, they will not be drawn. Keep in mind elements refer to " @@ -45792,7 +45885,7 @@ msgid "" "much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1244 +#: doc/classes/ProjectSettings.xml:1246 msgid "" "Max number of lights renderable in a frame. If more lights than this number " "are used, they will be ignored. Setting this low will slightly reduce memory " @@ -45801,7 +45894,7 @@ msgid "" "possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1247 +#: doc/classes/ProjectSettings.xml:1249 msgid "" "Max number of reflection probes renderable in a frame. If more reflection " "probes than this number are used, they will be ignored. Setting this low " @@ -45810,20 +45903,20 @@ msgid "" "consider lowering as much as possible on web export." msgstr "" -#: doc/classes/ProjectSettings.xml:1250 +#: doc/classes/ProjectSettings.xml:1252 msgid "" "Shaders have a time variable that constantly increases. At some point, it " "needs to be rolled back to zero to avoid precision errors on shader " "animations. This setting specifies when (in seconds)." msgstr "" -#: doc/classes/ProjectSettings.xml:1253 +#: doc/classes/ProjectSettings.xml:1255 msgid "" "If [code]true[/code], the texture importer will import lossless textures " "using the PNG format. Otherwise, it will default to using WebP." msgstr "" -#: doc/classes/ProjectSettings.xml:1256 +#: doc/classes/ProjectSettings.xml:1258 msgid "" "The default compression level for lossless WebP. Higher levels result in " "smaller files at the cost of compression speed. Decompression speed is " @@ -45832,7 +45925,7 @@ msgid "" "savings." msgstr "" -#: doc/classes/ProjectSettings.xml:1259 +#: doc/classes/ProjectSettings.xml:1261 msgid "" "On import, mesh vertex data will be split into two streams within a single " "vertex buffer, one for position data and the other for interleaved " @@ -45840,7 +45933,7 @@ msgid "" "Requires manual reimport of meshes after toggling." msgstr "" -#: doc/classes/ProjectSettings.xml:1262 +#: doc/classes/ProjectSettings.xml:1264 msgid "" "Determines the maximum number of sphere occluders that will be used at any " "one time.\n" @@ -45849,7 +45942,7 @@ msgid "" "to give the best overall performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1266 +#: doc/classes/ProjectSettings.xml:1268 msgid "" "The default convention is for portal normals to point outward (face outward) " "from the source room.\n" @@ -45859,20 +45952,20 @@ msgid "" "convertion to [Portal] nodes." msgstr "" -#: doc/classes/ProjectSettings.xml:1271 +#: doc/classes/ProjectSettings.xml:1273 msgid "" "Show conversion logs.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1275 +#: doc/classes/ProjectSettings.xml:1277 msgid "" "If [code]true[/code], gameplay callbacks will be sent as [code]signals[/" "code]. If [code]false[/code], they will be sent as [code]notifications[/" "code]." msgstr "" -#: doc/classes/ProjectSettings.xml:1278 +#: doc/classes/ProjectSettings.xml:1280 msgid "" "If enabled, while merging meshes, the system will also attempt to remove " "[Spatial] nodes that no longer have any children.\n" @@ -45881,13 +45974,13 @@ msgid "" "for markers or some other purpose." msgstr "" -#: doc/classes/ProjectSettings.xml:1282 +#: doc/classes/ProjectSettings.xml:1284 msgid "" "Show logs during PVS generation.\n" "[b]Note:[/b] This will automatically be disabled in exports." msgstr "" -#: doc/classes/ProjectSettings.xml:1286 +#: doc/classes/ProjectSettings.xml:1288 msgid "" "Uses a simplified method of generating PVS (potentially visible set) data. " "The results may not be accurate where more than one portal join adjacent " @@ -45897,46 +45990,46 @@ msgid "" "default method." msgstr "" -#: doc/classes/ProjectSettings.xml:1290 +#: doc/classes/ProjectSettings.xml:1292 msgid "" "If [code]true[/code], allocates the main framebuffer with high dynamic " "range. High dynamic range allows the use of [Color] values greater than 1.\n" "[b]Note:[/b] Only available on the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1294 +#: doc/classes/ProjectSettings.xml:1296 msgid "" "Lower-end override for [member rendering/quality/depth/hdr] on mobile " "devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1297 +#: doc/classes/ProjectSettings.xml:1299 msgid "" "Disables depth pre-pass for some GPU vendors (usually mobile), as their " "architecture already does this." msgstr "" -#: doc/classes/ProjectSettings.xml:1300 +#: doc/classes/ProjectSettings.xml:1302 msgid "" "If [code]true[/code], performs a previous depth pass before rendering " "materials. This increases performance in scenes with high overdraw, when " "complex materials and lighting are used." msgstr "" -#: doc/classes/ProjectSettings.xml:1303 +#: doc/classes/ProjectSettings.xml:1305 msgid "" "The directional shadow's size in pixels. Higher values will result in " "sharper shadows, at the cost of performance. The value will be rounded up to " "the nearest power of 2." msgstr "" -#: doc/classes/ProjectSettings.xml:1306 +#: doc/classes/ProjectSettings.xml:1308 msgid "" "Lower-end override for [member rendering/quality/directional_shadow/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1309 +#: doc/classes/ProjectSettings.xml:1311 msgid "" "The video driver to use (\"GLES2\" or \"GLES3\").\n" "[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--" @@ -45946,7 +46039,7 @@ msgid "" "updated, so use [method OS.get_current_video_driver] to query it at run-time." msgstr "" -#: doc/classes/ProjectSettings.xml:1313 +#: doc/classes/ProjectSettings.xml:1315 msgid "" "If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 " "driver is not supported.\n" @@ -45958,7 +46051,7 @@ msgid "" "data pack's size." msgstr "" -#: doc/classes/ProjectSettings.xml:1317 +#: doc/classes/ProjectSettings.xml:1319 msgid "" "Maximum anisotropic filter level used for textures with anisotropy enabled. " "Higher values will result in sharper textures when viewed from oblique " @@ -45966,7 +46059,7 @@ msgid "" "4, 8, 16)." msgstr "" -#: doc/classes/ProjectSettings.xml:1320 +#: doc/classes/ProjectSettings.xml:1322 msgid "" "Sets the number of MSAA samples to use. MSAA is used to reduce aliasing " "around the edges of polygons. A higher MSAA value results in smoother edges " @@ -45974,7 +46067,7 @@ msgid "" "[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1324 +#: doc/classes/ProjectSettings.xml:1326 msgid "" "If set to a value greater than [code]0.0[/code], contrast-adaptive " "sharpening will be applied to the 3D viewport. This has a low performance " @@ -45983,7 +46076,7 @@ msgid "" "[member rendering/quality/filters/use_fxaa]." msgstr "" -#: doc/classes/ProjectSettings.xml:1327 +#: doc/classes/ProjectSettings.xml:1329 msgid "" "If [code]true[/code], uses a fast post-processing filter to make banding " "significantly less visible. In some cases, debanding may introduce a " @@ -45997,7 +46090,7 @@ msgid "" "disabled when targeting mobile platforms." msgstr "" -#: doc/classes/ProjectSettings.xml:1332 +#: doc/classes/ProjectSettings.xml:1334 msgid "" "Enables FXAA in the root Viewport. FXAA is a popular screen-space " "antialiasing method, which is fast but will make the image look blurry, " @@ -46007,7 +46100,7 @@ msgid "" "quality/filters/sharpen_intensity])." msgstr "" -#: doc/classes/ProjectSettings.xml:1335 +#: doc/classes/ProjectSettings.xml:1337 msgid "" "If [code]true[/code], uses nearest-neighbor mipmap filtering when using " "mipmaps (also called \"bilinear filtering\"), which will result in visible " @@ -46016,7 +46109,7 @@ msgid "" "mipmap filtering (also called \"trilinear filtering\") is used." msgstr "" -#: doc/classes/ProjectSettings.xml:1338 +#: doc/classes/ProjectSettings.xml:1340 msgid "" "Strategy used for framebuffer allocation. The simpler it is, the less " "resources it uses (but the less features it supports). If set to \"2D " @@ -46026,54 +46119,54 @@ msgid "" "be available in the [Environment]." msgstr "" -#: doc/classes/ProjectSettings.xml:1341 +#: doc/classes/ProjectSettings.xml:1343 msgid "" "Lower-end override for [member rendering/quality/intended_usage/" "framebuffer_allocation] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1344 +#: doc/classes/ProjectSettings.xml:1346 msgid "" "Enable usage of bicubic sampling in baked lightmaps. This results in " "smoother looking lighting at the expense of more bandwidth usage. On GLES2, " "changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1347 +#: doc/classes/ProjectSettings.xml:1349 msgid "" "Lower-end override for [member rendering/quality/lightmapping/" "use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage." msgstr "" -#: doc/classes/ProjectSettings.xml:1350 +#: doc/classes/ProjectSettings.xml:1352 msgid "" "Size of the atlas used by reflection probes. A larger size can result in " "higher visual quality, while a smaller size will be faster and take up less " "memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1353 +#: doc/classes/ProjectSettings.xml:1355 msgid "" "Number of subdivisions to use for the reflection atlas. A higher number " "lowers the quality of each atlas, but allows you to use more." msgstr "" -#: doc/classes/ProjectSettings.xml:1356 +#: doc/classes/ProjectSettings.xml:1358 msgid "" "If [code]true[/code], uses a high amount of samples to create blurred " "variants of reflection probes and panorama backgrounds (sky). Those blurred " "variants are used by rough materials." msgstr "" -#: doc/classes/ProjectSettings.xml:1359 +#: doc/classes/ProjectSettings.xml:1361 msgid "" "Lower-end override for [member rendering/quality/reflections/" "high_quality_ggx] on mobile devices, due to performance concerns or driver " "support." msgstr "" -#: doc/classes/ProjectSettings.xml:1362 +#: doc/classes/ProjectSettings.xml:1364 msgid "" "Limits the size of the irradiance map which is normally determined by " "[member Sky.radiance_size]. A higher size results in a higher quality " @@ -46084,61 +46177,61 @@ msgid "" "maps well and may crash if this is set too high." msgstr "" -#: doc/classes/ProjectSettings.xml:1366 +#: doc/classes/ProjectSettings.xml:1368 msgid "" "If [code]true[/code], uses texture arrays instead of mipmaps for reflection " "probes and panorama backgrounds (sky). This reduces jitter noise on " "reflections, but costs more performance and memory." msgstr "" -#: doc/classes/ProjectSettings.xml:1369 +#: doc/classes/ProjectSettings.xml:1371 msgid "" "Lower-end override for [member rendering/quality/reflections/" "texture_array_reflections] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1372 +#: doc/classes/ProjectSettings.xml:1374 msgid "" "If [code]true[/code], uses faster but lower-quality Blinn model to generate " "blurred reflections instead of the GGX model." msgstr "" -#: doc/classes/ProjectSettings.xml:1375 +#: doc/classes/ProjectSettings.xml:1377 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_blinn_over_ggx] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1378 +#: doc/classes/ProjectSettings.xml:1380 msgid "" "If [code]true[/code], uses faster but lower-quality Lambert material " "lighting model instead of Burley." msgstr "" -#: doc/classes/ProjectSettings.xml:1381 +#: doc/classes/ProjectSettings.xml:1383 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_lambert_over_burley] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1384 +#: doc/classes/ProjectSettings.xml:1386 msgid "" "If [code]true[/code], forces vertex shading for all rendering. This can " "increase performance a lot, but also reduces quality immensely. Can be used " "to optimize performance on low-end mobile devices." msgstr "" -#: doc/classes/ProjectSettings.xml:1387 +#: doc/classes/ProjectSettings.xml:1389 msgid "" "Lower-end override for [member rendering/quality/shading/" "force_vertex_shading] on mobile devices, due to performance concerns or " "driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1390 +#: doc/classes/ProjectSettings.xml:1392 msgid "" "If [code]true[/code], enables new physical light attenuation for " "[OmniLight]s and [SpotLight]s. This results in more realistic lighting " @@ -46149,7 +46242,7 @@ msgid "" "Changes to this setting will only be applied upon restarting the application." msgstr "" -#: doc/classes/ProjectSettings.xml:1394 +#: doc/classes/ProjectSettings.xml:1396 msgid "" "Size for cubemap into which the shadow is rendered before being copied into " "the shadow atlas. A higher number can result in higher resolution shadows " @@ -46158,26 +46251,26 @@ msgid "" "size] will not result in a perceptible increase in visual quality." msgstr "" -#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400 -#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406 +#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402 +#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408 msgid "" "Subdivision quadrant size for shadow mapping. See shadow mapping " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1409 +#: doc/classes/ProjectSettings.xml:1411 msgid "" "Size for shadow atlas (used for OmniLights and SpotLights). See " "documentation." msgstr "" -#: doc/classes/ProjectSettings.xml:1412 +#: doc/classes/ProjectSettings.xml:1414 msgid "" "Lower-end override for [member rendering/quality/shadow_atlas/size] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1415 +#: doc/classes/ProjectSettings.xml:1417 msgid "" "Shadow filter mode. Higher-quality settings result in smoother shadows that " "flicker less when moving. \"Disabled\" is the fastest option, but also has " @@ -46188,20 +46281,20 @@ msgid "" "shadow appearance similar to the one produced by the GLES3 backend." msgstr "" -#: doc/classes/ProjectSettings.xml:1419 +#: doc/classes/ProjectSettings.xml:1421 msgid "" "Lower-end override for [member rendering/quality/shadows/filter_mode] on " "mobile devices, due to performance concerns or driver support." msgstr "" -#: doc/classes/ProjectSettings.xml:1422 +#: doc/classes/ProjectSettings.xml:1424 msgid "" "Forces [MeshInstance] to always perform skinning on the CPU (applies to both " "GLES2 and GLES3).\n" "See also [member rendering/quality/skinning/software_skinning_fallback]." msgstr "" -#: doc/classes/ProjectSettings.xml:1426 +#: doc/classes/ProjectSettings.xml:1428 msgid "" "Allows [MeshInstance] to perform skinning on the CPU when the hardware " "doesn't support the default GPU skinning process with GLES2.\n" @@ -46213,52 +46306,52 @@ msgid "" "already applied to the modelview matrix." msgstr "" -#: doc/classes/ProjectSettings.xml:1432 +#: doc/classes/ProjectSettings.xml:1434 msgid "" "The rendering octree balance can be changed to favor smaller ([code]0[/" "code]), or larger ([code]1[/code]) branches.\n" "Larger branches can increase performance significantly in some projects." msgstr "" -#: doc/classes/ProjectSettings.xml:1436 +#: doc/classes/ProjectSettings.xml:1438 msgid "" "Enables the use of bounding volume hierarchy instead of octree for rendering " "spatial partitioning. This may give better performance." msgstr "" -#: doc/classes/ProjectSettings.xml:1439 +#: doc/classes/ProjectSettings.xml:1441 msgid "" "Improves quality of subsurface scattering, but cost significantly increases." msgstr "" -#: doc/classes/ProjectSettings.xml:1442 +#: doc/classes/ProjectSettings.xml:1444 msgid "Quality setting for subsurface scattering (samples taken)." msgstr "" -#: doc/classes/ProjectSettings.xml:1445 +#: doc/classes/ProjectSettings.xml:1447 msgid "Max radius used for subsurface scattering samples." msgstr "" -#: doc/classes/ProjectSettings.xml:1448 +#: doc/classes/ProjectSettings.xml:1450 msgid "" "Weight subsurface scattering samples. Helps to avoid reading samples from " "unrelated parts of the screen." msgstr "" -#: doc/classes/ProjectSettings.xml:1451 +#: doc/classes/ProjectSettings.xml:1453 msgid "" "Use high-quality voxel cone tracing. This results in better-looking " "reflections, but is much more expensive on the GPU." msgstr "" -#: doc/classes/ProjectSettings.xml:1454 +#: doc/classes/ProjectSettings.xml:1456 msgid "" "Thread model for rendering. Rendering on a thread can vastly improve " "performance, but synchronizing to the main thread can cause a bit more " "jitter." msgstr "" -#: doc/classes/ProjectSettings.xml:1457 +#: doc/classes/ProjectSettings.xml:1459 msgid "" "If [code]true[/code], a thread safe version of BVH (bounding volume " "hierarchy) will be used in rendering and Godot physics.\n" @@ -46266,7 +46359,7 @@ msgid "" "incorrect object visibility)." msgstr "" -#: doc/classes/ProjectSettings.xml:1461 +#: doc/classes/ProjectSettings.xml:1463 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the BPTC algorithm. This texture compression algorithm is " @@ -46279,7 +46372,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1465 +#: doc/classes/ProjectSettings.xml:1467 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression algorithm. This algorithm " @@ -46291,7 +46384,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1469 +#: doc/classes/ProjectSettings.xml:1471 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the Ericsson Texture Compression 2 algorithm. This texture " @@ -46303,7 +46396,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1473 +#: doc/classes/ProjectSettings.xml:1475 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the PowerVR Texture Compression algorithm. This texture " @@ -46315,7 +46408,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1477 +#: doc/classes/ProjectSettings.xml:1479 msgid "" "If [code]true[/code], the texture importer will import VRAM-compressed " "textures using the S3 Texture Compression algorithm. This algorithm is only " @@ -46327,7 +46420,7 @@ msgid "" "application/config/use_hidden_project_data_directory])." msgstr "" -#: doc/classes/ProjectSettings.xml:1481 +#: doc/classes/ProjectSettings.xml:1483 msgid "" "Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in " "pixels)." @@ -46991,40 +47084,54 @@ msgid "" msgstr "" #: doc/classes/Rect2.xml:59 -msgid "Returns this [Rect2] expanded to include a given point." +msgid "" +"Returns a copy of this [Rect2] expanded to include a given point.\n" +"[b]Example:[/b]\n" +"[codeblock]\n" +"# position (-3, 2), size (1, 1)\n" +"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n" +"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n" +"var rect2 = rect.expand(Vector2(0, -1))\n" +"[/codeblock]" msgstr "" -#: doc/classes/Rect2.xml:65 +#: doc/classes/Rect2.xml:72 msgid "Returns the area of the [Rect2]." msgstr "" -#: doc/classes/Rect2.xml:72 +#: doc/classes/Rect2.xml:79 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards all the " "sides." msgstr "" -#: doc/classes/Rect2.xml:82 +#: doc/classes/Rect2.xml:89 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards each " "direction individually." msgstr "" -#: doc/classes/Rect2.xml:90 +#: doc/classes/Rect2.xml:97 msgid "" "Returns a copy of the [Rect2] grown a given amount of units towards the " "[enum Margin] direction." msgstr "" -#: doc/classes/Rect2.xml:96 +#: doc/classes/Rect2.xml:103 msgid "Returns [code]true[/code] if the [Rect2] is flat or empty." msgstr "" -#: doc/classes/Rect2.xml:103 -msgid "Returns [code]true[/code] if the [Rect2] contains a point." +#: doc/classes/Rect2.xml:110 +msgid "" +"Returns [code]true[/code] if the [Rect2] contains a point. By convention, " +"the right and bottom edges of the [Rect2] are considered exclusive, so " +"points on these edges are [b]not[/b] included.\n" +"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative " +"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to " +"check for contained points." msgstr "" -#: doc/classes/Rect2.xml:111 +#: doc/classes/Rect2.xml:119 msgid "" "Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. " "they have at least one point in common).\n" @@ -47032,14 +47139,14 @@ msgid "" "considered overlapping if their borders touch, even without intersection." msgstr "" -#: doc/classes/Rect2.xml:119 +#: doc/classes/Rect2.xml:127 msgid "" "Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are " "approximately equal, by calling [code]is_equal_approx[/code] on each " "component." msgstr "" -#: doc/classes/Rect2.xml:126 +#: doc/classes/Rect2.xml:134 msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]." msgstr "" @@ -49374,6 +49481,22 @@ msgstr "" #: doc/classes/RoomManager.xml:79 msgid "" +"In order to reduce processing for roaming objects, an expansion is applied " +"to their AABB as they move. This expanded volume is used to calculate which " +"rooms the roaming object is within. If the object's exact AABB is still " +"within this expanded volume on the next move, there is no need to reprocess " +"the object, which can save considerable CPU.\n" +"The downside is that if the expansion is too much, the object may end up " +"unexpectedly sprawling into neighbouring rooms and showing up where it might " +"otherwise be culled.\n" +"In order to balance roaming performance against culling accuracy, this " +"expansion margin can be customized by the user. It will typically depend on " +"your room and object sizes, and movement speeds. The default value should " +"work reasonably in most circumstances." +msgstr "" + +#: doc/classes/RoomManager.xml:84 +msgid "" "During the conversion process, the geometry of objects within [Room]s, or a " "custom specified manual bound, are used to generate a [b]convex hull bound[/" "b].\n" @@ -49391,7 +49514,7 @@ msgid "" "The room convex hulls are shown as a wireframe in the editor." msgstr "" -#: doc/classes/RoomManager.xml:86 +#: doc/classes/RoomManager.xml:91 msgid "" "For the [Room] conversion process to succeed, you must point the " "[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which " @@ -49399,11 +49522,11 @@ msgid "" "type, it is normally just a [Spatial])." msgstr "" -#: doc/classes/RoomManager.xml:89 +#: doc/classes/RoomManager.xml:94 msgid "Shows the [Portal] margins when the portal gizmo is used in the editor." msgstr "" -#: doc/classes/RoomManager.xml:92 +#: doc/classes/RoomManager.xml:97 msgid "" "When receiving gameplay callbacks when objects enter and exit gameplay, the " "[b]gameplay area[/b] can be defined by either the primary PVS (potentially " @@ -49413,19 +49536,19 @@ msgid "" "preferable." msgstr "" -#: doc/classes/RoomManager.xml:98 +#: doc/classes/RoomManager.xml:103 msgid "" "Use only [Portal]s at runtime to determine visibility. PVS will not be " "generated at [Room]s conversion, and gameplay notifications cannot be used." msgstr "" -#: doc/classes/RoomManager.xml:101 +#: doc/classes/RoomManager.xml:106 msgid "" "Use a combination of PVS and [Portal]s to determine visibility (this is " "usually fastest and most accurate)." msgstr "" -#: doc/classes/RoomManager.xml:104 +#: doc/classes/RoomManager.xml:109 msgid "" "Use only the PVS (potentially visible set) of [Room]s to determine " "visibility." @@ -54842,20 +54965,25 @@ msgstr "" #: doc/classes/SurfaceTool.xml:115 msgid "" "Append vertices from a given [Mesh] surface onto the current vertex array " -"with specified [Transform]." +"with specified [Transform].\n" +"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the " +"GPU must communicate data back to the CPU, while also causing the main " +"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy " +"of the mesh, converting it to an [ArrayMesh] and adding vertices manually " +"instead." msgstr "" -#: doc/classes/SurfaceTool.xml:122 +#: doc/classes/SurfaceTool.xml:123 msgid "" "Called before adding any vertices. Takes the primitive type as an argument " "(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])." msgstr "" -#: doc/classes/SurfaceTool.xml:128 +#: doc/classes/SurfaceTool.xml:129 msgid "Clear all information passed into the surface tool so far." msgstr "" -#: doc/classes/SurfaceTool.xml:136 +#: doc/classes/SurfaceTool.xml:137 msgid "" "Returns a constructed [ArrayMesh] from current information passed in. If an " "existing [ArrayMesh] is passed in as an argument, will add an extra surface " @@ -54866,28 +54994,28 @@ msgid "" "constants in [enum Mesh.ArrayFormat] for other flags." msgstr "" -#: doc/classes/SurfaceTool.xml:143 +#: doc/classes/SurfaceTool.xml:144 msgid "" "Commits the data to the same format used by [method ArrayMesh." "add_surface_from_arrays]. This way you can further process the mesh data " "using the [ArrayMesh] API." msgstr "" -#: doc/classes/SurfaceTool.xml:151 +#: doc/classes/SurfaceTool.xml:152 msgid "Creates a vertex array from an existing [Mesh]." msgstr "" -#: doc/classes/SurfaceTool.xml:160 +#: doc/classes/SurfaceTool.xml:161 msgid "" "Creates a vertex array from the specified blend shape of an existing [Mesh]. " "This can be used to extract a specific pose from a blend shape." msgstr "" -#: doc/classes/SurfaceTool.xml:166 +#: doc/classes/SurfaceTool.xml:167 msgid "Removes the index array by expanding the vertex array." msgstr "" -#: doc/classes/SurfaceTool.xml:173 +#: doc/classes/SurfaceTool.xml:174 msgid "" "Generates normals from vertices so you do not have to do it manually. If " "[code]flip[/code] is [code]true[/code], the resulting normals will be " @@ -54899,19 +55027,19 @@ msgid "" "be set to [constant Mesh.PRIMITIVE_TRIANGLES]." msgstr "" -#: doc/classes/SurfaceTool.xml:180 +#: doc/classes/SurfaceTool.xml:181 msgid "" "Generates a tangent vector for each vertex. Requires that each vertex have " "UVs and normals set already (see [method generate_normals])." msgstr "" -#: doc/classes/SurfaceTool.xml:186 +#: doc/classes/SurfaceTool.xml:187 msgid "" "Shrinks the vertex array by creating an index array. This can improve " "performance by avoiding vertex reuse." msgstr "" -#: doc/classes/SurfaceTool.xml:193 +#: doc/classes/SurfaceTool.xml:194 msgid "Sets [Material] to be used by the [Mesh] you are constructing." msgstr "" diff --git a/drivers/SCsub b/drivers/SCsub index 714d4110de..dd81fc645c 100644 --- a/drivers/SCsub +++ b/drivers/SCsub @@ -25,10 +25,9 @@ SConscript("winmidi/SCsub") # Graphics drivers if env["vulkan"]: SConscript("vulkan/SCsub") - SConscript("gles3/SCsub") +if env["opengl3"]: SConscript("gl_context/SCsub") -else: - SConscript("dummy/SCsub") + SConscript("gles3/SCsub") # Core dependencies SConscript("png/SCsub") diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index 10093d42a3..92c9dfb9ae 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -68,7 +68,7 @@ #endif #endif -#ifndef IPHONE_ENABLED +#if !defined(IPHONE_ENABLED) && !defined(JAVASCRIPT_ENABLED) // We include EGL below to get debug callback on GLES2 platforms, // but EGL is not available on iOS. #define CAN_DEBUG diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp index fa607472d3..f9443e11db 100644 --- a/drivers/gles3/shader_compiler_gles3.cpp +++ b/drivers/gles3/shader_compiler_gles3.cpp @@ -65,6 +65,13 @@ static String _prestr(SL::DataPrecision p_pres) { return ""; } +static String _constr(bool p_is_const) { + if (p_is_const) { + return "const "; + } + return ""; +} + static String _qualstr(SL::ArgumentQualifier p_qual) { switch (p_qual) { case SL::ARGUMENT_QUALIFIER_IN: @@ -246,9 +253,10 @@ void ShaderCompilerGLES3::_dump_function_deps(SL::ShaderNode *p_node, const Stri header += "("; for (int i = 0; i < fnode->arguments.size(); i++) { - if (i > 0) + if (i > 0) { header += ", "; - + } + header += _constr(fnode->arguments[i].is_const); header += _qualstr(fnode->arguments[i].qualifier); header += _prestr(fnode->arguments[i].precision); header += _typestr(fnode->arguments[i].type); @@ -365,7 +373,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener for (int i = 0; i < snode->vconstants.size(); i++) { String gcode; - gcode += "const "; + gcode += _constr(true); gcode += _prestr(snode->vconstants[i].precision); gcode += _typestr(snode->vconstants[i].type); gcode += " " + _mkid(String(snode->vconstants[i].name)); @@ -446,9 +454,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener SL::VariableDeclarationNode *var_dec_node = (SL::VariableDeclarationNode *)p_node; StringBuffer<> declaration; - if (var_dec_node->is_const) { - declaration += "const "; - } + declaration += _constr(var_dec_node->is_const); declaration += _prestr(var_dec_node->precision); declaration += _typestr(var_dec_node->datatype); diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 1bc88a86f7..1ebc8cca5e 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -473,7 +473,7 @@ String OS_Unix::get_user_data_dir() const { } } - return ProjectSettings::get_singleton()->get_resource_path(); + return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]"); } String OS_Unix::get_executable_path() const { diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index 520d4808fb..403feb149e 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -387,14 +387,17 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN); // Due to WASAPI Shared Mode we have no control of the buffer size - buffer_frames = max_frames; - - int64_t latency = 0; - audio_output.audio_client->GetStreamLatency(&latency); - // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit - // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time - // Convert REFTIME to seconds as godot uses for latency - real_latency = (float)latency / (float)REFTIMES_PER_SEC; + if (!p_capture) { + buffer_frames = max_frames; + + int64_t latency = 0; + audio_output.audio_client->GetStreamLatency(&latency); + // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit + // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time + // Convert REFTIME to seconds as godot uses for latency + real_latency = (float)latency / (float)REFTIMES_PER_SEC; + } + } else { IAudioClient3 *device_audio_client_3 = (IAudioClient3 *)p_device->audio_client; diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp index 9581c3cd45..3ca3576de6 100644 --- a/editor/action_map_editor.cpp +++ b/editor/action_map_editor.cpp @@ -260,7 +260,7 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> & return; } else { // Always make the value 1 or -1 for display consistency - joym->set_axis_value(SGN(axis_value)); + joym->set_axis_value(SIGN(axis_value)); } } diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index e9cf22af85..f7f88ad0d5 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -187,7 +187,7 @@ void AnimationBezierTrackEdit::_draw_line_clipped(const Vector2 &p_from, const V Vector2 from = p_from; Vector2 to = p_to; - if (from.x == to.x) { + if (from.x == to.x && from.y == to.y) { return; } if (to.x < from.x) { @@ -222,11 +222,6 @@ void AnimationBezierTrackEdit::_notification(int p_what) { bezier_icon = get_theme_icon(SNAME("KeyBezierPoint"), SNAME("EditorIcons")); bezier_handle_icon = get_theme_icon(SNAME("KeyBezierHandle"), SNAME("EditorIcons")); selected_icon = get_theme_icon(SNAME("KeyBezierSelected"), SNAME("EditorIcons")); - if (handle_mode_option->get_item_count() == 0) { - handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Free"), HANDLE_MODE_FREE); - handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Balanced"), HANDLE_MODE_BALANCED); - handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesMirror"), SNAME("EditorIcons")), TTR("Mirror"), HANDLE_MODE_MIRROR); - } } if (p_what == NOTIFICATION_RESIZED) { int right_limit = get_size().width - timeline->get_buttons_width(); @@ -420,9 +415,9 @@ void AnimationBezierTrackEdit::_notification(int p_what) { //draw editor handles { - float scale = timeline->get_zoom_scale(); edit_points.clear(); + float scale = timeline->get_zoom_scale(); for (int i = 0; i < animation->track_get_key_count(track); i++) { float offset = animation->track_get_key_time(track, i); float value = animation->bezier_track_get_key_value(track, i); @@ -438,7 +433,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { if (moving_handle != 0 && moving_handle_key == i) { in_vec = moving_handle_left; } - Vector2 pos_in = Vector2(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y)); + Vector2 pos_in(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y)); Vector2 out_vec = animation->bezier_track_get_key_out_handle(track, i); @@ -446,7 +441,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { out_vec = moving_handle_right; } - Vector2 pos_out = Vector2(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y)); + Vector2 pos_out(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y)); _draw_line_clipped(pos, pos_in, accent, limit, right_limit); _draw_line_clipped(pos, pos_out, accent, limit, right_limit); @@ -581,11 +576,21 @@ void AnimationBezierTrackEdit::_clear_selection() { update(); } +void AnimationBezierTrackEdit::_change_selected_keys_handle_mode(Animation::HandleMode p_mode) { + undo_redo->create_action(TTR("Update Selected Key Handles")); + double ratio = timeline->get_zoom_scale() * v_zoom; + for (Set<int>::Element *E = selection.back(); E; E = E->prev()) { + const int key_index = E->get(); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, animation->bezier_track_get_key_handle_mode(track, key_index), ratio); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, p_mode, ratio); + } + undo_redo->commit_action(); +} + void AnimationBezierTrackEdit::_clear_selection_for_anim(const Ref<Animation> &p_anim) { if (!(animation == p_anim)) { return; } - //selection.clear(); _clear_selection(); } @@ -667,6 +672,9 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { menu->add_icon_item(get_theme_icon(SNAME("Duplicate"), SNAME("EditorIcons")), TTR("Duplicate Selected Key(s)"), MENU_KEY_DUPLICATE); menu->add_separator(); menu->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Delete Selected Key(s)"), MENU_KEY_DELETE); + menu->add_separator(); + menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Make Handles Free"), MENU_KEY_SET_HANDLE_FREE); + menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Make Handles Balanced"), MENU_KEY_SET_HANDLE_BALANCED); } menu->set_as_minsize(); @@ -676,10 +684,6 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { } if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) { - if (close_icon_rect.has_point(mb->get_position())) { - emit_signal(SNAME("close_request")); - return; - } for (const KeyValue<int, Rect2> &E : subtracks) { if (E.value.has_point(mb->get_position())) { set_animation_and_track(animation, E.key); @@ -746,7 +750,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { //insert new point if (mb->is_command_pressed() && mb->get_position().x >= timeline->get_name_limit() && mb->get_position().x < get_size().width - timeline->get_buttons_width()) { Array new_point; - new_point.resize(5); + new_point.resize(6); float h = (get_size().height / 2 - mb->get_position().y) * v_zoom + v_scroll; @@ -755,6 +759,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { new_point[2] = 0; new_point[3] = 0.25; new_point[4] = 0; + new_point[5] = 0; float time = ((mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); while (animation->track_find_key(track, time, true) != -1) { @@ -986,33 +991,49 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { if (moving_handle == -1) { moving_handle_left = moving_handle_value; - if (moving_handle_left.x > 0) { - moving_handle_left.x = 0; - } - if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) { - Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom); - moving_handle_right = (-(moving_handle_left * scale).normalized() * (moving_handle_right * scale).length()) / scale; + if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) { + double ratio = timeline->get_zoom_scale() * v_zoom; + Transform2D xform; + xform.set_scale(Vector2(1.0, 1.0 / ratio)); - } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) { - moving_handle_right = -moving_handle_left; - } - } + Vector2 vec_out = xform.xform(moving_handle_right); + Vector2 vec_in = xform.xform(moving_handle_left); - if (moving_handle == 1) { - moving_handle_right = moving_handle_value; - if (moving_handle_right.x < 0) { - moving_handle_right.x = 0; + moving_handle_right = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length()); } + } else if (moving_handle == 1) { + moving_handle_right = moving_handle_value; + + if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) { + double ratio = timeline->get_zoom_scale() * v_zoom; + Transform2D xform; + xform.set_scale(Vector2(1.0, 1.0 / ratio)); - if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) { - Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom); - moving_handle_left = (-(moving_handle_right * scale).normalized() * (moving_handle_left * scale).length()) / scale; - } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) { - moving_handle_left = -moving_handle_right; + Vector2 vec_in = xform.xform(moving_handle_left); + Vector2 vec_out = xform.xform(moving_handle_right); + + moving_handle_left = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length()); } } + update(); + } + + bool is_finishing_key_handle_drag = moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT; + if (is_finishing_key_handle_drag) { + undo_redo->create_action(TTR("Move Bezier Points")); + if (moving_handle == -1) { + double ratio = timeline->get_zoom_scale() * v_zoom; + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, moving_handle_left, ratio); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, animation->bezier_track_get_key_in_handle(track, moving_handle_key), ratio); + } else if (moving_handle == 1) { + double ratio = timeline->get_zoom_scale() * v_zoom; + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, moving_handle_right, ratio); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, animation->bezier_track_get_key_out_handle(track, moving_handle_key), ratio); + } + undo_redo->commit_action(); + moving_handle = 0; update(); } } @@ -1021,7 +1042,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) { switch (p_index) { case MENU_KEY_INSERT: { Array new_point; - new_point.resize(5); + new_point.resize(6); float h = (get_size().height / 2 - menu_insert_key.y) * v_zoom + v_scroll; @@ -1030,6 +1051,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) { new_point[2] = 0; new_point[3] = 0.25; new_point[4] = 0; + new_point[5] = Animation::HANDLE_MODE_BALANCED; float time = ((menu_insert_key.x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value(); while (animation->track_find_key(track, time, true) != -1) { @@ -1048,6 +1070,12 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) { case MENU_KEY_DELETE: { delete_selection(); } break; + case MENU_KEY_SET_HANDLE_FREE: { + _change_selected_keys_handle_mode(Animation::HANDLE_MODE_FREE); + } break; + case MENU_KEY_SET_HANDLE_BALANCED: { + _change_selected_keys_handle_mode(Animation::HANDLE_MODE_BALANCED); + } break; } } @@ -1118,6 +1146,7 @@ void AnimationBezierTrackEdit::delete_selection() { undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); undo_redo->commit_action(); + //selection.clear(); } } @@ -1150,8 +1179,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() { set_focus_mode(FOCUS_CLICK); set_clip_contents(true); - handle_mode = HANDLE_MODE_FREE; - handle_mode_option = memnew(OptionButton); close_button = memnew(Button); close_button->connect("pressed", Callable(this, SNAME("emit_signal")), varray(SNAME("close_request"))); @@ -1160,7 +1187,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() { right_column = memnew(VBoxContainer); right_column->add_child(close_button); right_column->add_spacer(); - right_column->add_child(handle_mode_option); add_child(right_column); menu = memnew(PopupMenu); diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h index 578c6f9337..4b46777cfe 100644 --- a/editor/animation_bezier_editor.h +++ b/editor/animation_bezier_editor.h @@ -36,21 +36,14 @@ class AnimationBezierTrackEdit : public Control { GDCLASS(AnimationBezierTrackEdit, Control); - enum HandleMode { - HANDLE_MODE_FREE, - HANDLE_MODE_BALANCED, - HANDLE_MODE_MIRROR - }; - enum { MENU_KEY_INSERT, MENU_KEY_DUPLICATE, - MENU_KEY_DELETE + MENU_KEY_DELETE, + MENU_KEY_SET_HANDLE_FREE, + MENU_KEY_SET_HANDLE_BALANCED, }; - HandleMode handle_mode; - OptionButton *handle_mode_option; - VBoxContainer *right_column; Button *close_button; @@ -69,8 +62,6 @@ class AnimationBezierTrackEdit : public Control { Ref<Texture2D> bezier_handle_icon; Ref<Texture2D> selected_icon; - Rect2 close_icon_rect; - Map<int, Rect2> subtracks; float v_scroll = 0; @@ -104,10 +95,12 @@ class AnimationBezierTrackEdit : public Control { int moving_handle_key = 0; Vector2 moving_handle_left; Vector2 moving_handle_right; + int moving_handle_mode; // value from Animation::HandleMode void _clear_selection(); void _clear_selection_for_anim(const Ref<Animation> &p_anim); void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos); + void _change_selected_keys_handle_mode(Animation::HandleMode p_mode); Vector2 menu_insert_key; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index b45fd7f443..6fce55f8e3 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -334,6 +334,22 @@ public: setting = false; return true; } + + if (name == "handle_mode") { + const Variant &value = p_value; + + setting = true; + undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS); + int prev = animation->bezier_track_get_key_handle_mode(track, key); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev); + undo_redo->add_do_method(this, "_update_obj", animation); + undo_redo->add_undo_method(this, "_update_obj", animation); + undo_redo->commit_action(); + + setting = false; + return true; + } } break; case Animation::TYPE_AUDIO: { if (name == "stream") { @@ -498,6 +514,11 @@ public: return true; } + if (name == "handle_mode") { + r_ret = animation->bezier_track_get_key_handle_mode(track, key); + return true; + } + } break; case Animation::TYPE_AUDIO: { if (name == "stream") { @@ -610,6 +631,7 @@ public: p_list->push_back(PropertyInfo(Variant::FLOAT, "value")); p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle")); p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle")); + p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced")); } break; case Animation::TYPE_AUDIO: { @@ -949,6 +971,17 @@ public: undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, value); undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, prev); update_obj = true; + } else if (name == "handle_mode") { + const Variant &value = p_value; + + if (!setting) { + setting = true; + undo_redo->create_action(TTR("Anim Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS); + } + int prev = animation->bezier_track_get_key_handle_mode(track, key); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev); + update_obj = true; } } break; case Animation::TYPE_AUDIO: { @@ -1120,6 +1153,11 @@ public: return true; } + if (name == "handle_mode") { + r_ret = animation->bezier_track_get_key_handle_mode(track, key); + return true; + } + } break; case Animation::TYPE_AUDIO: { if (name == "stream") { @@ -1273,6 +1311,7 @@ public: p_list->push_back(PropertyInfo(Variant::FLOAT, "value")); p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle")); p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle")); + p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced")); } break; case Animation::TYPE_AUDIO: { p_list->push_back(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream")); @@ -2257,6 +2296,11 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool Ref<Texture2D> icon_to_draw = p_selected ? selected_icon : type_icon; + if (animation->track_get_type(track) == Animation::TYPE_VALUE && !Math::is_equal_approx(animation->track_get_key_transition(track, p_index), real_t(1.0))) { + // Use a different icon for keys with non-linear easing. + icon_to_draw = get_theme_icon(p_selected ? SNAME("KeyEasedSelected") : SNAME("KeyValueEased"), SNAME("EditorIcons")); + } + // Override type icon for invalid value keys, unless selected. if (!p_selected && animation->track_get_type(track) == Animation::TYPE_VALUE) { const Variant &v = animation->track_get_key_value(track, p_index); @@ -2602,6 +2646,17 @@ String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const { text += "In-Handle: " + ih + "\n"; Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx); text += "Out-Handle: " + oh + "\n"; + int hm = animation->bezier_track_get_key_handle_mode(track, key_idx); + text += "Handle mode: "; + switch (hm) { + case Animation::HANDLE_MODE_FREE: { + text += "Free"; + } break; + case Animation::HANDLE_MODE_BALANCED: { + text += "Balanced"; + } break; + } + text += "\n"; } break; case Animation::TYPE_AUDIO: { String stream_name = "null"; @@ -4791,12 +4846,13 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { Variant value; _find_hint_for_track(p_track, bp, &value); Array arr; - arr.resize(5); + arr.resize(6); arr[0] = value; arr[1] = -0.25; arr[2] = 0; arr[3] = 0.25; arr[4] = 0; + arr[5] = 0; undo_redo->create_action(TTR("Add Track Key")); undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, arr); diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index c773f51342..b954c87476 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -378,7 +378,7 @@ void ConnectDialog::_advanced_pressed() { error_label->hide(); } else { set_min_size(Size2(600, 500) * EDSCALE); - set_size(Size2()); + reset_size(); connect_to_label->set_text(TTR("Connect to Script:")); tree->set_connect_to_script_mode(true); diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index a312c161a8..b18c225f23 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -578,6 +578,12 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da error->set_tooltip(0, tooltip); error->set_tooltip(1, tooltip); + if (warning_count == 0 && error_count == 0) { + expand_all_button->set_disabled(false); + collapse_all_button->set_disabled(false); + clear_button->set_disabled(false); + } + if (oe.warning) { warning_count++; } else { @@ -1404,12 +1410,17 @@ void ScriptEditorDebugger::_clear_errors_list() { error_tree->clear(); error_count = 0; warning_count = 0; + update_tabs(); + + expand_all_button->set_disabled(true); + collapse_all_button->set_disabled(true); + clear_button->set_disabled(true); } // Right click on specific file(s) or folder(s). void ScriptEditorDebugger::_error_tree_item_rmb_selected(const Vector2 &p_pos) { item_menu->clear(); - item_menu->set_size(Size2(1, 1)); + item_menu->reset_size(); if (error_tree->is_anything_selected()) { item_menu->add_icon_item(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons")), TTR("Copy Error"), ACTION_COPY_ERROR); @@ -1662,28 +1673,31 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { errors_tab = memnew(VBoxContainer); errors_tab->set_name(TTR("Errors")); - HBoxContainer *errhb = memnew(HBoxContainer); - errors_tab->add_child(errhb); + HBoxContainer *error_hbox = memnew(HBoxContainer); + errors_tab->add_child(error_hbox); - Button *expand_all = memnew(Button); - expand_all->set_text(TTR("Expand All")); - expand_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list)); - errhb->add_child(expand_all); + expand_all_button = memnew(Button); + expand_all_button->set_text(TTR("Expand All")); + expand_all_button->set_disabled(true); + expand_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list)); + error_hbox->add_child(expand_all_button); - Button *collapse_all = memnew(Button); - collapse_all->set_text(TTR("Collapse All")); - collapse_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list)); - errhb->add_child(collapse_all); + collapse_all_button = memnew(Button); + collapse_all_button->set_text(TTR("Collapse All")); + collapse_all_button->set_disabled(true); + collapse_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list)); + error_hbox->add_child(collapse_all_button); Control *space = memnew(Control); space->set_h_size_flags(SIZE_EXPAND_FILL); - errhb->add_child(space); - - clearbutton = memnew(Button); - clearbutton->set_text(TTR("Clear")); - clearbutton->set_h_size_flags(0); - clearbutton->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list)); - errhb->add_child(clearbutton); + error_hbox->add_child(space); + + clear_button = memnew(Button); + clear_button->set_text(TTR("Clear")); + clear_button->set_h_size_flags(0); + clear_button->set_disabled(true); + clear_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list)); + error_hbox->add_child(clear_button); error_tree = memnew(Tree); error_tree->set_columns(2); diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h index 1c1c0fd3e5..76209aef46 100644 --- a/editor/debugger/script_editor_debugger.h +++ b/editor/debugger/script_editor_debugger.h @@ -94,7 +94,9 @@ private: VBoxContainer *errors_tab; Tree *error_tree; - Button *clearbutton; + Button *expand_all_button; + Button *collapse_all_button; + Button *clear_button; PopupMenu *item_menu; EditorFileDialog *file_dialog; diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index d07d77c112..f18284638f 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -270,7 +270,7 @@ DependencyEditor::DependencyEditor() { ///////////////////////////////////// void DependencyEditorOwners::_list_rmb_select(int p_item, const Vector2 &p_pos) { file_options->clear(); - file_options->set_size(Size2(1, 1)); + file_options->reset_size(); if (p_item >= 0) { file_options->add_item(TTR("Open"), FILE_OPEN); } @@ -464,7 +464,7 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector< if (removed_deps.is_empty()) { owners->hide(); text->set_text(TTR("Remove the selected files from the project? (Cannot be undone.)\nDepending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently.")); - set_size(Size2()); + reset_size(); popup_centered(); } else { _build_removed_dependency_tree(removed_deps); diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 0840c3b6a8..25e76c2262 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -117,7 +117,7 @@ bool EditorAutoloadSettings::_autoload_name_is_valid(const String &p_name, Strin for (const String &E : keywords) { if (E == p_name) { if (r_error) { - *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an autoload name."); + *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an AutoLoad name."); } return false; @@ -373,13 +373,13 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) { Object *obj = ClassDB::instantiate(ibt); - ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for autoload, expected 'Node' inheritance, got: " + String(ibt) + "."); + ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for AutoLoad, expected 'Node' inheritance, got: " + String(ibt) + "."); n = Object::cast_to<Node>(obj); n->set_script(s); } - ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in autoload not a node or script: " + p_path + "."); + ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in AutoLoad not a node or script: " + p_path + "."); return n; } @@ -692,18 +692,18 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_ String error; if (!_autoload_name_is_valid(name, &error)) { - EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + error); + EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + error); return false; } const String &path = p_path; if (!FileAccess::exists(path)) { - EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path)); + EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path)); return false; } if (!path.begins_with("res://")) { - EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path)); + EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path)); return false; } diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index d1dfc61c19..e78ca7cd64 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -82,7 +82,7 @@ bool EditorExportPreset::_get(const StringName &p_name, Variant &r_ret) const { void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const { for (const PropertyInfo &E : properties) { - if (platform->get_option_visibility(E.name, values)) { + if (platform->get_export_option_visibility(E.name, values)) { p_list->push_back(E); } } diff --git a/editor/editor_export.h b/editor/editor_export.h index b681f52330..1a5b8e6026 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -240,7 +240,7 @@ public: virtual void get_export_options(List<ExportOption> *r_options) = 0; virtual bool should_update_export_options() { return false; } - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } + virtual bool get_export_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } virtual String get_os_name() const = 0; virtual String get_name() const = 0; diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 021ab8b93b..2d7c31b64c 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -576,7 +576,7 @@ void EditorFileDialog::_item_dc_selected(int p_item) { void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p_pos) { // Right click on specific file(s) or folder(s). item_menu->clear(); - item_menu->set_size(Size2(1, 1)); + item_menu->reset_size(); // Allow specific actions only on one item. bool single_item_selected = item_list->get_selected_items().size() == 1; @@ -620,7 +620,7 @@ void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) { } item_menu->clear(); - item_menu->set_size(Size2(1, 1)); + item_menu->reset_size(); if (can_create_dir) { item_menu->add_icon_item(item_list->get_theme_icon(SNAME("folder"), SNAME("FileDialog")), TTR("New Folder..."), ITEM_MENU_NEW_FOLDER, KeyModifierMask::CMD | Key::N); @@ -1117,7 +1117,7 @@ void EditorFileDialog::_delete_items() { } } if (folders.size() + files.size() > 0) { - remove_dialog->set_size(Size2(1, 1)); + remove_dialog->reset_size(); remove_dialog->show(folders, files); } } diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 3d6b523733..d141447044 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1633,7 +1633,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(importer_name); ERR_FAIL_COND_V(!importer.is_valid(), ERR_FILE_CORRUPT); List<ResourceImporter::ImportOption> options; - importer->get_import_options(&options); + importer->get_import_options(p_files[i], &options); //set default values for (const ResourceImporter::ImportOption &E : options) { source_file_options[p_files[i]][E.option.name] = E.default_value; @@ -1714,7 +1714,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector //store options in provided order, to avoid file changing. Order is also important because first match is accepted first. List<ResourceImporter::ImportOption> options; - importer->get_import_options(&options); + importer->get_import_options(file, &options); //set default values for (const ResourceImporter::ImportOption &F : options) { String base = F.option.name; @@ -1851,7 +1851,7 @@ void EditorFileSystem::_reimport_file(const String &p_file, const Map<StringName //mix with default params, in case a parameter is missing List<ResourceImporter::ImportOption> opts; - importer->get_import_options(&opts); + importer->get_import_options(p_file, &opts); for (const ResourceImporter::ImportOption &E : opts) { if (!params.has(E.option.name)) { //this one is not present params[E.option.name] = E.default_value; diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 192f7fc598..f520877256 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -33,13 +33,14 @@ #include "core/core_constants.h" #include "core/input/input.h" #include "core/os/keyboard.h" +#include "core/version_generated.gen.h" #include "doc_data_compressed.gen.h" #include "editor/plugins/script_editor_plugin.h" #include "editor_node.h" #include "editor_scale.h" #include "editor_settings.h" -#define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" +#define CONTRIBUTE_URL vformat("%s/community/contributing/updating_the_class_reference.html", VERSION_DOCS_URL) DocTools *EditorHelp::doc = nullptr; @@ -108,6 +109,9 @@ void EditorHelp::_class_desc_select(const String &p_select) { } else if (tag == "constant") { topic = "class_constant"; table = &this->constant_line; + } else if (tag == "theme_item") { + topic = "theme_item"; + table = &this->theme_property_line; } else { return; } @@ -1537,7 +1541,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { p_rt->add_text("["); pos = brk_pos + 1; - } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ")) { + } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ") || tag.begins_with("theme_item ")) { int tag_end = tag.find(" "); String link_tag = tag.substr(0, tag_end); diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 07e505adb4..2729b1eb3b 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -650,7 +650,7 @@ void EditorProperty::gui_input(const Ref<InputEvent> &p_event) { } else if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) { _update_popup(); menu->set_position(get_screen_position() + get_local_mouse_position()); - menu->set_size(Vector2(1, 1)); + menu->reset_size(); menu->popup(); select(); return; @@ -1556,7 +1556,7 @@ void EditorInspectorArray::_panel_gui_input(Ref<InputEvent> p_event, int p_index rmb_popup->set_item_disabled(OPTION_MOVE_UP, popup_array_index_pressed == 0); rmb_popup->set_item_disabled(OPTION_MOVE_DOWN, popup_array_index_pressed == count - 1); rmb_popup->set_position(mb->get_global_position()); - rmb_popup->set_size(Vector2()); + rmb_popup->reset_size(); rmb_popup->popup(); } } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 5dd75034e2..6a9d47bcc5 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -621,6 +621,19 @@ void EditorNode::_notification(int p_what) { } break; case NOTIFICATION_READY: { + { + _initializing_addons = true; + Vector<String> addons; + if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) { + addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled"); + } + + for (int i = 0; i < addons.size(); i++) { + set_addon_plugin_enabled(addons[i], true); + } + _initializing_addons = false; + } + RenderingServer::get_singleton()->viewport_set_disable_2d(get_scene_root()->get_viewport_rid(), true); RenderingServer::get_singleton()->viewport_set_disable_environment(get_viewport()->get_viewport_rid(), true); @@ -994,18 +1007,6 @@ void EditorNode::_sources_changed(bool p_exist) { load_scene(defer_load_scene); defer_load_scene = ""; } - - // Only enable addons once resources have been imported - _initializing_addons = true; - Vector<String> addons; - if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) { - addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled"); - } - - for (int i = 0; i < addons.size(); i++) { - set_addon_plugin_enabled(addons[i], true); - } - _initializing_addons = false; } } @@ -4902,7 +4903,7 @@ void EditorNode::_update_layouts_menu() { editor_layouts->clear(); overridden_default_layout = -1; - editor_layouts->set_size(Vector2()); + editor_layouts->reset_size(); editor_layouts->add_shortcut(ED_SHORTCUT("layout/save", TTR("Save Layout")), SETTINGS_LAYOUT_SAVE); editor_layouts->add_shortcut(ED_SHORTCUT("layout/delete", TTR("Delete Layout")), SETTINGS_LAYOUT_DELETE); editor_layouts->add_separator(); @@ -5029,7 +5030,7 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) { if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) { // context menu scene_tabs_context_menu->clear(); - scene_tabs_context_menu->set_size(Size2(1, 1)); + scene_tabs_context_menu->reset_size(); scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/new_scene"), FILE_NEW_SCENE); if (scene_tabs->get_hovered_tab() >= 0) { @@ -6843,7 +6844,7 @@ EditorNode::EditorNode() { gui_base->add_child(custom_build_manage_templates); file_android_build_source = memnew(EditorFileDialog); - file_android_build_source->set_title(TTR("Select android sources file")); + file_android_build_source->set_title(TTR("Select Android sources file")); file_android_build_source->set_access(EditorFileDialog::ACCESS_FILESYSTEM); file_android_build_source->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE); file_android_build_source->add_filter("*.zip"); @@ -6881,10 +6882,12 @@ EditorNode::EditorNode() { file_export_lib->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action)); file_export_lib_merge = memnew(CheckBox); file_export_lib_merge->set_text(TTR("Merge With Existing")); + file_export_lib_merge->set_h_size_flags(Control::SIZE_SHRINK_CENTER); file_export_lib_merge->set_pressed(true); file_export_lib->get_vbox()->add_child(file_export_lib_merge); file_export_lib_apply_xforms = memnew(CheckBox); file_export_lib_apply_xforms->set_text(TTR("Apply MeshInstance Transforms")); + file_export_lib_apply_xforms->set_h_size_flags(Control::SIZE_SHRINK_CENTER); file_export_lib_apply_xforms->set_pressed(false); file_export_lib->get_vbox()->add_child(file_export_lib_apply_xforms); gui_base->add_child(file_export_lib); diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 2942ece409..f07a5ab523 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -409,7 +409,7 @@ void EditorSpinSlider::_draw_spin_slider() { Vector2 scale = get_global_transform_with_canvas().get_scale(); grabber->set_scale(scale); - grabber->set_size(Size2(0, 0)); + grabber->reset_size(); grabber->set_position(get_global_position() + (grabber_rect.get_center() - grabber->get_size() * 0.5) * scale); if (mousewheel_over_grabber) { diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 1dde157527..7ae3dcd44f 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -2507,7 +2507,7 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) { // Popup. if (!paths.is_empty()) { - tree_popup->set_size(Size2(1, 1)); + tree_popup->reset_size(); _file_and_folders_fill_popup(tree_popup, paths); tree_popup->set_position(tree->get_screen_position() + p_pos); tree_popup->popup(); @@ -2518,7 +2518,7 @@ void FileSystemDock::_tree_rmb_empty(const Vector2 &p_pos) { // Right click is pressed in the empty space of the tree. path = "res://"; tree_popup->clear(); - tree_popup->set_size(Size2(1, 1)); + tree_popup->reset_size(); tree_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER); tree_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE); tree_popup->add_icon_item(get_theme_icon(SNAME("Script"), SNAME("EditorIcons")), TTR("New Script..."), FILE_NEW_SCRIPT); @@ -2549,7 +2549,7 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) { // Popup. if (!paths.is_empty()) { file_list_popup->clear(); - file_list_popup->set_size(Size2(1, 1)); + file_list_popup->reset_size(); _file_and_folders_fill_popup(file_list_popup, paths, searched_string.length() == 0); file_list_popup->set_position(files->get_global_position() + p_pos); file_list_popup->popup(); @@ -2563,7 +2563,7 @@ void FileSystemDock::_file_list_rmb_pressed(const Vector2 &p_pos) { } file_list_popup->clear(); - file_list_popup->set_size(Size2(1, 1)); + file_list_popup->reset_size(); file_list_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER); file_list_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE); diff --git a/editor/icons/KeyEasedSelected.svg b/editor/icons/KeyEasedSelected.svg new file mode 100644 index 0000000000..c06d94c553 --- /dev/null +++ b/editor/icons/KeyEasedSelected.svg @@ -0,0 +1 @@ +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="9.999999" rx=".948002" stroke-width="1.2427" width="9.999999" x=".000001" y=".000035"/><rect fill="#003e7a" height="5.628136" rx=".533549" stroke-width=".699406" transform="matrix(.99989481 .01450427 .01450427 .99989481 0 0)" width="5.628136" x="2.115027" y="2.114924"/></svg> diff --git a/editor/icons/KeyValueEased.svg b/editor/icons/KeyValueEased.svg new file mode 100644 index 0000000000..4e4a33c006 --- /dev/null +++ b/editor/icons/KeyValueEased.svg @@ -0,0 +1 @@ +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="8.000001" rx="1.000032" ry="1.00003" stroke-width="1.3109" transform="rotate(-90)" width="8.000016" x="-9.000016" y=".999999"/></svg> diff --git a/editor/import/dynamicfont_import_settings.cpp b/editor/import/dynamicfont_import_settings.cpp index 474c9d5296..45937e20bc 100644 --- a/editor/import/dynamicfont_import_settings.cpp +++ b/editor/import/dynamicfont_import_settings.cpp @@ -1160,7 +1160,7 @@ void DynamicFontImportSettings::_range_update(int32_t p_start, int32_t p_end) { void DynamicFontImportSettings::_lang_add() { menu_langs->set_position(lang_list->get_screen_transform().xform(lang_list->get_local_mouse_position())); - menu_langs->set_size(Vector2(1, 1)); + menu_langs->reset_size(); menu_langs->popup(); } @@ -1187,7 +1187,7 @@ void DynamicFontImportSettings::_lang_remove(Object *p_item, int p_column, int p void DynamicFontImportSettings::_script_add() { menu_scripts->set_position(script_list->get_screen_transform().xform(script_list->get_local_mouse_position())); - menu_scripts->set_size(Vector2(1, 1)); + menu_scripts->reset_size(); menu_scripts->popup(); } diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp index 2c1d2149c6..1a002569c5 100644 --- a/editor/import/editor_import_plugin.cpp +++ b/editor/import/editor_import_plugin.cpp @@ -110,12 +110,12 @@ int EditorImportPlugin::get_import_order() const { ERR_FAIL_V_MSG(-1, "Unimplemented _get_import_order in add-on."); } -void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options, int p_preset) const { +void EditorImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options, int p_preset) const { Array needed; needed.push_back("name"); needed.push_back("default_value"); Array options; - if (GDVIRTUAL_CALL(_get_import_options, p_preset, options)) { + if (GDVIRTUAL_CALL(_get_import_options, p_path, p_preset, options)) { for (int i = 0; i < options.size(); i++) { Dictionary d = options[i]; ERR_FAIL_COND(!d.has_all(needed)); @@ -146,7 +146,7 @@ void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> ERR_FAIL_MSG("Unimplemented _get_import_options in add-on."); } -bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool EditorImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { Dictionary d; Map<StringName, Variant>::Element *E = p_options.front(); while (E) { @@ -154,7 +154,7 @@ bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map E = E->next(); } bool visible; - if (GDVIRTUAL_CALL(_get_option_visibility, p_option, d, visible)) { + if (GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, d, visible)) { return visible; } @@ -192,11 +192,11 @@ void EditorImportPlugin::_bind_methods() { GDVIRTUAL_BIND(_get_preset_count) GDVIRTUAL_BIND(_get_preset_name, "preset_index") GDVIRTUAL_BIND(_get_recognized_extensions) - GDVIRTUAL_BIND(_get_import_options, "preset_index") + GDVIRTUAL_BIND(_get_import_options, "path", "preset_index") GDVIRTUAL_BIND(_get_save_extension) GDVIRTUAL_BIND(_get_resource_type) GDVIRTUAL_BIND(_get_priority) GDVIRTUAL_BIND(_get_import_order) - GDVIRTUAL_BIND(_get_option_visibility, "option_name", "options") + GDVIRTUAL_BIND(_get_option_visibility, "path", "option_name", "options") GDVIRTUAL_BIND(_import, "source_file", "save_path", "options", "platform_variants", "gen_files"); } diff --git a/editor/import/editor_import_plugin.h b/editor/import/editor_import_plugin.h index 49c959ab44..6c5f4f6005 100644 --- a/editor/import/editor_import_plugin.h +++ b/editor/import/editor_import_plugin.h @@ -44,12 +44,12 @@ protected: GDVIRTUAL0RC(int, _get_preset_count) GDVIRTUAL1RC(String, _get_preset_name, int) GDVIRTUAL0RC(Vector<String>, _get_recognized_extensions) - GDVIRTUAL1RC(Array, _get_import_options, int) + GDVIRTUAL2RC(Array, _get_import_options, String, int) GDVIRTUAL0RC(String, _get_save_extension) GDVIRTUAL0RC(String, _get_resource_type) GDVIRTUAL0RC(float, _get_priority) GDVIRTUAL0RC(int, _get_import_order) - GDVIRTUAL2RC(bool, _get_option_visibility, StringName, Dictionary) + GDVIRTUAL3RC(bool, _get_option_visibility, String, StringName, Dictionary) GDVIRTUAL5RC(int, _import, String, String, Dictionary, Array, Array) public: @@ -63,8 +63,8 @@ public: virtual String get_resource_type() const override; virtual float get_priority() const override; virtual int get_import_order() const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata = nullptr) override; }; diff --git a/editor/import/resource_importer_bitmask.cpp b/editor/import/resource_importer_bitmask.cpp index 7fd9230284..c43052593d 100644 --- a/editor/import/resource_importer_bitmask.cpp +++ b/editor/import/resource_importer_bitmask.cpp @@ -57,7 +57,7 @@ String ResourceImporterBitMap::get_resource_type() const { return "BitMap"; } -bool ResourceImporterBitMap::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterBitMap::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -69,7 +69,7 @@ String ResourceImporterBitMap::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterBitMap::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterBitMap::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "create_from", PROPERTY_HINT_ENUM, "Black & White,Alpha"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "threshold", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.5)); } diff --git a/editor/import/resource_importer_bitmask.h b/editor/import/resource_importer_bitmask.h index d68693c54a..f3da5f9a31 100644 --- a/editor/import/resource_importer_bitmask.h +++ b/editor/import/resource_importer_bitmask.h @@ -49,8 +49,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; ResourceImporterBitMap(); diff --git a/editor/import/resource_importer_bmfont.cpp b/editor/import/resource_importer_bmfont.cpp index a64be54f2d..f54065416e 100644 --- a/editor/import/resource_importer_bmfont.cpp +++ b/editor/import/resource_importer_bmfont.cpp @@ -56,11 +56,11 @@ String ResourceImporterBMFont::get_resource_type() const { return "FontData"; } -bool ResourceImporterBMFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterBMFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } -void ResourceImporterBMFont::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterBMFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true)); } diff --git a/editor/import/resource_importer_bmfont.h b/editor/import/resource_importer_bmfont.h index 065703132a..64d536535c 100644 --- a/editor/import/resource_importer_bmfont.h +++ b/editor/import/resource_importer_bmfont.h @@ -45,8 +45,8 @@ public: virtual String get_save_extension() const override; virtual String get_resource_type() const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp index 07647d8b6a..7948d9e577 100644 --- a/editor/import/resource_importer_csv_translation.cpp +++ b/editor/import/resource_importer_csv_translation.cpp @@ -55,7 +55,7 @@ String ResourceImporterCSVTranslation::get_resource_type() const { return "Translation"; } -bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -67,7 +67,7 @@ String ResourceImporterCSVTranslation::get_preset_name(int p_idx) const { return ""; } -void ResourceImporterCSVTranslation::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterCSVTranslation::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "delimiter", PROPERTY_HINT_ENUM, "Comma,Semicolon,Tab"), 0)); } diff --git a/editor/import/resource_importer_csv_translation.h b/editor/import/resource_importer_csv_translation.h index d53e91e38b..de7ba3e3a0 100644 --- a/editor/import/resource_importer_csv_translation.h +++ b/editor/import/resource_importer_csv_translation.h @@ -46,8 +46,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_dynamicfont.cpp b/editor/import/resource_importer_dynamicfont.cpp index a021275917..f7363a565d 100644 --- a/editor/import/resource_importer_dynamicfont.cpp +++ b/editor/import/resource_importer_dynamicfont.cpp @@ -66,7 +66,7 @@ String ResourceImporterDynamicFont::get_resource_type() const { return "FontData"; } -bool ResourceImporterDynamicFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterDynamicFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option == "msdf_pixel_range" && !bool(p_options["multichannel_signed_distance_field"])) { return false; } @@ -94,7 +94,7 @@ String ResourceImporterDynamicFont::get_preset_name(int p_idx) const { } } -void ResourceImporterDynamicFont::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterDynamicFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { bool msdf = p_preset == PRESET_MSDF; r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "antialiased"), true)); diff --git a/editor/import/resource_importer_dynamicfont.h b/editor/import/resource_importer_dynamicfont.h index 52f256ab96..cb5294b9dd 100644 --- a/editor/import/resource_importer_dynamicfont.h +++ b/editor/import/resource_importer_dynamicfont.h @@ -57,8 +57,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; bool has_advanced_options() const override; void show_advanced_options(const String &p_path) override; diff --git a/editor/import/resource_importer_image.cpp b/editor/import/resource_importer_image.cpp index 2dea359188..45cb5e2f9d 100644 --- a/editor/import/resource_importer_image.cpp +++ b/editor/import/resource_importer_image.cpp @@ -55,7 +55,7 @@ String ResourceImporterImage::get_resource_type() const { return "Image"; } -bool ResourceImporterImage::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterImage::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -67,7 +67,7 @@ String ResourceImporterImage::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterImage::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterImage::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { } Error ResourceImporterImage::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) { diff --git a/editor/import/resource_importer_image.h b/editor/import/resource_importer_image.h index 7c8d5e228e..b7131ec850 100644 --- a/editor/import/resource_importer_image.h +++ b/editor/import/resource_importer_image.h @@ -47,8 +47,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_imagefont.cpp b/editor/import/resource_importer_imagefont.cpp index 997280d1dd..04a68e4a53 100644 --- a/editor/import/resource_importer_imagefont.cpp +++ b/editor/import/resource_importer_imagefont.cpp @@ -55,11 +55,11 @@ String ResourceImporterImageFont::get_resource_type() const { return "FontData"; } -bool ResourceImporterImageFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterImageFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } -void ResourceImporterImageFont::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterImageFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::PACKED_STRING_ARRAY, "character_ranges"), Vector<String>())); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "columns"), 1)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "rows"), 1)); diff --git a/editor/import/resource_importer_imagefont.h b/editor/import/resource_importer_imagefont.h index 9b2b38596f..d600c35e1c 100644 --- a/editor/import/resource_importer_imagefont.h +++ b/editor/import/resource_importer_imagefont.h @@ -47,8 +47,8 @@ public: virtual String get_save_extension() const override; virtual String get_resource_type() const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_layered_texture.cpp b/editor/import/resource_importer_layered_texture.cpp index d5bb21443c..89c62ab5cb 100644 --- a/editor/import/resource_importer_layered_texture.cpp +++ b/editor/import/resource_importer_layered_texture.cpp @@ -118,7 +118,7 @@ String ResourceImporterLayeredTexture::get_resource_type() const { ERR_FAIL_V(String()); } -bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option == "compress/lossy_quality" && p_options.has("compress/mode")) { return int(p_options["compress/mode"]) == COMPRESS_LOSSY; } @@ -133,7 +133,7 @@ String ResourceImporterLayeredTexture::get_preset_name(int p_idx) const { return ""; } -void ResourceImporterLayeredTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterLayeredTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless (PNG),Lossy (WebP),Video RAM (S3TC/ETC/BPTC),Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 1)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1)); diff --git a/editor/import/resource_importer_layered_texture.h b/editor/import/resource_importer_layered_texture.h index 7d8fb3cac5..29dfe7263a 100644 --- a/editor/import/resource_importer_layered_texture.h +++ b/editor/import/resource_importer_layered_texture.h @@ -84,8 +84,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; void _save_tex(Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2); diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 8eab27b533..bb68de99b1 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -504,14 +504,14 @@ String ResourceImporterOBJ::get_preset_name(int p_idx) const { return ""; } -void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterOBJ::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "scale_mesh"), Vector3(1, 1, 1))); r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "offset_mesh"), Vector3(0, 0, 0))); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "optimize_mesh"), true)); } -bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterOBJ::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index d9f2f79903..c3e46b6eb5 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -59,8 +59,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 9aaffe8abf..a25b694a60 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -91,6 +91,16 @@ Ref<Animation> EditorSceneFormatImporter::import_animation(const String &p_path, ERR_FAIL_V(nullptr); } +void EditorSceneFormatImporter::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) { + GDVIRTUAL_CALL(_get_import_options, p_path); +} + +Variant EditorSceneFormatImporter::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) { + Variant ret; + GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret); + return ret; +} + //for documenters, these functions are useful when an importer calls an external conversion helper (like, fbx2gltf), //and you want to load the resulting file @@ -110,6 +120,8 @@ void EditorSceneFormatImporter::_bind_methods() { GDVIRTUAL_BIND(_get_extensions); GDVIRTUAL_BIND(_import_scene, "path", "flags", "bake_fps"); GDVIRTUAL_BIND(_import_animation, "path", "flags", "bake_fps"); + GDVIRTUAL_BIND(_get_import_options, "path"); + GDVIRTUAL_BIND(_get_option_visibility, "path", "option"); BIND_CONSTANT(IMPORT_SCENE); BIND_CONSTANT(IMPORT_ANIMATION); @@ -193,15 +205,15 @@ void EditorScenePostImportPlugin::internal_process(InternalImportCategory p_cate current_options_dict = nullptr; } -void EditorScenePostImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options) { +void EditorScenePostImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) { current_option_list = r_options; - GDVIRTUAL_CALL(_get_import_options); + GDVIRTUAL_CALL(_get_import_options, p_path); current_option_list = nullptr; } -Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { current_options = &p_options; Variant ret; - GDVIRTUAL_CALL(_get_option_visibility, p_option, ret); + GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret); current_options = nullptr; return ret; } @@ -227,8 +239,8 @@ void EditorScenePostImportPlugin::_bind_methods() { GDVIRTUAL_BIND(_get_internal_option_visibility, "category", "option"); GDVIRTUAL_BIND(_get_internal_option_update_view_required, "category", "option"); GDVIRTUAL_BIND(_internal_process, "category", "base_node", "node", "resource"); - GDVIRTUAL_BIND(_get_import_options); - GDVIRTUAL_BIND(_get_option_visibility, "option"); + GDVIRTUAL_BIND(_get_import_options, "path"); + GDVIRTUAL_BIND(_get_option_visibility, "path", "option"); GDVIRTUAL_BIND(_pre_process, "scene"); GDVIRTUAL_BIND(_post_process, "scene"); @@ -269,7 +281,7 @@ int ResourceImporterScene::get_format_version() const { return 1; } -bool ResourceImporterScene::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterScene::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option.begins_with("animation/")) { if (p_option != "animation/import" && !bool(p_options["animation/import"])) { return false; @@ -281,7 +293,14 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const } for (int i = 0; i < post_importer_plugins.size(); i++) { - Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_option, p_options); + Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_path, p_option, p_options); + if (ret.get_type() == Variant::BOOL) { + return ret; + } + } + + for (Ref<EditorSceneFormatImporter> importer : importers) { + Variant ret = importer->get_option_visibility(p_path, p_option, p_options); if (ret.get_type() == Variant::BOOL) { return ret; } @@ -1218,7 +1237,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "use_external/path", PROPERTY_HINT_FILE, "*.material,*.res,*.tres"), "")); } break; case INTERNAL_IMPORT_CATEGORY_ANIMATION: { - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "save_to_file/path", PROPERTY_HINT_SAVE_FILE, "*.res,*.tres"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/keep_custom_tracks"), "")); @@ -1240,7 +1259,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/name"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/start_frame"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/end_frame"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/loop_mode"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/save_to_file/path", PROPERTY_HINT_SAVE_FILE, ".res,*.tres"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/keep_custom_tracks"), false)); @@ -1404,7 +1423,7 @@ bool ResourceImporterScene::get_internal_option_update_view_required(InternalImp return false; } -void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterScene::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_type", PROPERTY_HINT_TYPE_STRING, "Node"), "Node3D")); r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_name"), "Scene Root")); @@ -1434,7 +1453,11 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::DICTIONARY, "_subresources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), Dictionary())); for (int i = 0; i < post_importer_plugins.size(); i++) { - post_importer_plugins.write[i]->get_import_options(r_options); + post_importer_plugins.write[i]->get_import_options(p_path, r_options); + } + + for (Ref<EditorSceneFormatImporter> importer : importers) { + importer->get_import_options(p_path, r_options); } } diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index a192921966..5437ecd159 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -55,6 +55,8 @@ protected: GDVIRTUAL0RC(Vector<String>, _get_extensions) GDVIRTUAL3R(Object *, _import_scene, String, uint32_t, uint32_t) GDVIRTUAL3R(Ref<Animation>, _import_animation, String, uint32_t, uint32_t) + GDVIRTUAL1(_get_import_options, String) + GDVIRTUAL2RC(Variant, _get_option_visibility, String, String) public: enum ImportFlags { @@ -69,6 +71,8 @@ public: virtual void get_extensions(List<String> *r_extensions) const; virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = nullptr); virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps); + virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options); + virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options); EditorSceneFormatImporter() {} }; @@ -115,8 +119,8 @@ protected: GDVIRTUAL2RC(Variant, _get_internal_option_visibility, int, String) GDVIRTUAL2RC(Variant, _get_internal_option_update_view_required, int, String) GDVIRTUAL4(_internal_process, int, Node *, Node *, RES) - GDVIRTUAL0(_get_import_options) - GDVIRTUAL1RC(Variant, _get_option_visibility, String) + GDVIRTUAL1(_get_import_options, String) + GDVIRTUAL2RC(Variant, _get_option_visibility, String, String) GDVIRTUAL1(_pre_process, Node *) GDVIRTUAL1(_post_process, Node *) @@ -133,8 +137,8 @@ public: virtual void internal_process(InternalImportCategory p_category, Node *p_base_scene, Node *p_node, RES p_resource, const Dictionary &p_options); - virtual void get_import_options(List<ResourceImporter::ImportOption> *r_options); - virtual Variant get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; + virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options); + virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const; virtual void pre_process(Node *p_scene, const Map<StringName, Variant> &p_options); virtual void post_process(Node *p_scene, const Map<StringName, Variant> &p_options); @@ -250,8 +254,8 @@ public: bool get_internal_option_visibility(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const; bool get_internal_option_update_view_required(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; // Import scenes *after* everything else (such as textures). virtual int get_import_order() const override { return ResourceImporter::IMPORT_ORDER_SCENE; } diff --git a/editor/import/resource_importer_shader_file.cpp b/editor/import/resource_importer_shader_file.cpp index c01d8068da..797e11f5ea 100644 --- a/editor/import/resource_importer_shader_file.cpp +++ b/editor/import/resource_importer_shader_file.cpp @@ -65,10 +65,10 @@ String ResourceImporterShaderFile::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterShaderFile::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterShaderFile::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { } -bool ResourceImporterShaderFile::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterShaderFile::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } diff --git a/editor/import/resource_importer_shader_file.h b/editor/import/resource_importer_shader_file.h index c421132ec2..3ed489e9fb 100644 --- a/editor/import/resource_importer_shader_file.h +++ b/editor/import/resource_importer_shader_file.h @@ -46,8 +46,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index e4553c625b..b1fa2eda28 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -153,7 +153,7 @@ String ResourceImporterTexture::get_resource_type() const { return "StreamTexture2D"; } -bool ResourceImporterTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option == "compress/lossy_quality") { int compress_mode = int(p_options["compress/mode"]); if (compress_mode != COMPRESS_LOSSY && compress_mode != COMPRESS_VRAM_COMPRESSED) { @@ -194,7 +194,7 @@ String ResourceImporterTexture::get_preset_name(int p_idx) const { return preset_names[p_idx]; } -void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,VRAM Compressed,VRAM Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1)); diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index 41220009cd..cb9d1b08cd 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -95,8 +95,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp index cf699599ae..3fdf5dd9db 100644 --- a/editor/import/resource_importer_texture_atlas.cpp +++ b/editor/import/resource_importer_texture_atlas.cpp @@ -59,7 +59,7 @@ String ResourceImporterTextureAtlas::get_resource_type() const { return "Texture2D"; } -bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -71,7 +71,7 @@ String ResourceImporterTextureAtlas::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterTextureAtlas::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false)); @@ -134,7 +134,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_ int max_y = MIN(y[2], height - p_offset.y - 1); for (int yi = y[0]; yi < max_y; yi++) { if (yi >= 0) { - for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < width ? xt : width - 1); xi++) { + for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < src_width ? xt : src_width - 1); xi++) { int px = xi, py = yi; int sx = px, sy = py; sx = CLAMP(sx, 0, src_width - 1); @@ -156,7 +156,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_ p_image->set_pixel(px, py, color); } - for (int xi = (xf < width ? int(xf) : width - 1); xi >= (xt > 0 ? xt : 0); xi--) { + for (int xi = (xf < src_width ? int(xf) : src_width - 1); xi >= (xt > 0 ? xt : 0); xi--) { int px = xi, py = yi; int sx = px, sy = py; sx = CLAMP(sx, 0, src_width - 1); diff --git a/editor/import/resource_importer_texture_atlas.h b/editor/import/resource_importer_texture_atlas.h index d518a120bf..177ef949ac 100644 --- a/editor/import/resource_importer_texture_atlas.h +++ b/editor/import/resource_importer_texture_atlas.h @@ -60,8 +60,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual String get_option_group_file() const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index 877bdd50fb..820eba951f 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -58,7 +58,7 @@ String ResourceImporterWAV::get_resource_type() const { return "AudioStreamSample"; } -bool ResourceImporterWAV::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterWAV::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { if (p_option == "force/max_rate_hz" && !bool(p_options["force/max_rate"])) { return false; } @@ -74,7 +74,7 @@ String ResourceImporterWAV::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterWAV::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterWAV::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/8_bit"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/mono"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/max_rate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false)); diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h index 7413dbd11c..e3e605aeb2 100644 --- a/editor/import/resource_importer_wav.h +++ b/editor/import/resource_importer_wav.h @@ -46,8 +46,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; static void _compress_ima_adpcm(const Vector<float> &p_data, Vector<uint8_t> &dst_data) { /*p_sample_data->data = (void*)malloc(len); diff --git a/editor/import/scene_import_settings.cpp b/editor/import/scene_import_settings.cpp index 9f91a32c44..5690d49a55 100644 --- a/editor/import/scene_import_settings.cpp +++ b/editor/import/scene_import_settings.cpp @@ -664,7 +664,7 @@ void SceneImportSettings::_select(Tree *p_from, String p_type, String p_id) { List<ResourceImporter::ImportOption> options; if (scene_import_settings_data->category == ResourceImporterScene::INTERNAL_IMPORT_CATEGORY_MAX) { - ResourceImporterScene::get_singleton()->get_import_options(&options); + ResourceImporterScene::get_singleton()->get_import_options(base_path, &options); } else { ResourceImporterScene::get_singleton()->get_internal_import_options(scene_import_settings_data->category, &options); } diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp index 8300dcf555..4b69810861 100644 --- a/editor/import_defaults_editor.cpp +++ b/editor/import_defaults_editor.cpp @@ -62,7 +62,7 @@ protected: return; } for (const PropertyInfo &E : properties) { - if (importer->get_option_visibility(E.name, values)) { + if (importer->get_option_visibility("", E.name, values)) { p_list->push_back(E); } } @@ -119,7 +119,7 @@ void ImportDefaultsEditor::_update_importer() { if (importer.is_valid()) { List<ResourceImporter::ImportOption> options; - importer->get_import_options(&options); + importer->get_import_options("", &options); Dictionary d; if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + importer->get_importer_name())) { d = ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name()); diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index a6e1e1d094..cc6b4e66e4 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -42,6 +42,7 @@ public: Vector<String> paths; Set<StringName> checked; bool checking; + String base_options_path; bool _set(const StringName &p_name, const Variant &p_value) { if (values.has(p_name)) { @@ -66,7 +67,7 @@ public: } void _get_property_list(List<PropertyInfo> *p_list) const { for (const PropertyInfo &E : properties) { - if (!importer->get_option_visibility(E.name, values)) { + if (!importer->get_option_visibility(base_options_path, E.name, values)) { continue; } PropertyInfo pi = E; @@ -104,8 +105,9 @@ void ImportDock::set_edit_path(const String &p_path) { params->paths.clear(); params->paths.push_back(p_path); + params->base_options_path = p_path; - _update_options(config); + _update_options(p_path, config); List<Ref<ResourceImporter>> importers; ResourceFormatImporter::get_singleton()->get_importers_for_extension(p_path.get_extension(), &importers); @@ -146,17 +148,18 @@ void ImportDock::_add_keep_import_option(const String &p_importer_name) { } } -void ImportDock::_update_options(const Ref<ConfigFile> &p_config) { +void ImportDock::_update_options(const String &p_path, const Ref<ConfigFile> &p_config) { List<ResourceImporter::ImportOption> options; if (params->importer.is_valid()) { - params->importer->get_import_options(&options); + params->importer->get_import_options(p_path, &options); } params->properties.clear(); params->values.clear(); params->checking = params->paths.size() > 1; params->checked.clear(); + params->base_options_path = p_path; for (const ResourceImporter::ImportOption &E : options) { params->properties.push_back(E.option); @@ -184,10 +187,12 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { // Use the value that is repeated the most. Map<String, Dictionary> value_frequency; + Set<String> extensions; for (int i = 0; i < p_paths.size(); i++) { Ref<ConfigFile> config; config.instantiate(); + extensions.insert(p_paths[i].get_extension()); Error err = config->load(p_paths[i] + ".import"); ERR_CONTINUE(err != OK); @@ -223,13 +228,18 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { ERR_FAIL_COND(params->importer.is_null()); + String base_path; + if (extensions.size() == 1 && p_paths.size() > 0) { + base_path = p_paths[0]; + } List<ResourceImporter::ImportOption> options; - params->importer->get_import_options(&options); + params->importer->get_import_options(base_path, &options); params->properties.clear(); params->values.clear(); params->checking = true; params->checked.clear(); + params->base_options_path = base_path; for (const ResourceImporter::ImportOption &E : options) { params->properties.push_back(E.option); @@ -327,22 +337,22 @@ void ImportDock::_importer_selected(int i_idx) { String name = import_as->get_selected_metadata(); if (name == "keep") { params->importer.unref(); - _update_options(Ref<ConfigFile>()); + _update_options(params->base_options_path, Ref<ConfigFile>()); } else { Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(name); ERR_FAIL_COND(importer.is_null()); params->importer = importer; - Ref<ConfigFile> config; if (params->paths.size()) { + String path = params->paths[0]; config.instantiate(); - Error err = config->load(params->paths[0] + ".import"); + Error err = config->load(path + ".import"); if (err != OK) { config.unref(); } } - _update_options(config); + _update_options(params->base_options_path, config); } } @@ -387,7 +397,7 @@ void ImportDock::_preset_selected(int p_idx) { default: { List<ResourceImporter::ImportOption> options; - params->importer->get_import_options(&options, p_idx); + params->importer->get_import_options(params->base_options_path, &options, p_idx); if (params->checking) { params->checked.clear(); diff --git a/editor/import_dock.h b/editor/import_dock.h index 150c44576d..ac73f3e3c0 100644 --- a/editor/import_dock.h +++ b/editor/import_dock.h @@ -64,7 +64,7 @@ class ImportDock : public VBoxContainer { void _preset_selected(int p_idx); void _importer_selected(int i_idx); - void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>()); + void _update_options(const String &p_path, const Ref<ConfigFile> &p_config = Ref<ConfigFile>()); void _update_preset_menu(); void _add_keep_import_option(const String &p_importer_name); diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 55ffbf9477..2aded41810 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -68,7 +68,7 @@ void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_scrip void AnimationNodeBlendTreeEditor::_update_options_menu(bool p_has_input_ports) { add_node->get_popup()->clear(); - add_node->get_popup()->set_size(Size2i(-1, -1)); + add_node->get_popup()->reset_size(); for (int i = 0; i < add_options.size(); i++) { if (p_has_input_ports && add_options[i].input_port_count == 0) { continue; diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 02756916a5..ecc404f903 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -877,7 +877,7 @@ void CanvasItemEditor::_selection_result_pressed(int p_result) { void CanvasItemEditor::_selection_menu_hide() { selection_results.clear(); selection_menu->clear(); - selection_menu->set_size(Vector2(0, 0)); + selection_menu->reset_size(); } void CanvasItemEditor::_add_node_pressed(int p_result) { @@ -2265,7 +2265,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { } if (b.is_valid() && b->is_pressed() && b->get_button_index() == MouseButton::RIGHT) { - add_node_menu->set_size(Vector2(1, 1)); + add_node_menu->reset_size(); add_node_menu->set_position(get_screen_position() + b->get_position()); add_node_menu->popup(); node_create_position = transform.affine_inverse().xform((get_local_mouse_position())); diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 005cf27e8a..daf34903e6 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -383,7 +383,7 @@ void CurveEditor::open_context_menu(Vector2 pos) { _context_menu->add_submenu_item(TTR("Load Preset"), _presets_menu->get_name()); - _context_menu->set_size(Size2(0, 0)); + _context_menu->reset_size(); _context_menu->popup(); } diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index b74d229d3e..d6e6f0597a 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -860,7 +860,7 @@ void Node3DEditorViewport::_update_name() { } view_menu->set_text(name); - view_menu->set_size(Vector2(0, 0)); // resets the button size + view_menu->reset_size(); } void Node3DEditorViewport::_compute_edit(const Point2 &p_point) { @@ -3620,7 +3620,7 @@ void Node3DEditorViewport::_selection_result_pressed(int p_result) { void Node3DEditorViewport::_selection_menu_hide() { selection_results.clear(); selection_menu->clear(); - selection_menu->set_size(Vector2(0, 0)); + selection_menu->reset_size(); } void Node3DEditorViewport::set_can_preview(Camera3D *p_preview) { diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index e87d31f018..583862893c 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -3052,7 +3052,7 @@ void ScriptEditor::_make_script_list_context_menu() { context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/toggle_scripts_panel"), TOGGLE_SCRIPTS_PANEL); context_menu->set_position(get_global_transform().xform(get_local_mouse_position())); - context_menu->set_size(Vector2(1, 1)); + context_menu->reset_size(); context_menu->popup(); } diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 93adced59d..30a4cef8ca 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -550,7 +550,7 @@ void ScriptTextEditor::_validate_script() { void ScriptTextEditor::_update_bookmark_list() { bookmarks_menu->clear(); - bookmarks_menu->set_size(Size2(1, 1)); + bookmarks_menu->reset_size(); bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE); bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_bookmarks"), BOOKMARK_REMOVE_ALL); @@ -702,7 +702,7 @@ void ScriptTextEditor::_code_complete_script(const String &p_code, List<ScriptCo void ScriptTextEditor::_update_breakpoint_list() { breakpoints_menu->clear(); - breakpoints_menu->set_size(Size2(1, 1)); + breakpoints_menu->reset_size(); breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_breakpoint"), DEBUG_TOGGLE_BREAKPOINT); breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS); @@ -1689,7 +1689,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo()); context_menu->set_position(get_global_transform().xform(p_pos)); - context_menu->set_size(Vector2(1, 1)); + context_menu->reset_size(); context_menu->popup(); } diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 984dc0a1c9..7c1fda77bb 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -34,6 +34,7 @@ #include "core/io/resource_saver.h" #include "core/os/keyboard.h" #include "core/os/os.h" +#include "core/version_generated.gen.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" @@ -142,10 +143,10 @@ void ShaderTextEditor::_load_theme_settings() { } } - const Color member_variable_color = EDITOR_GET("text_editor/theme/highlighting/member_variable_color"); + const Color user_type_color = EDITOR_GET("text_editor/theme/highlighting/user_type_color"); for (const String &E : built_ins) { - syntax_highlighter->add_keyword_color(E, member_variable_color); + syntax_highlighter->add_keyword_color(E, user_type_color); } // Colorize comments. @@ -384,7 +385,7 @@ void ShaderEditor::_menu_option(int p_option) { shader_editor->remove_all_bookmarks(); } break; case HELP_DOCS: { - OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html"); + OS::get_singleton()->shell_open(vformat("%s/tutorials/shaders/shader_reference/index.html", VERSION_DOCS_URL)); } break; } if (p_option != SEARCH_FIND && p_option != SEARCH_REPLACE && p_option != SEARCH_GOTO_LINE) { @@ -645,7 +646,7 @@ void ShaderEditor::_make_context_menu(bool p_selection, Vector2 p_position) { context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE); context_menu->set_position(get_global_transform().xform(p_position)); - context_menu->set_size(Vector2(1, 1)); + context_menu->reset_size(); context_menu->popup(); } diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp index c350004f0f..510e264c48 100644 --- a/editor/plugins/skeleton_2d_editor_plugin.cpp +++ b/editor/plugins/skeleton_2d_editor_plugin.cpp @@ -52,34 +52,34 @@ void Skeleton2DEditor::_menu_option(int p_option) { } switch (p_option) { - case MENU_OPTION_MAKE_REST: { + case MENU_OPTION_SET_REST: { if (node->get_bone_count() == 0) { err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes.")); err_dialog->popup_centered(); return; } UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Create Rest Pose from Bones")); + ur->create_action(TTR("Set Rest Pose to Bones")); for (int i = 0; i < node->get_bone_count(); i++) { Bone2D *bone = node->get_bone(i); - ur->add_do_method(bone, "set_rest", bone->get_transform()); - ur->add_undo_method(bone, "set_rest", bone->get_rest()); + ur->add_do_method(bone, "set_transform", bone->get_rest()); + ur->add_undo_method(bone, "set_transform", bone->get_transform()); } ur->commit_action(); } break; - case MENU_OPTION_SET_REST: { + case MENU_OPTION_MAKE_REST: { if (node->get_bone_count() == 0) { err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes.")); err_dialog->popup_centered(); return; } UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo(); - ur->create_action(TTR("Set Rest Pose to Bones")); + ur->create_action(TTR("Create Rest Pose from Bones")); for (int i = 0; i < node->get_bone_count(); i++) { Bone2D *bone = node->get_bone(i); - ur->add_do_method(bone, "set_transform", bone->get_rest()); - ur->add_undo_method(bone, "set_transform", bone->get_transform()); + ur->add_do_method(bone, "set_rest", bone->get_transform()); + ur->add_undo_method(bone, "set_rest", bone->get_rest()); } ur->commit_action(); @@ -98,10 +98,10 @@ Skeleton2DEditor::Skeleton2DEditor() { options->set_text(TTR("Skeleton2D")); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Skeleton2D"), SNAME("EditorIcons"))); - options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_MAKE_REST); + options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_SET_REST); options->get_popup()->add_separator(); // Use the "Overwrite" word to highlight that this is a destructive operation. - options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_SET_REST); + options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_MAKE_REST); options->set_switch_on_hover(true); options->get_popup()->connect("id_pressed", callable_mp(this, &Skeleton2DEditor::_menu_option)); diff --git a/editor/plugins/skeleton_2d_editor_plugin.h b/editor/plugins/skeleton_2d_editor_plugin.h index dacd8fe43f..066888f685 100644 --- a/editor/plugins/skeleton_2d_editor_plugin.h +++ b/editor/plugins/skeleton_2d_editor_plugin.h @@ -40,8 +40,8 @@ class Skeleton2DEditor : public Control { GDCLASS(Skeleton2DEditor, Control); enum Menu { - MENU_OPTION_MAKE_REST, MENU_OPTION_SET_REST, + MENU_OPTION_MAKE_REST, }; Skeleton2D *node; diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index ebfe6c9ee3..e252792c43 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -508,7 +508,7 @@ void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo()); context_menu->set_position(get_global_transform().xform(p_position)); - context_menu->set_size(Vector2(1, 1)); + context_menu->reset_size(); context_menu->popup(); } diff --git a/editor/plugins/theme_editor_preview.cpp b/editor/plugins/theme_editor_preview.cpp index df0b35908b..f13fcb005f 100644 --- a/editor/plugins/theme_editor_preview.cpp +++ b/editor/plugins/theme_editor_preview.cpp @@ -71,6 +71,9 @@ void ThemeEditorPreview::_preview_visibility_changed() { void ThemeEditorPreview::_picker_button_cbk() { picker_overlay->set_visible(picker_button->is_pressed()); + if (picker_button->is_pressed()) { + _reset_picker_overlay(); + } } Control *ThemeEditorPreview::_find_hovered_control(Control *p_parent, Vector2 p_mouse_position) { diff --git a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp index 9e47a44b34..60a66ab954 100644 --- a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp +++ b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp @@ -34,7 +34,7 @@ void TileProxiesManagerDialog::_right_clicked(int p_item, Vector2 p_local_mouse_pos, Object *p_item_list) { ItemList *item_list = Object::cast_to<ItemList>(p_item_list); - popup_menu->set_size(Vector2(1, 1)); + popup_menu->reset_size(); popup_menu->set_position(get_position() + item_list->get_global_mouse_position()); popup_menu->popup(); } diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index a4706bf0d9..b1a9da9e26 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -132,7 +132,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p if (links[p_node_id].preview_visible && !is_dirty() && links[p_node_id].preview_box != nullptr) { links[p_node_id].graph_node->remove_child(links[p_node_id].preview_box); memdelete(links[p_node_id].preview_box); - links[p_node_id].graph_node->set_size(Vector2(-1, -1)); + links[p_node_id].graph_node->reset_size(); links[p_node_id].preview_visible = false; } @@ -256,7 +256,7 @@ void VisualShaderGraphPlugin::update_node_size(int p_node_id) { if (!links.has(p_node_id)) { return; } - links[p_node_id].graph_node->set_size(Size2(-1, -1)); + links[p_node_id].graph_node->reset_size(); } void VisualShaderGraphPlugin::register_default_input_button(int p_node_id, int p_port_id, Button *p_button) { @@ -1976,7 +1976,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p } gn->set_custom_minimum_size(size); - gn->set_size(Size2(1, 1)); + gn->reset_size(); if (!expression_node.is_null() && text_box) { Size2 box_size = size; @@ -1990,7 +1990,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p box_size.y -= text_box->get_offset(SIDE_TOP); box_size.y -= 28 * EDSCALE; text_box->set_custom_minimum_size(box_size); - text_box->set_size(Size2(1, 1)); + text_box->reset_size(); } } } @@ -2038,8 +2038,8 @@ void VisualShaderEditor::_comment_title_popup_show(const Point2 &p_position, int } void VisualShaderEditor::_comment_title_text_changed(const String &p_new_text) { - comment_title_change_edit->set_size(Size2(-1, -1)); - comment_title_change_popup->set_size(Size2(-1, -1)); + comment_title_change_edit->reset_size(); + comment_title_change_popup->reset_size(); } void VisualShaderEditor::_comment_title_text_submitted(const String &p_new_text) { @@ -2083,8 +2083,8 @@ void VisualShaderEditor::_comment_desc_popup_show(const Point2 &p_position, int } void VisualShaderEditor::_comment_desc_text_changed() { - comment_desc_change_edit->set_size(Size2(-1, -1)); - comment_desc_change_popup->set_size(Size2(-1, -1)); + comment_desc_change_edit->reset_size(); + comment_desc_change_popup->reset_size(); } void VisualShaderEditor::_comment_desc_confirm() { @@ -3167,7 +3167,7 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) { menu_point = graph->get_local_mouse_position(); Point2 gpos = Input::get_singleton()->get_mouse_position(); popup_menu->set_position(gpos); - popup_menu->set_size(Size2(-1, -1)); + popup_menu->reset_size(); popup_menu->popup(); } } @@ -4258,8 +4258,8 @@ VisualShaderEditor::VisualShaderEditor() { comment_title_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_title_text_changed)); comment_title_change_edit->connect("text_submitted", callable_mp(this, &VisualShaderEditor::_comment_title_text_submitted)); comment_title_change_popup->add_child(comment_title_change_edit); - comment_title_change_edit->set_size(Size2(-1, -1)); - comment_title_change_popup->set_size(Size2(-1, -1)); + comment_title_change_edit->reset_size(); + comment_title_change_popup->reset_size(); comment_title_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_title_popup_focus_out)); comment_title_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_title_popup_hide)); add_child(comment_title_change_popup); @@ -4271,8 +4271,8 @@ VisualShaderEditor::VisualShaderEditor() { comment_desc_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_desc_text_changed)); comment_desc_vbox->add_child(comment_desc_change_edit); comment_desc_change_edit->set_custom_minimum_size(Size2(300 * EDSCALE, 150 * EDSCALE)); - comment_desc_change_edit->set_size(Size2(-1, -1)); - comment_desc_change_popup->set_size(Size2(-1, -1)); + comment_desc_change_edit->reset_size(); + comment_desc_change_popup->reset_size(); comment_desc_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_desc_confirm)); comment_desc_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_desc_popup_hide)); Button *comment_desc_confirm_button = memnew(Button); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index ad9c81458f..a97d38323e 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -38,6 +38,7 @@ #include "core/io/resource_saver.h" #include "core/os/os.h" #include "core/string/optimized_translation.h" +#include "core/version_generated.gen.h" #include "editor_data.h" #include "editor_node.h" #include "editor_scale.h" @@ -456,7 +457,7 @@ void ProjectExportDialog::_enc_filters_changed(const String &p_filters) { } void ProjectExportDialog::_open_key_help_link() { - OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/development/compiling/compiling_with_script_encryption_key.html"); + OS::get_singleton()->shell_open(vformat("%s/development/compiling/compiling_with_script_encryption_key.html", VERSION_DOCS_URL)); } void ProjectExportDialog::_enc_pck_changed(bool p_pressed) { @@ -1276,11 +1277,13 @@ ProjectExportDialog::ProjectExportDialog() { export_debug = memnew(CheckBox); export_debug->set_text(TTR("Export With Debug")); export_debug->set_pressed(true); + export_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER); export_project->get_vbox()->add_child(export_debug); export_pck_zip_debug = memnew(CheckBox); export_pck_zip_debug->set_text(TTR("Export With Debug")); export_pck_zip_debug->set_pressed(true); + export_pck_zip_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER); export_pck_zip->get_vbox()->add_child(export_pck_zip_debug); set_hide_on_ok(false); diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 5c57c0d65c..7b942adb54 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -52,6 +52,7 @@ #include "scene/gui/texture_rect.h" #include "scene/main/window.h" #include "servers/display_server.h" +#include "servers/navigation_server_3d.h" static inline String get_project_key_from_path(const String &dir) { return dir.replace("/", "::"); @@ -2382,6 +2383,11 @@ ProjectManager::ProjectManager() { EditorSettings::create(); } + // Turn off some servers we aren't going to be using in the Project Manager. + NavigationServer3D::get_singleton()->set_active(false); + PhysicsServer3D::get_singleton()->set_active(false); + PhysicsServer2D::get_singleton()->set_active(false); + EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came { diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index f10ecab34e..061f4d218a 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -312,7 +312,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: spinbox->hide(); slider->hide(); menu->clear(); - menu->set_size(Size2(1, 1) * EDSCALE); + menu->reset_size(); for (int i = 0; i < MAX_VALUE_EDITORS; i++) { if (i < MAX_VALUE_EDITORS / 4) { diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 0b293c9caf..611038a947 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -899,7 +899,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { // Resize the dialog to its minimum size. // This prevents the dialog from being too wide after displaying // a deletion confirmation for a node with a long name. - delete_dialog->set_size(Size2()); + delete_dialog->reset_size(); delete_dialog->popup_centered(); } @@ -2575,7 +2575,7 @@ void SceneTreeDock::_files_dropped(Vector<String> p_files, NodePath p_to, int p_ menu_properties->set_item_metadata(menu_properties->get_item_count() - 1, p); } - menu_properties->set_size(Size2(1, 1)); + menu_properties->reset_size(); menu_properties->set_position(get_screen_position() + get_local_mouse_position()); menu_properties->popup(); } else if (!valid_properties.is_empty()) { @@ -2667,7 +2667,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_icon_shortcut(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANTIATE); } - menu->set_size(Size2(1, 1)); + menu->reset_size(); menu->set_position(get_screen_position() + p_menu_pos); menu->popup(); return; @@ -2690,7 +2690,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { if (profile_allow_editing) { subresources.clear(); menu_subresources->clear(); - menu_subresources->set_size(Size2(1, 1)); + menu_subresources->reset_size(); _add_children_to_popup(selection.front()->get(), 0); if (menu->get_item_count() > 0) { menu->add_separator(); @@ -2831,7 +2831,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_separator(); menu->add_icon_shortcut(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), Key::KEY_DELETE), TOOL_ERASE); } - menu->set_size(Size2(1, 1)); + menu->reset_size(); menu->set_position(p_menu_pos); menu->popup(); } @@ -2843,7 +2843,7 @@ void SceneTreeDock::_open_tree_menu() { menu->add_check_item(TTR("Auto Expand to Selected"), TOOL_AUTO_EXPAND); menu->set_item_checked(menu->get_item_idx_from_text(TTR("Auto Expand to Selected")), EditorSettings::get_singleton()->get("docks/scene_tree/auto_expand_to_selected")); - menu->set_size(Size2(1, 1)); + menu->reset_size(); menu->set_position(get_screen_position() + get_local_mouse_position()); menu->popup(); } diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 1e19d9bd47..fb1575ad8c 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -315,7 +315,9 @@ void ScriptCreateDialog::_create_new() { } } - if (!is_built_in) { + if (is_built_in) { + scr->set_name(internal_name->get_text()); + } else { String lpath = ProjectSettings::get_singleton()->localize_path(file_path->get_text()); scr->set_path(lpath); Error err = ResourceSaver::save(lpath, scr, ResourceSaver::FLAG_CHANGE_PATH); @@ -686,6 +688,11 @@ void ScriptCreateDialog::_update_dialog() { builtin_warning_label->set_visible(is_built_in); + path_controls[0]->set_visible(!is_built_in); + path_controls[1]->set_visible(!is_built_in); + name_controls[0]->set_visible(is_built_in); + name_controls[1]->set_visible(is_built_in); + // Check if the script name is the same as the parent class. // This warning isn't relevant if the script is built-in. script_name_warning_label->set_visible(!is_built_in && _get_class_name() == parent_name->get_text()); @@ -868,9 +875,24 @@ ScriptCreateDialog::ScriptCreateDialog() { path_button = memnew(Button); path_button->connect("pressed", callable_mp(this, &ScriptCreateDialog::_browse_path), varray(false, true)); hb->add_child(path_button); - gc->add_child(memnew(Label(TTR("Path:")))); + Label *label = memnew(Label(TTR("Path:"))); + gc->add_child(label); gc->add_child(hb); re_check_path = false; + path_controls[0] = label; + path_controls[1] = hb; + + /* Name */ + + internal_name = memnew(LineEdit); + internal_name->set_h_size_flags(Control::SIZE_EXPAND_FILL); + label = memnew(Label(TTR("Name:"))); + gc->add_child(label); + gc->add_child(internal_name); + name_controls[0] = label; + name_controls[1] = internal_name; + label->hide(); + internal_name->hide(); /* Dialog Setup */ diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h index 7c2ef1e150..dba798eea7 100644 --- a/editor/script_create_dialog.h +++ b/editor/script_create_dialog.h @@ -57,6 +57,7 @@ class ScriptCreateDialog : public ConfirmationDialog { OptionButton *language_menu; OptionButton *template_menu; LineEdit *file_path; + LineEdit *internal_name; Button *path_button; EditorFileDialog *file_browse; CheckBox *internal; @@ -81,6 +82,9 @@ class ScriptCreateDialog : public ConfirmationDialog { int default_language; bool re_check_path; + Control *path_controls[2]; + Control *name_controls[2]; + enum ScriptOrigin { SCRIPT_ORIGIN_PROJECT, SCRIPT_ORIGIN_EDITOR, diff --git a/editor/translations/af.po b/editor/translations/af.po index 2e733a4fb8..a1a19d1679 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -7803,11 +7803,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/ar.po b/editor/translations/ar.po index a32b919cf2..c8cc51dd2c 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -61,8 +61,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: 2021-10-30 00:50+0000\n" -"Last-Translator: HASSAN GAMER - ØØ³Ù† جيمر <gamerhassan55@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 08:00+0000\n" +"Last-Translator: Nabeel20 <nabeelandnizam@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -71,7 +71,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -985,7 +985,6 @@ msgid "Edit..." msgstr "تعديل..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" msgstr "إذهب إلى الدالة" @@ -1297,9 +1296,8 @@ msgid "Licenses" msgstr "تراخيص" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "ØØ¯Ø« خطأ Ø¹Ù†Ø¯ÙØªØ Ù…Ù„Ù Ø§Ù„ØØ²Ù…Ø© بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"." +msgstr "ØØ¯Ø« خطأ Ø¹Ù†Ø¯ÙØªØ مل٠%s Ø§Ù„ØØ²Ù…Ø© بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"." #: editor/editor_asset_installer.cpp msgid "%s (already exists)" @@ -1882,14 +1880,12 @@ msgid "Current Profile:" msgstr "المل٠(النسخة) Ø§Ù„ØØ§Ù„ية:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ù„Ù" +msgstr "أصنع ØØ³Ø§Ø¨" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "إزالة البلاط" +msgstr "Ø£Ù…Ø³Ø Ø§Ù„ØØ³Ø§Ø¨" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1909,9 +1905,8 @@ msgid "Export" msgstr "تصدير" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "المل٠(النسخة) Ø§Ù„ØØ§Ù„ية:" +msgstr "عدل على Ø§Ù„ØØ³Ø§Ø¨ Ø§Ù„ØØ§Ù„ÙŠ:" #: editor/editor_feature_profile.cpp #, fuzzy @@ -2587,7 +2582,7 @@ msgstr "هل تريد ØÙظ التغييرات إلي'%s' قبل الإغلاق #: editor/editor_node.cpp msgid "%s no longer exists! Please specify a new save location." -msgstr "" +msgstr "%s لم يعد موجوداً! من ÙØ¶Ù„Ùƒ ØØ¯Ø¯ موقعاً جديداً للØÙظ." #: editor/editor_node.cpp msgid "" @@ -2634,11 +2629,11 @@ msgstr "لم يتم ØÙظ المشهد Ø§Ù„ØØ§Ù„ÙŠ. Ø¥ÙØªØÙ‡ علي أية Ø #: editor/editor_node.cpp msgid "Can't undo while mouse buttons are pressed." -msgstr "" +msgstr "لا يمكن التراجع أثناء ضغط أزار Ø§Ù„ÙØ£Ø±Ø©." #: editor/editor_node.cpp msgid "Nothing to undo." -msgstr "" +msgstr "لا شيء للتراجع عنه." #: editor/editor_node.cpp #, fuzzy @@ -2647,11 +2642,11 @@ msgstr "تراجع" #: editor/editor_node.cpp msgid "Can't redo while mouse buttons are pressed." -msgstr "" +msgstr "لا يمكن إعادة العمل أثناء ضغط أزرار Ø§Ù„ÙØ£Ø±Ø©." #: editor/editor_node.cpp msgid "Nothing to redo." -msgstr "" +msgstr "لا شيء لإعادة عمله مجدداً." #: editor/editor_node.cpp #, fuzzy @@ -3598,7 +3593,7 @@ msgstr "" #: editor/editor_resource_picker.cpp msgid "Quick Load" -msgstr "" +msgstr "تØÙ…يل سريع" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" @@ -7804,14 +7799,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "لا يملك هذا الهكيل أيّة عظام، أنشئ بعض عÙقد العظام ثنائية Ø§Ù„Ø¨ÙØ¹Ø¯ كأبناء." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "إنشاء وضعية Ø§Ù„Ø±Ø§ØØ© من العظام" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "ØªØØ¯ÙŠØ¯ وضعية Ø§Ù„Ø±Ø§ØØ© على العظام" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "إنشاء وضعية Ø§Ù„Ø±Ø§ØØ© من العظام" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "هيكل ثنائي Ø§Ù„Ø¨ÙØ¹Ø¯" diff --git a/editor/translations/az.po b/editor/translations/az.po index 77470b2db5..df60e7757a 100644 --- a/editor/translations/az.po +++ b/editor/translations/az.po @@ -7515,11 +7515,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 11a94b8796..98f60b8518 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -7514,14 +7514,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index b3efe37fe4..a8581e7f45 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -8227,15 +8227,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Mesh হতে Emitter তৈরি করà§à¦¨" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "সà§à¦•েলেটন/কাঠাম..." diff --git a/editor/translations/br.po b/editor/translations/br.po index 690ede66ef..3cbe4155a9 100644 --- a/editor/translations/br.po +++ b/editor/translations/br.po @@ -7436,11 +7436,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 92dd5fff63..22b9e47836 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -7892,15 +7892,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Aquest esquelet no té ossos, crea alguns nodes Bone2D fills." #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "Estableix la Postura de Repòs als Ossos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Crea Punts d'Emissió des d'una Malla" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "Estableix la Postura de Repòs als Ossos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Esquelet2D" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 721a03dfc5..34de7ebc7a 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -7722,14 +7722,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Kostra nemá žádné kosti, vytvoÅ™ nÄ›jaké potomky Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "VytvoÅ™it klidovou pózu z kostÃ" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Nastavit kosti podle klidové pózy" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "VytvoÅ™it klidovou pózu z kostÃ" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D (Kostra 2D)" diff --git a/editor/translations/da.po b/editor/translations/da.po index fcef08f4e1..12df305276 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -14,7 +14,7 @@ # Rémi Verschelde <akien@godotengine.org>, 2019. # Mads K. Bredager <mbredager@gmail.com>, 2019. # Kristoffer Andersen <kjaa@google.com>, 2019. -# Joe Osborne <reachjoe.o@gmail.com>, 2020. +# Joe Osborne <reachjoe.o@gmail.com>, 2020, 2021. # Autowinto <happymansi@hotmail.com>, 2020, 2021. # Mikkel Mouridsen <mikkelmouridsen@me.com>, 2020, 2021. # snakatk <snaqii@live.dk>, 2021. @@ -23,8 +23,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: 2021-10-31 22:17+0000\n" -"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n" +"PO-Revision-Date: 2021-11-05 11:56+0000\n" +"Last-Translator: Joe Osborne <reachjoe.o@gmail.com>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" @@ -232,9 +232,8 @@ msgid "Animation Playback Track" msgstr "Animation-afspilningsspor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "Animations længde (i sekunder)" +msgstr "Animations længde (billeder)" #: editor/animation_track_editor.cpp #, fuzzy @@ -263,9 +262,8 @@ msgid "Anim Clips:" msgstr "Anim klip:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "Ændre Array-Værdi" +msgstr "Ændre sporsti" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." @@ -391,9 +389,8 @@ msgstr "Anim Indsæt" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Kan ikke Ã¥bne '%s'." +msgstr "node '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp @@ -630,9 +627,8 @@ msgid "Go to Previous Step" msgstr "GÃ¥ til Forrige Trin" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "Nulstil Zoom" +msgstr "Anvende nulstilling" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -8011,15 +8007,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Spil Brugerdefineret Scene" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "Singleton" diff --git a/editor/translations/de.po b/editor/translations/de.po index ecc7ec9611..56eca938d0 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -7842,14 +7842,14 @@ msgstr "" "hinzugefügt werden." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Ruhe-Pose aus Knochen erstellen" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Knochen in Ruhe-Pose setzen" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Ruhe-Pose aus Knochen erstellen" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skelett2D" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 778947373b..9d183271f6 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -7409,11 +7409,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/el.po b/editor/translations/el.po index 07e55d9a90..3aa20da318 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -7863,14 +7863,14 @@ msgstr "" "Αυτός ο σκελετός δεν Îχει οστά, δώστε του κάποιους κόμβους-παιδιά Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "ΟÏισμός Στάσης ΑδÏάνειας σε Οστά" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 9ccaacaa39..c9dd8cfaa8 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -7747,11 +7747,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/es.po b/editor/translations/es.po index b1b3ba6b69..fe7278beaf 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -43,7 +43,7 @@ # Dario <darlex259@gmail.com>, 2019. # Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019. # Julián Luini <jluini@gmail.com>, 2020. -# Victor S. <victorstancioiu@gmail.com>, 2020. +# Victor S. <victorstancioiu@gmail.com>, 2020, 2021. # henry rujano herrera <rujhen@gmail.com>, 2020. # Megamega53 <Christopher.Morales21@myhunter.cuny.edu>, 2020. # Serk Lintur <serk.lintur@gmail.com>, 2020. @@ -76,8 +76,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: 2021-10-31 22:17+0000\n" -"Last-Translator: Anderson Guzman Abreu <chicobello1111@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: Victor S. <victorstancioiu@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -85,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2941,7 +2941,7 @@ msgstr "Añadir nueva escena." #: editor/editor_node.cpp msgid "Scene" -msgstr "Escenas" +msgstr "Escena" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -7842,14 +7842,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Crear Pose de Descanso a partir de los Huesos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Establecer Pose de Descanso en los Huesos" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Crear Pose de Descanso a partir de los Huesos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 1276ebe607..271bb11040 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -7778,14 +7778,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Crear Pose de Descanso a partir de Huesos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Asignar Pose de Descanso a Huesos" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Crear Pose de Descanso a partir de Huesos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/et.po b/editor/translations/et.po index bc58f54d39..4dba826523 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -7514,11 +7514,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 54b7590858..be9638fa8f 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -7491,11 +7491,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/fa.po b/editor/translations/fa.po index cc894bba12..54715f5c9d 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -7814,15 +7814,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "پخش Ø³ÙØ§Ø±Ø´ÛŒ صØÙ†Ù‡" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 830a83ccd8..b3fc0d100b 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -7727,14 +7727,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Tällä luurangolla ei ole luita, luo joitakin Bone2D alisolmuja." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Luo lepoasento luista" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Aseta lepoasento luille" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Luo lepoasento luista" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 6452afd85e..84d4b6ff2a 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -7,12 +7,13 @@ # Bakainkorp <Ryan.Bautista86@myhunter.cuny.edu>, 2019. # Jethro Parker <lionbearjet@hotmail.com>, 2020. # Sven Sorupia <stsorupia@gmail.com>, 2021. +# Napstaguy04 <brokenscreen3@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-06-07 23:43+0000\n" -"Last-Translator: Sven Sorupia <stsorupia@gmail.com>\n" +"PO-Revision-Date: 2021-11-19 08:44+0000\n" +"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n" "Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/" "godot/fil/>\n" "Language: fil\n" @@ -20,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " "|| n % 10 == 6 || n % 10 == 9);\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7444,11 +7445,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp @@ -10869,7 +10870,7 @@ msgstr "" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" -msgstr "" +msgstr "Pangkalahatan" #: editor/project_settings_editor.cpp msgid "Override For..." diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 5661d9bb62..8da997112f 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -7876,14 +7876,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Ce squelette n'a pas d'os, créez des nÅ“uds Bone2D enfants." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Créer la position de repos d'après les os" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Régler la position de repos sur les os" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Créer la position de repos d'après les os" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Squelette 2D" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 25b6ffc4eb..41c2b72c3f 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -7427,11 +7427,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/gl.po b/editor/translations/gl.po index 7d310fe7f9..43be118f3d 100644 --- a/editor/translations/gl.po +++ b/editor/translations/gl.po @@ -7706,14 +7706,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Este esqueleto non ten ósos; crea uns nodos fillo Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Crear Pose de Repouso a partir dos Ósos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Asignar Pose de Repouso aos Ósos" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Crear Pose de Repouso a partir dos Ósos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/he.po b/editor/translations/he.po index 094b9c7850..8150eb063d 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -7831,15 +7831,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "× ×’×™× ×ª ×¡×¦× ×” בהת×מה ×ישית" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "×™×—×™×“× ×™" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 637ce36b91..c9d5128faa 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -7677,11 +7677,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/hr.po b/editor/translations/hr.po index bc30be7c08..e4a3ff779e 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -7476,11 +7476,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/hu.po b/editor/translations/hu.po index fbce7de381..06185da411 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -18,13 +18,15 @@ # GergÅ‘ Pistai <gergopistai@gmail.com>, 2021. # Misi <varady.misi@gmail.com>, 2021. # Looky1173 <lgl1173and2006@gmail.com>, 2021. +# Frontrider <frontrider@tutanota.com>, 2021. +# Andras Virag <snowflake71@gmail.com>, 2021. 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-10-31 22:17+0000\n" -"Last-Translator: Looky1173 <lgl1173and2006@gmail.com>\n" +"PO-Revision-Date: 2021-11-14 11:41+0000\n" +"Last-Translator: Andras Virag <snowflake71@gmail.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\n" @@ -32,7 +34,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2143,22 +2145,20 @@ msgid "Methods" msgstr "Metódusok" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Téma Tulajdonságok" +msgstr "Téma Tulajdonságai" #: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" -msgstr "Számlálók" +msgstr "Listák" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" -msgstr "Konstansok" +msgstr "Ãllandók" #: editor/editor_help.cpp msgid "Property Descriptions" -msgstr "Tulajdonság leÃrások" +msgstr "Tulajdonság leÃrásai" #: editor/editor_help.cpp msgid "(value)" @@ -7738,11 +7738,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/id.po b/editor/translations/id.po index 784409cddb..a52361e5c7 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -34,13 +34,14 @@ # undisputedgoose <diablodvorak@gmail.com>, 2021. # Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021. # Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021. +# Brian <brian@brianthe.dev>, 2021. 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-10-15 04:32+0000\n" -"Last-Translator: Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>\n" +"PO-Revision-Date: 2021-11-19 08:43+0000\n" +"Last-Translator: Brian <brian@brianthe.dev>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -48,7 +49,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2430,9 +2431,8 @@ msgstr "" "tidak terpenuhi." #: editor/editor_node.cpp -#, fuzzy msgid "Could not save one or more scenes!" -msgstr "Tidak dapat memulai subproses!" +msgstr "Tidak dapat menyimpan satu atau lebih skena!" #: editor/editor_node.cpp msgid "Save All Scenes" @@ -7380,14 +7380,12 @@ msgid "Move Down" msgstr "Turunkan" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next Script" -msgstr "Skrip berikutnya" +msgstr "Skrip Berikutnya" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous Script" -msgstr "Skrip sebelumnya" +msgstr "Skrip Sebelumnya" #: editor/plugins/script_editor_plugin.cpp msgid "File" @@ -7741,14 +7739,14 @@ msgstr "" "Kerangka ini tidak memiliki pertulangan, buatlah beberapa anak node Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Buat Pose Istirahat dari Pertulangan" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Atur Pose Istirahat ke Pertulangan" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Buat Pose Istirahat dari Pertulangan" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" @@ -7805,9 +7803,8 @@ msgid "Left Orthogonal" msgstr "Ortogonal Kiri" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left Perspective" -msgstr "Perspektif" +msgstr "Perspektif Kiri" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right Orthogonal" @@ -7908,7 +7905,7 @@ msgstr "Dongak:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Yaw:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Size:" @@ -7940,7 +7937,7 @@ msgstr "Sudut:" #: 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." @@ -8075,9 +8072,8 @@ msgid "Freelook Slow Modifier" msgstr "Pengubah Lambat Tampilan Bebas" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Ubah Ukuran Kamera" +msgstr "Alihkan Pratinjau Kamera" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" diff --git a/editor/translations/is.po b/editor/translations/is.po index 4c9221925a..fcf380d7c8 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -7511,11 +7511,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/it.po b/editor/translations/it.po index 5dfecbf0e8..dded7242e0 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -40,7 +40,7 @@ # Mirko Soppelsa <miknsop@gmail.com>, 2019, 2020, 2021. # No <kingofwizards.kw7@gmail.com>, 2019. # StarFang208 <polaritymanx@yahoo.it>, 2019. -# Katia Piazza <gydey@ridiculousglitch.com>, 2019. +# Katia Piazza <gydey@ridiculousglitch.com>, 2019, 2021. # nickfla1 <lanterniniflavio@gmail.com>, 2019. # Fabio Iotti <fabiogiopla@gmail.com>, 2020. # Douglas Fiedler <dognew@gmail.com>, 2020. @@ -61,12 +61,15 @@ # Daniele Basso <tiziodcaio@gmail.com>, 2021. # Riteo Siuga <riteo@posteo.net>, 2021. # Luigi <luibass92@live.it>, 2021. +# Micky <micheledevita2@gmail.com>, 2021. +# Fabio Plos <altre0cose@gmail.com>, 2021. +# Theraloss <danilo.polani@gmail.com>, 2021. 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-10-24 20:52+0000\n" +"PO-Revision-Date: 2021-11-19 08:43+0000\n" "Last-Translator: Riteo Siuga <riteo@posteo.net>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -75,7 +78,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -674,9 +677,8 @@ msgid "Use Bezier Curves" msgstr "Usa le curve di Bézier" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "Crea delle tracce di reimpostazione" +msgstr "Crea traccia/e di rispristino" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -1417,14 +1419,12 @@ msgid "Mute" msgstr "Muto" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bypass" -msgstr "Bypassa" +msgstr "Aggira" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "Opzioni del bus" +msgstr "Opzioni Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1437,7 +1437,7 @@ msgstr "Ripristina il volume" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "Elimina l'effetto" +msgstr "Elimina Effetto" #: editor/editor_audio_buses.cpp msgid "Audio" @@ -1449,7 +1449,7 @@ msgstr "Aggiungi un bus audio" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "Il bus principale non può essere cancellato!" +msgstr "Il bus principale non può essere eliminato!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" @@ -1523,7 +1523,7 @@ msgstr "Salva questa disposizione di bus in un file." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "Carica i predefiniti" +msgstr "Carica predefinita" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." @@ -1547,43 +1547,35 @@ msgstr "Non deve collidere con il nome di una classe del motore esistente." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." -msgstr "Non deve collidere con il nome di un tipo built-in esistente." +msgstr "Non deve confliggere con il nome di un tipo predefinito già esistente." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing global constant name." msgstr "Non deve collidere con il nome di una costante globale esistente." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Keyword cannot be used as an autoload name." -msgstr "" -"Una parola chiave non può essere utilizzata come nome di un caricamento " -"automatico." +msgstr "Una parola chiave non può essere utilizzata come nome di un Autoload." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Autoload '%s' already exists!" msgstr "L'Autoload \"%s\" esiste già !" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rename Autoload" -msgstr "Rinomina un Autoload" +msgstr "Rinomina Autocaricamento" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Toggle AutoLoad Globals" -msgstr "Commuta AutoLoad globals" +msgstr "Commuta Autocaricamenti Globali" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Move Autoload" -msgstr "Sposta un Autoload" +msgstr "Sposta l'Autocaricamento" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Remove Autoload" -msgstr "Rimuovi un Autoload" +msgstr "Rimuovi l'autocaricamento" #: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp msgid "Enable" @@ -1815,7 +1807,7 @@ msgstr "Permette di modificare gli script usando l'editor di script integrato." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "Offre un accesso alla libreria dei contenuti integrato." +msgstr "Offre un accesso incorporato alla Libreria dei Contenuti." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." @@ -1843,9 +1835,8 @@ msgstr "" "individuali. Richiede il pannello del file system per funzionare." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Corrente)" +msgstr "(Attuale)" #: editor/editor_feature_profile.cpp msgid "(none)" @@ -1888,19 +1879,16 @@ msgid "Enable Contextual Editor" msgstr "Abilita l'editor contestuale" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Proprietà :" +msgstr "Proprietà delle classi:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Funzionalità " +msgstr "Funzionalità Principali" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Classi abilitate:" +msgstr "Nodi e Classi:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1919,23 +1907,20 @@ msgid "Error saving profile to path: '%s'." msgstr "Errore di salvataggio del profilo nel percorso: \"%s\"." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "Ripristinare le impostazioni predefinite" +msgstr "Ripristina le impostazioni predefinite" #: editor/editor_feature_profile.cpp msgid "Current Profile:" msgstr "Profilo attuale:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Cancella il profilo" +msgstr "Crea un profilo" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Rimuovi Tile" +msgstr "Rimuovi un profilo" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1955,14 +1940,12 @@ msgid "Export" msgstr "Esporta" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Profilo attuale:" +msgstr "Configura il profilo selezionato:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Opzioni Texture" +msgstr "Opzioni Addizionali" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." @@ -1995,9 +1978,8 @@ msgid "Select Current Folder" msgstr "Seleziona la cartella attuale" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "File esistente, sovrascriverlo?" +msgstr "File esistente, sovrascrivere?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2180,9 +2162,8 @@ msgid "Description" msgstr "Descrizione" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials" -msgstr "Tutorial Online" +msgstr "Corsi Online" #: editor/editor_help.cpp msgid "Properties" @@ -2341,9 +2322,8 @@ msgid "Clear" msgstr "Rimuovi tutto" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Svuota output" +msgstr "Svuota l'output" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #: editor/editor_profiler.cpp @@ -2500,9 +2480,8 @@ msgstr "" "eredità ) non siano state soddisfatte." #: editor/editor_node.cpp -#, fuzzy msgid "Could not save one or more scenes!" -msgstr "Impossibile salvare la texture convertita:" +msgstr "Impossibile salvare una o più scene!" #: editor/editor_node.cpp msgid "Save All Scenes" @@ -2543,7 +2522,7 @@ msgid "" "To restore the Default layout to its base settings, use the Delete Layout " "option and delete the Default layout." msgstr "" -"Disposzione predefinita dell'editor sovrascritta.\n" +"Disposizione predefinita dell'editor sovrascritta.\n" "Per ripristinare la disposizione predefinita alle sue impostazioni di base, " "usare l'opzione elimina layout ed eliminare la disposizione predefinita." @@ -2646,7 +2625,7 @@ msgstr "Salvare le modifiche a \"%s\" prima di chiudere?" #: editor/editor_node.cpp msgid "%s no longer exists! Please specify a new save location." -msgstr "" +msgstr "%s non esiste più! Specificare una nuova posizione di salvataggio" #: editor/editor_node.cpp msgid "" @@ -2657,11 +2636,12 @@ msgstr "" "sono state salvate comunque." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "È necessario un nodo radice per salvare la scena." +msgstr "" +"È necessario un nodo principale per salvare la scena. Puoi aggiungerne uno " +"nel pannello di scena" #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2693,29 +2673,27 @@ msgstr "Scena attuale non salvata. Aprire comunque?" #: editor/editor_node.cpp msgid "Can't undo while mouse buttons are pressed." -msgstr "" +msgstr "Impossible annullare quando i bottoni del mouse sono premuti" #: editor/editor_node.cpp msgid "Nothing to undo." -msgstr "" +msgstr "Niente da annullare." #: editor/editor_node.cpp -#, fuzzy msgid "Undo: %s" msgstr "Annulla" #: editor/editor_node.cpp msgid "Can't redo while mouse buttons are pressed." -msgstr "" +msgstr "Impossibile ripetere mentre si premono pulsanti del mouse." #: editor/editor_node.cpp msgid "Nothing to redo." -msgstr "" +msgstr "Niente da ripetere." #: editor/editor_node.cpp -#, fuzzy msgid "Redo: %s" -msgstr "Rifai" +msgstr "Ripeti: %s" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." @@ -3072,9 +3050,8 @@ msgid "Orphan Resource Explorer..." msgstr "Explorer di risorse orfane…" #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Rinomina progetto" +msgstr "Rinomina il progetto corrente" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3169,7 +3146,6 @@ msgid "Synchronize Script Changes" msgstr "Sincronizza le modifiche degli script" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any script that is saved will be reloaded in " "the running project.\n" @@ -3194,12 +3170,10 @@ msgid "Editor Layout" msgstr "Disposizione dell'editor" #: editor/editor_node.cpp -#, fuzzy msgid "Take Screenshot" -msgstr "Acquisisci una schermata" +msgstr "Acquisisci la schermata" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." msgstr "" "Gli screenshot vengono memorizzati nella cartella Data/Settings dell'editor." @@ -3237,9 +3211,8 @@ msgid "Help" msgstr "Aiuto" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "Apri la documentazione" +msgstr "Documentazione in linea" #: editor/editor_node.cpp msgid "Questions & Answers" @@ -3250,21 +3223,18 @@ msgid "Report a Bug" msgstr "Segnala un problema" #: editor/editor_node.cpp -#, fuzzy msgid "Suggest a Feature" -msgstr "Imposta un Valore" +msgstr "Suggerisci una funzionalità " #: editor/editor_node.cpp -#, fuzzy msgid "Send Docs Feedback" -msgstr "Valuta la documentazione" +msgstr "Manda un parere sulla documentazione" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" msgstr "Comunità " #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" msgstr "Informazioni su Godot" @@ -3363,14 +3333,12 @@ msgid "Manage Templates" msgstr "Gestisci i modelli d'esportazione" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" -msgstr "Installa Da File" +msgstr "Installa da un file" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "Seleziona una Mesh Sorgente:" +msgstr "Selezionare l'archivio delle sorgenti per android" #: editor/editor_node.cpp msgid "" @@ -3421,9 +3389,8 @@ msgid "Merge With Existing" msgstr "Unisci con una esistente" #: editor/editor_node.cpp -#, fuzzy msgid "Apply MeshInstance Transforms" -msgstr "Cambia la trasformazione di un'animazione" +msgstr "Applica le trasformazioni dei MeshInstance" #: editor/editor_node.cpp msgid "Open & Run a Script" @@ -3460,9 +3427,8 @@ msgid "Select" msgstr "Seleziona" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Seleziona la cartella attuale" +msgstr "Seleziona l'attuale" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3499,7 +3465,7 @@ msgstr "Nessuna sottorisorsa trovata." #: editor/editor_path.cpp #, fuzzy msgid "Open a list of sub-resources." -msgstr "Nessuna sottorisorsa trovata." +msgstr "Apre una lista di sottorisorse." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3526,14 +3492,12 @@ msgid "Update" msgstr "Aggiorna" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Versione:" +msgstr "Versione" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" -msgstr "Autori" +msgstr "Autore" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3546,9 +3510,8 @@ msgid "Measure:" msgstr "Misura:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Tempo fotogramma (sec)" +msgstr "Durata di un fotogramma (ms)" #: editor/editor_profiler.cpp #, fuzzy @@ -3638,7 +3601,6 @@ msgstr "" "Esse devono appartenere a una scena." #: editor/editor_properties.cpp -#, fuzzy msgid "" "Can't create a ViewportTexture on this resource because it's not set as " "local to scene.\n" @@ -3647,8 +3609,8 @@ msgid "" msgstr "" "Impossibile creare un VieportTexture su questa risorsa perché non è stata " "impostata come locale alla scena.\n" -"Per favore attivare la properietà \"local to scene\" su di essa (e su tutte " -"quelle che la contengono fino ad arrivare a un nodo)." +"Si prega di attivare la proprietà \"local to scene\" su di essa (e su tutte " +"le risorse che la contengono fino ad arrivare a un nodo)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3693,13 +3655,13 @@ msgstr "" "questa proprietà (%s)." #: editor/editor_resource_picker.cpp +#, fuzzy msgid "Quick Load" -msgstr "" +msgstr "Caricamento rapido" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Make Unique" -msgstr "Rendi unico" +msgstr "Rendi Unico" #: editor/editor_resource_picker.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -3772,8 +3734,8 @@ msgstr "Hai dimenticato il metodo \"_run\"?" #, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Tenere premuto il tasto Ctrl per arrotondare ai numeri interi. Tenere " -"premuto Shift per modifiche più precise." +"Tenere premuto %s per arrotondare ai numeri interi. Tenere premuto Shift per " +"modifiche più precise." #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3823,14 +3785,13 @@ msgid "Connecting to the mirror..." msgstr "Connessione al mirror in corso..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "Impossibile risolvere l'hostname:" +msgstr "Impossibile risolvere l'hostname." #: editor/export_template_manager.cpp #, fuzzy msgid "Can't connect to the mirror." -msgstr "Impossibile connetersi all'host:" +msgstr "Impossibile connettersi all'host." #: editor/export_template_manager.cpp #, fuzzy @@ -3845,12 +3806,11 @@ msgstr "Richiesta fallita." #: editor/export_template_manager.cpp #, fuzzy msgid "Request ended up in a redirect loop." -msgstr "Richiesta fallita, troppi ridirezionamenti" +msgstr "Richiesta bloccata in un ciclo di reindirizzamento." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "Richiesta fallita." +msgstr "Richiesta fallita:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." @@ -3865,8 +3825,8 @@ msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Installazione del template fallita.\n" -"Gli archivi dei template problematici possono essere trovati qui: \"%s\"." +"Installazione dei modelli fallita.\n" +"Gli archivi dei modelli problematici possono essere trovati qui: \"%s\"." #: editor/export_template_manager.cpp msgid "Error getting the list of mirrors." @@ -3888,8 +3848,8 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" -"Nessun collegamento di download trovato per questa versione. I download " -"diretti sono disponibili solo per i rilasci ufficiali." +"Nessun link per il download trovato per questa versione. I download diretti " +"sono disponibili solo per i rilasci ufficiali." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -3901,7 +3861,7 @@ msgstr "Risolvendo" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "Impossibile Risolvere" +msgstr "Impossibile risolvere" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3936,7 +3896,7 @@ msgstr "Errore Handshake SSL" #: editor/export_template_manager.cpp #, fuzzy msgid "Can't open the export templates file." -msgstr "Impossibile aprire zip dei template d'esportazionie." +msgstr "Impossibile aprire zip dei template d'esportazione." #: editor/export_template_manager.cpp #, fuzzy @@ -3955,7 +3915,7 @@ msgstr "Errore di creazione del percorso per i template:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "Estrazione Templates d'Esportazione" +msgstr "Estrazione Template d'Esportazione" #: editor/export_template_manager.cpp msgid "Importing:" @@ -4003,7 +3963,7 @@ msgstr "Disinstalla" #: editor/export_template_manager.cpp #, fuzzy msgid "Uninstall templates for the current version." -msgstr "Valore iniziale per il contatore" +msgstr "Disinstalla template dalla versione attuale." #: editor/export_template_manager.cpp #, fuzzy @@ -4041,12 +4001,11 @@ msgstr "" #: editor/export_template_manager.cpp #, fuzzy msgid "Install from File" -msgstr "Installa Da File" +msgstr "Installa da File" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Importa i modelli da un file ZIP" +msgstr "Importa i modelli da un file locale." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -4056,21 +4015,19 @@ msgstr "Annulla" #: editor/export_template_manager.cpp #, fuzzy msgid "Cancel the download of the templates." -msgstr "Impossibile aprire zip dei template d'esportazionie." +msgstr "Annulla lo scaricamento dei modelli." #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "Versioni Installate:" +msgstr "Altre Versioni Installate:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "Disinstalla" +msgstr "Disinstalla Modello" #: editor/export_template_manager.cpp msgid "Select Template File" -msgstr "Seleziona file template" +msgstr "Seleziona File Modello" #: editor/export_template_manager.cpp msgid "Godot Export Templates" @@ -4098,7 +4055,7 @@ msgstr "" msgid "" "Importing has been disabled for this file, so it can't be opened for editing." msgstr "" -"L'importazione è stata disabilitata per questo file, perciò non possiamo " +"L'importazione è stata disabilitata per questo file, perciò non è possibile " "aprirlo per modificarlo." #: editor/filesystem_dock.cpp @@ -4131,7 +4088,7 @@ msgstr "Il nome fornito contiene caratteri non validi." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "Un file o cartella con questo nome é già esistente." +msgstr "Un file o cartella con questo nome è già esistente." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." @@ -4163,15 +4120,15 @@ msgstr "Rinomina cartella:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "Duplicando file:" +msgstr "Duplica file:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "Duplicando cartella:" +msgstr "Duplica cartella:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" -msgstr "Nuova scena ereditata" +msgstr "Nuova Scena Ereditata" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" @@ -4179,7 +4136,7 @@ msgstr "Imposta Come Scena Principale" #: editor/filesystem_dock.cpp msgid "Open Scenes" -msgstr "Apri scene" +msgstr "Apri Scene" #: editor/filesystem_dock.cpp msgid "Instance" @@ -4187,7 +4144,7 @@ msgstr "Istanza" #: editor/filesystem_dock.cpp msgid "Add to Favorites" -msgstr "Aggiungi ai preferiti" +msgstr "Aggiungi ai Preferiti" #: editor/filesystem_dock.cpp msgid "Remove from Favorites" @@ -4207,7 +4164,7 @@ msgstr "Sposta in..." #: editor/filesystem_dock.cpp msgid "New Scene..." -msgstr "Nuova scena…" +msgstr "Nuova Scena…" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -4230,35 +4187,33 @@ msgid "Collapse All" msgstr "Comprimi Tutto" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Cerca file" +msgstr "Ordina file" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "Ordina per nome (crescente)" +msgstr "Ordina per nome (Crescente)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "Ordina per nome (decrescente)" +msgstr "Ordina per nome (Decrescente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "Ordina per tipo (crescente)" +msgstr "Ordina per tipo (Crescente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "Ordina per tipo (decrescente)" +msgstr "Ordina per tipo (Decrescente)" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by Last Modified" -msgstr "Ultima Modifica" +msgstr "Ordina per Ultima Modifica" #: editor/filesystem_dock.cpp #, fuzzy msgid "Sort by First Modified" -msgstr "Ultima Modifica" +msgstr "Ordina per Prima Modifica" #: editor/filesystem_dock.cpp msgid "Duplicate..." @@ -4282,7 +4237,7 @@ msgstr "Cartella/File successivo" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "Riscansiona il Filesystem" +msgstr "Ri-scansiona il Filesystem" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -4325,7 +4280,7 @@ msgstr "Crea Script" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp msgid "Find in Files" -msgstr "Trova nei file" +msgstr "Trova nei File" #: editor/find_in_files.cpp msgid "Find:" @@ -4365,8 +4320,9 @@ msgid "Replace: " msgstr "Sostituisci: " #: editor/find_in_files.cpp +#, fuzzy msgid "Replace all (no undo)" -msgstr "Sostituisci tutto (no undo)" +msgstr "Sostituisci tutto (non annullabile)" #: editor/find_in_files.cpp msgid "Searching..." @@ -4414,7 +4370,7 @@ msgstr "Gruppi" #: editor/groups_editor.cpp msgid "Nodes Not in Group" -msgstr "Nodi non nel Gruppo" +msgstr "Nodi Non nel Gruppo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -4423,7 +4379,7 @@ msgstr "Filtra nodi" #: editor/groups_editor.cpp msgid "Nodes in Group" -msgstr "Nodi in Gruppo" +msgstr "Nodi nel Gruppo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." @@ -4533,7 +4489,7 @@ msgstr "Ripristinare le impostazioni predefinite" #: editor/import_dock.cpp msgid "Keep File (No Import)" -msgstr "Mantieni il file ( Non importare)" +msgstr "Mantieni il File (Non Importare)" #: editor/import_dock.cpp msgid "%d Files" @@ -4558,6 +4514,11 @@ msgid "" "Selecting another resource in the FileSystem dock without clicking Reimport " "first will discard changes made in the Import dock." msgstr "" +"Hai modifiche non applicate in sospeso. Cliccare Reimporta per applicare le " +"modifiche effettuate alle opzioni di importazione.\n" +"Selezionare un'altra risorsa nel pannello del file system senza prima " +"cliccare su Reimporta annullerà le modifiche effettuate nel riquadro di " +"Importazione." #: editor/import_dock.cpp msgid "Import As:" @@ -4587,14 +4548,12 @@ msgid "Failed to load resource." msgstr "Caricamento della risorsa fallito." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "Proprietà " +msgstr "Copia Proprietà " #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "Proprietà " +msgstr "Incolla Proprietà " #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4610,7 +4569,7 @@ msgstr "Carica una risorsa esistente dal disco e modificala." #: editor/inspector_dock.cpp msgid "Save the currently edited resource." -msgstr "Salva la risorsa in modifica." +msgstr "Salva la risorsa attualmente in modifica." #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -4619,27 +4578,24 @@ msgid "Save As..." msgstr "Salva Come..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "Non è nel percorso risorse." +msgstr "Ulteriori opzioni di risorsa." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Modifica gli appunti delle risorse" +msgstr "Modifica la Risorsa dagli Appunti" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "Copia Risorsa" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "Rendi Built-In" +msgstr "Rendi Risorsa Integrata" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "Vai all'ultimo oggetto modificato nella cronologia." +msgstr "Vai al precedente oggetto modificato nella cronologia." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." @@ -4650,26 +4606,24 @@ msgid "History of recently edited objects." msgstr "Cronologia di oggetti recentemente modificati." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Apri la documentazione" +msgstr "Apri la documentazione per questo oggetto." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" -msgstr "Apri la documentazione" +msgstr "Apri la Documentazione" #: editor/inspector_dock.cpp msgid "Filter properties" msgstr "Filtra proprietà " #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Proprietà oggetto." +msgstr "Gestisci proprietà oggetto." #: editor/inspector_dock.cpp msgid "Changes may be lost!" -msgstr "I cambiamenti potrebbero essere persi!" +msgstr "Le modifiche potrebbero essere perse!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" @@ -4677,7 +4631,7 @@ msgstr "MultiNode Set" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." -msgstr "Seleziona un singolo nodo per eliminare i suoi segnali e gruppi." +msgstr "Seleziona un singolo nodo per modificarne i segnali e gruppi." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4728,6 +4682,7 @@ msgid "Create points." msgstr "Crea punti." #: editor/plugins/abstract_polygon_2d_editor.cpp +#, fuzzy msgid "" "Edit points.\n" "LMB: Move Point\n" @@ -4904,7 +4859,7 @@ msgstr "Cancella punti e triangoli." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "Genera i tringoli di fusione automaticamente (anzichè manualmente)" +msgstr "Genera i triangoli di fusione automaticamente (anziché manualmente)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4923,7 +4878,7 @@ msgstr "Modifica Filtri" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "Il nodo di output non può essere aggiunto all'albero di fusione." +msgstr "Il nodo in output non può essere aggiunto al BlendTree." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" @@ -5101,7 +5056,7 @@ msgstr "Nessuna animazione da modificare!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" msgstr "" -"Esegui la seguente animazione al contrario dalla posizione corrente (A)" +"Esegui la seguente animazione al contrario dalla posizione corrente. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" @@ -5113,11 +5068,11 @@ msgstr "Ferma il playback dell'animazione. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "Esegui l'animazione seguente dall'inizio (Shift+D)" +msgstr "Esegui la seguente l'animazione dall'inizio. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "Esegui la seguente animazione dalla posizione corrente (D)" +msgstr "Esegui la seguente animazione dalla posizione corrente. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." @@ -5150,7 +5105,7 @@ msgstr "Apri nell'Inspector" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "Mostra una lista di animazioni nel player." +msgstr "Mostra la lista di animazioni nel player." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" @@ -5162,7 +5117,7 @@ msgstr "Abilita l'Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning Options" -msgstr "Opzioni dell'onion skinning" +msgstr "Opzioni dell'Onion Skinning" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -5322,7 +5277,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "Assegna l'animazione finale. Questo è utile per le sotto-transizioni." +msgstr "Assegna l'animazione finale. Utile per le sotto-transizioni." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -5330,7 +5285,7 @@ msgstr "Transizione: " #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" -msgstr "Modalità Gioco:" +msgstr "Modalità Riproduzione:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5364,7 +5319,7 @@ msgstr "Mischia" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "Restart Automatico:" +msgstr "Riavvio Automatico:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" @@ -5372,7 +5327,7 @@ msgstr "Riavvia (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "Restart Casuale(i):" +msgstr "Riavvio Casuale (s):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Start!" @@ -5515,7 +5470,7 @@ msgstr "Impossibile risolvere." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "Richiesta fallita, codice di return:" +msgstr "Richiesta fallita, codice ritornato:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Cannot save response to:" @@ -5531,7 +5486,7 @@ msgstr "Richiesta fallita, troppi ridirezionamenti" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect loop." -msgstr "Ridirigi loop." +msgstr "Ciclo di reindirizzamento." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, timeout" @@ -5547,7 +5502,7 @@ msgstr "Fallito:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "Hash di download non buono, si presume il file sia stato manipolato." +msgstr "Hash di download errato, si presume il file sia stato manomesso." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -5559,11 +5514,11 @@ msgstr "Ottenuto:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed SHA-256 hash check" -msgstr "Check has SHA-256 fallito" +msgstr "Controllo hash SHA-256 fallito" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "Errore di scaricamento del contenuto:" +msgstr "Errore di download del contenuto:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." @@ -5599,7 +5554,7 @@ msgstr "Errore durante il download" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "Lo scaricamento di questo contenuto è già in corso!" +msgstr "Il download di questo contenuto è già in corso!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" @@ -5695,7 +5650,7 @@ msgstr "File ZIP dei contenuti" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "Avvia/Pausa l'anteprima audio" +msgstr "Riproduci/Pausa Anteprima Audio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5771,7 +5726,7 @@ msgstr "Passo della griglia:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "Line Primaria Ogni:" +msgstr "Linea Principale Ogni:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "steps" @@ -5860,15 +5815,13 @@ msgstr "Sposta CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Locked" -msgstr "Blocca selezionato" +msgstr "Bloccato" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Grouped" -msgstr "Gruppo" +msgstr "Raggruppato" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5887,7 +5840,7 @@ msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" -"Quando attivato, muovere i nodi Control cambia le loro ancore invece dei " +"Se è attivato, spostare i nodi Control modifica le loro ancore invece dei " "loro margini." #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5928,7 +5881,7 @@ msgstr "Centro" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Left Wide" -msgstr "Lato sinistro" +msgstr "Lato Sinistro" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Wide" @@ -5972,13 +5925,13 @@ msgstr "Cambia Ancore" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" "Sovrascrivi Camera Gioco\n" -"Sovrascrive la camera del gioco con la camera del viewport dell'editor." +"Sovrascrive la camera del progetto in esecuzione con la camera del viewport " +"dell'editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5994,22 +5947,22 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock Selected" -msgstr "Blocca selezionato" +msgstr "Blocca selezionato(i)" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock Selected" -msgstr "Sblocca selezionati" +msgstr "Sblocca selezionato(i)" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Group Selected" -msgstr "Gruppo Selezionato" +msgstr "Raggruppa Selezionato(i)" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Ungroup Selected" -msgstr "Rimuovi selezionati dal gruppo" +msgstr "Rimuovi selezionato(i) dal gruppo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -6017,7 +5970,7 @@ msgstr "Incolla Posa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Guides" -msgstr "Rimuovi guide" +msgstr "Rimuovi Guide" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -6025,7 +5978,7 @@ msgstr "Crea Ossa personalizzate a partire da uno o più Nodi" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" -msgstr "Rimuovi ossa" +msgstr "Rimuovi Ossa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -6048,40 +6001,36 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "Ripristina ingrandimento" +msgstr "Ripristina Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Modalità di selezione" +msgstr "Modalità di Selezione" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Rimuovi il nodo o la transizione selezionati." +msgstr "Trascina: Ruota il nodo selezionato attorno al perno." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Drag: Muovi" +msgstr "Alt+Trascina: Muovi nodo selezionato." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Rimuovi il nodo o la transizione selezionati." +msgstr "V: Imposta il perno di rotazione del nodo selezionato." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Mostra una lista di tutti gli oggetti alla posizione cliccata\n" -"(identico a Alt+RMB in modalità selezione)." +"Alt+Tasto Destro del Mouse: Mostra una lista di tutti i nodi presenti nel " +"posto cliccato, compresi quelli bloccati." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "Click destro: aggiungi un nodo sulla posizione cliccata." +msgstr "Click destro: Aggiungi nodo alla posizione cliccata." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6105,7 +6054,7 @@ msgid "" "(same as Alt+RMB in select mode)." msgstr "" "Mostra una lista di tutti gli oggetti alla posizione cliccata\n" -"(identico a Alt+RMB in modalità selezione)." +"(identico a Alt+Click Destro in modalità selezione)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -6117,7 +6066,7 @@ msgstr "Modalità di Pan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Ruler Mode" -msgstr "Modalità righello" +msgstr "Modalità Righello" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -6251,6 +6200,7 @@ msgid "Always Show Grid" msgstr "Mostra sempre Griglia" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Show Helpers" msgstr "Mostra guide" @@ -6276,11 +6226,11 @@ msgstr "Mostra Gruppo e Blocca Icone" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Centra selezione" +msgstr "Centra Selezione" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "Selezione frame" +msgstr "Selezione Frame" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -6321,11 +6271,11 @@ msgstr "Inserimento Automatico Chiave" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation Key and Pose Options" -msgstr "Chiavi d'Animazione e Opzioni Posa" +msgstr "Opzioni di Chiavi d'Animazione e Posa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Inserisci chiave (tracce esistenti)" +msgstr "Inserisci Chiave (Tracce Esistenti)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -6333,17 +6283,15 @@ msgstr "Copia Posa" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "Azzera posa" +msgstr "Azzera Posa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Aggiungi Nodo" +msgstr "Aggiungi Nodo Qui" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Istanzia Scena(e)" +msgstr "Istanzia Scena(e) Qui" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6351,7 +6299,7 @@ msgstr "Moltiplica per 2 il passo della griglia" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Divide grid step by 2" -msgstr "Dividi per 2 il passo della griglia" +msgstr "Divide per 2 il passo della griglia" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan View" @@ -6359,49 +6307,43 @@ msgstr "Trasla Visuale" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "Ingrandisci al 3.125%" +msgstr "Zoom a 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "Ingrandisci al 6.25%" +msgstr "Zoom a 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "Ingrandisci al 12.5%" +msgstr "Zoom a 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Rimpicciolisci" +msgstr "Zoom a 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "Ingrandisci al 1600%" +msgstr "Zoom a 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6434,8 +6376,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"Premi & Trascina + Shift : Aggiungi nodo come fratello\n" -"Premi & Trascina + Alt : Cambia tipo del nodo" +"Trascina & Rilascia + Shift : Aggiungi nodo come fratello\n" +"Trascina & Rilascia + Alt : Cambia tipo del nodo" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" @@ -6617,7 +6559,7 @@ msgstr "Editor Lista Elementi" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" -msgstr "Crea Poligono di occlusione" +msgstr "Crea Poligono di Occlusione" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" @@ -6730,7 +6672,7 @@ msgid "" msgstr "" "Crea una StaticBody e le assegna automaticamente una forma di collisione " "basata sui poligoni.\n" -"Questa é l'opzione piú accurata (anche se piú lenta) per il calcolo delle " +"Questa é l'opzione più accurata (anche se più lenta) per il calcolo delle " "collisioni." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6756,7 +6698,7 @@ msgid "" "This is the fastest (but least accurate) option for collision detection." msgstr "" "Crea una singola forma di collisione convessa.\n" -"Questa é l'opzione piú veloce (anche se meno accurata) per il calcolo delle " +"Questa è l'opzione più veloce (sebbene meno accurata) per il calcolo delle " "collisioni." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6771,22 +6713,21 @@ msgid "" "geometry in some cases, at the cost of accuracy." msgstr "" "Crea una forma di collisione convessa semplificata.\n" -"Essa è simile a una forma di collisione singola ma in alcuni casi può " -"risultare in una geometria più semplice al costo di risultare inaccurata." +"Essa è simile a una forma di collisione singola, ma in alcuni casi può " +"risultare in una geometria più semplice, al costo di risultare inaccurata." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" msgstr "Crea Multipli Fratelli di Collsione Convessa" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" "Crea una forma di collisione basata sui poligoni.\n" -"Questa opzione é, in termini di perfomance, un compromesso tra le due " +"Questa opzione è, in termini di prestazioni, un compromesso tra le due " "opzioni prima di questa." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6794,6 +6735,7 @@ msgid "Create Outline Mesh..." msgstr "Crea Mesh di Outline..." #: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy msgid "" "Creates a static outline mesh. The outline mesh will have its normals " "flipped automatically.\n" @@ -6851,7 +6793,7 @@ msgstr "Aggiungi Elemento" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "Rimuovi Elementi Selezionati" +msgstr "Rimuovi Elemento Selezionato" #: editor/plugins/mesh_library_editor_plugin.cpp #, fuzzy @@ -6887,7 +6829,7 @@ msgstr "Sorgente Mesh invalida (non è una MeshInstance)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "Sorgente Mesh invalida (non contiene alcun a risorsa Mesh)." +msgstr "Sorgente Mesh invalida (non contiene alcuna risorsa Mesh)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." @@ -6910,6 +6852,7 @@ msgid "Select a Source Mesh:" msgstr "Seleziona una Mesh Sorgente:" #: editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Select a Target Surface:" msgstr "Seleziona una Superficie di Target:" @@ -6922,6 +6865,7 @@ msgid "Populate MultiMesh" msgstr "Popola MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp +#, fuzzy msgid "Target Surface:" msgstr "Superficie Target:" @@ -6982,7 +6926,7 @@ msgstr "Genera Rect Visibilità " #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" msgstr "" -"É solamente possibile impostare il punto in un materiale di processo " +"È solamente possibile impostare il punto in un materiale di processo " "ParticlesMaterial" #: editor/plugins/particles_2d_editor_plugin.cpp @@ -6996,7 +6940,7 @@ msgstr "Tempo di Generazione (sec):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "La faccia della geometria non contiene alcuna area." +msgstr "Le facce della geometria non contengono nessuna area." #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry doesn't contain any faces." @@ -7040,7 +6984,7 @@ msgstr "Sorgente Emissione: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "Un processor material di tipo \"ParticlesMaterial\" é richiesto." +msgstr "Un processor material di tipo 'ParticlesMaterial' é richiesto." #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" @@ -7052,7 +6996,7 @@ msgstr "Genera Visibilità AABB" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "Rimuovi Punto da Curva" +msgstr "Rimuovi Punto dalla Curva" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" @@ -7060,7 +7004,7 @@ msgstr "Rimuovi Out-Control dalla Curva" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "Rimuovi In-Control da Curva" +msgstr "Rimuovi In-Control dalla Curva" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -7124,7 +7068,7 @@ msgstr "Elimina Punto" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Close Curve" -msgstr "Chiudi curva" +msgstr "Chiudi Curva" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -7136,12 +7080,12 @@ msgstr "Opzioni" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "Specchia maniglie angolari" +msgstr "Specchia Angoli Manico" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "Specchia lunghezza maniglie" +msgstr "Specchia Lunghezze Manico" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -7177,20 +7121,20 @@ msgstr "Rimuovi Punto In-Control" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "Dividere segmento (in curva)" +msgstr "Dividere Segmento (in curva)" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" -msgstr "Spostare il giunto" +msgstr "Sposta Articolazione" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "La proprietà scheletro del Polygon2D non punta a un nodo Skeleton2D" +msgstr "La proprietà skeleton del Polygon2D non punta a un nodo Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" -msgstr "Sincronizza ossa" +msgstr "Sincronizza Ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -7198,11 +7142,11 @@ msgid "" "Set a texture to be able to edit UV." msgstr "" "Nessuna texture in questo poligono.\n" -"Impostare una texture per poter modificare UV." +"Imposta una texture per poter modificare l'UV." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" -msgstr "Creare mappa UV" +msgstr "Creare Mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -7214,39 +7158,39 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" -msgstr "Crea poligono e UV" +msgstr "Crea Poligono & UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Internal Vertex" -msgstr "Crea vertice interno" +msgstr "Crea Vertice Interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "Rimuovi vertice interno" +msgstr "Rimuovi Vertice Interno" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" -msgstr "Poligono non valido (sono necessari 3 vertici differenti)" +msgstr "Poligono non valido (sono necessari 3 vertici diversi)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Add Custom Polygon" -msgstr "Aggiungi poligono personalizzato" +msgstr "Aggiungi Poligono Personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "Rimuovi poligono personalizzato" +msgstr "Rimuovi Poligono Personalizzato" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "Trasforma la mappa UV" +msgstr "Trasforma Mappa UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform Polygon" -msgstr "Trasforma il poligono" +msgstr "Trasforma Poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" -msgstr "Dipingi peso delle ossa" +msgstr "Dipingi Peso delle Ossa" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." @@ -7311,8 +7255,8 @@ msgstr "Scala poligono" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." msgstr "" -"Crea un poligono personalizzato. Abilita il rendering personalizzato dei " -"poligoni." +"Crea un poligono personalizzato. Abilita il rendering dei poligoni " +"personalizzati." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" @@ -7320,7 +7264,7 @@ msgid "" "disabled." msgstr "" "Rimuove un poligono personalizzato. Se non ne rimane nessuno, il rendering " -"personalizzato dei poligoni è disabilitato." +"dei poligoni personalizzati è disabilitato." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." @@ -7388,7 +7332,7 @@ msgstr "Passo Y della griglia:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones to Polygon" -msgstr "Sincronizza le ossa al poligono" +msgstr "Sincronizza Ossa a Poligono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -7438,7 +7382,7 @@ msgstr "Carica risorsa" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" -msgstr "Preloader Risorsa" +msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp #, fuzzy @@ -7466,9 +7410,8 @@ msgid "Occluder Set Transform" msgstr "Azzera la trasformazione" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Center Node" -msgstr "Crea Nodo" +msgstr "Centra Nodo" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7480,11 +7423,11 @@ msgstr "Il percorso per AnimationPlayer non è valido" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "Elimina i file recenti" +msgstr "Pulisci file recenti" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "Chiudere e salvare i cambiamenti?" +msgstr "Chiudi e salva le modifiche?" #: editor/plugins/script_editor_plugin.cpp msgid "Error writing TextFile:" @@ -7540,11 +7483,10 @@ msgid "Script is not in tool mode, will not be able to run." msgstr "Lo script non è in modalità tool, non sarà possibile eseguirlo." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" -"Per eseguire questo script, esso deve ereditare da EditorScript ed essere " +"Per eseguire questo script, deve ereditare da EditorScript ed essere " "impostato in modalità tool." #: editor/plugins/script_editor_plugin.cpp @@ -7606,12 +7548,10 @@ msgid "Move Down" msgstr "Sposta giù" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next Script" msgstr "Script successivo" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous Script" msgstr "Script precedente" @@ -7625,7 +7565,7 @@ msgstr "Apri..." #: editor/plugins/script_editor_plugin.cpp msgid "Reopen Closed Script" -msgstr "Riapri lo script chiuso" +msgstr "Riapri script chiuso" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -7711,7 +7651,6 @@ msgstr "Debug con un editor esterno" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "Online Docs" msgstr "Documentazione online" @@ -7721,15 +7660,15 @@ msgstr "Apri la documentazione online di Godot." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "Cerca Riferimenti nella documentazione." +msgstr "Cerca riferimenti nella documentazione." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "Vai al documento precedentemente modificato." +msgstr "Vai al documento modificato precedente." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "Vai al documento successivo." +msgstr "Vai al documento modificato successivo." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" @@ -7740,8 +7679,8 @@ msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" -"I file seguenti sono più recenti su disco.\n" -"Che azione deve essere intrapresa?:" +"I seguenti file sono più recenti sul disco.\n" +"Che azione dovrebbe essere intrapresa?:" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" @@ -7749,7 +7688,7 @@ msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp msgid "Search Results" -msgstr "Cerca risultati" +msgstr "Risultati Ricerca" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -7911,7 +7850,7 @@ msgstr "Aiuto contestuale" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" -msgstr "Commuta i segnalibri" +msgstr "Commuta segnalibro" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Bookmark" @@ -7967,21 +7906,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Questo scheletro non ha ossa, crea dei nodi figlio Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Crea Posizione di Riposo dalle Ossa" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Imposta Ossa in Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Crea Posizione di Riposo dalle Ossa" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Reset to Rest Pose" -msgstr "Imposta Ossa in Posizione di Riposo" +msgstr "Ripristina a Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy @@ -8010,77 +7948,66 @@ msgstr "Ortogonale" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective" -msgstr "Prospettiva" +msgstr "Prospettica" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale dall'Alto" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top Perspective" -msgstr "Prospettiva" +msgstr "Prospettica dall'Alto" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale dal Basso" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom Perspective" -msgstr "Prospettiva" +msgstr "Prospettica dal Basso" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale a Sinistra" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left Perspective" -msgstr "Prospettiva" +msgstr "Prospettica a Sinistra" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale a Destra" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right Perspective" -msgstr "Prospettiva" +msgstr "Prospettica a Destra" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale di Fronte" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front Perspective" -msgstr "Prospettiva" +msgstr "Prospettica di Fronte" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear Orthogonal" -msgstr "Ortogonale" +msgstr "Ortogonale da Dietro" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear Perspective" -msgstr "Prospettiva" +msgstr "Prospettica da Dietro" #. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. #: editor/plugins/spatial_editor_plugin.cpp msgid " [auto]" -msgstr "" +msgstr " [auto]" #. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid " [portals active]" -msgstr "" +msgstr " [portali attivi]" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." @@ -8109,15 +8036,13 @@ msgid "None" msgstr "Nessuno" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Stato" +msgstr "Ruota" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Trasla:" +msgstr "Trasla" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale" @@ -8144,38 +8069,32 @@ msgid "Animation Key Inserted." msgstr "Chiave d'animazione inserita." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Inclinazione" +msgstr "Inclinazione:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" msgstr "Imbardata:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Dimensione: " +msgstr "Dimensione:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Oggetti disegnati" +msgstr "Oggetti disegnati:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Cambiamenti dei materiali" +msgstr "Cambiamenti dei materiali:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Cambiamenti degli shader" +msgstr "Cambiamenti degli shader:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Cambiamenti delle superfici" +msgstr "Cambiamenti delle superfici:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -8183,9 +8102,8 @@ msgid "Draw Calls:" msgstr "Draw Calls" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Vertici" +msgstr "Vertici:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" @@ -8321,12 +8239,11 @@ msgstr "Modificatore Velocità Vista Libera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Slow Modifier" -msgstr "Modificatore Vista Libera Velocità Lenta" +msgstr "Modificatore Velocità Lenta Vista Libera" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Cambia dimensione Telecamera" +msgstr "Cambia Anteprima Telecamera" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8345,13 +8262,12 @@ msgid "" "It cannot be used as a reliable indication of in-game performance." msgstr "" "Nota: Il valore di FPS mostrato è relativo al framerate dell'editor.\n" -"Non può essere usato come indicatore affidabile delle performance durante il " +"Non può essere usato come indicatore affidabile delle prestazioni durante il " "gioco." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Converti in %s" +msgstr "Converti Stanze" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8367,7 +8283,7 @@ msgid "" msgstr "" "Fare clic per passare da uno stato di visibilità all'altro.\n" "\n" -"Apri gli occhi: Gizmo è visibile.\n" +"Occhio aperto: Gizmo è visibile.\n" "Occhio chiuso: Gizmo è nascosto.\n" "Occhio semiaperto: Gizmo è visibile anche attraverso superfici opache " "(\"raggi X\")." @@ -8388,9 +8304,8 @@ msgid "Use Local Space" msgstr "Usa Spazio Locale" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Snap" -msgstr "Scatta" +msgstr "Usa Scatto" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." @@ -8513,14 +8428,12 @@ msgid "View Grid" msgstr "Visualizza Griglia" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Impostazioni Viewport" +msgstr "Visualizza Eliminazione Portali" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Occlusion Culling" -msgstr "Impostazioni Viewport" +msgstr "Visualizza Eliminazione Occlusioni" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8577,7 +8490,7 @@ msgstr "Ruota (gradi):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "Scala (rateo):" +msgstr "Scala (rapporto):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -8592,9 +8505,8 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Unnamed Gizmo" -msgstr "Progetto Senza Nome" +msgstr "Gizmo Senza Nome" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8626,7 +8538,7 @@ msgstr "Crea LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "LightOccluder2D Preview" -msgstr "Crea LightOccluder2D" +msgstr "Anteprima LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -8684,7 +8596,7 @@ msgstr "Rimpicciolisci (Pixels): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "Aumento (Pixels): " +msgstr "Ingrandisci (Pixels): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -8700,7 +8612,7 @@ msgstr "Nessun Frame selezionato" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add %d Frame(s)" -msgstr "Aggiungi %d frame(s)" +msgstr "Aggiungi %d frame" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" @@ -8728,7 +8640,7 @@ msgstr "Aggiungi vuoto" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "Cambia FPS ANimazione" +msgstr "Cambia FPS Animazione" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" @@ -8764,7 +8676,7 @@ msgstr "Aggiungi una Texture da File" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" -msgstr "Aggiungi Frames da uno Spritesheet" +msgstr "Aggiungi Frame da uno Spritesheet" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" @@ -8854,14 +8766,12 @@ msgid "Colors" msgstr "Colore" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" msgstr "Font" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Icona" +msgstr "Icone" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8873,47 +8783,40 @@ msgid "{num} color(s)" msgstr "{num} colori" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "Nessuna sottorisorsa trovata." +msgstr "Nessun colore trovato." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Costanti" +msgstr "{num} costanti" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Costante di colore." +msgstr "Nessuna costante trovata." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} font(s)" -msgstr "{num} caratteri" +msgstr "{num} font" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "Non trovato!" +msgstr "Nessun font trovato." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" msgstr "{num} icone" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "Non trovato!" +msgstr "Nessuna icona trovata." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" msgstr "{num} stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "Nessuna sottorisorsa trovata." +msgstr "Nessun stylebox trovato." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" @@ -8921,7 +8824,7 @@ msgstr "{num} selezionati" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "Non è stato selezionato nulla da importare." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8943,13 +8846,12 @@ msgid "Finalizing" msgstr "Analizzando" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Filtro:" +msgstr "Filtra:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "Con i Dati" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9027,6 +8929,8 @@ msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"Attenzione: Aggiungere i dati delle icone potrebbe aumentare notevolmente il " +"peso della tua risorsa Tema." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9044,27 +8948,24 @@ msgid "Select all Theme items." msgstr "Seleziona file template" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Selezione Punti" +msgstr "Selezione con data" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Seleziona tutto" +msgstr "Deseleziona tutto" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Deseleziona tutti gli elementi del Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Importa Scena" +msgstr "Importa Selezionati" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -9166,13 +9067,12 @@ msgid "Rename Stylebox Item" msgstr "Rimuovi Elementi Selezionati" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "File non valido, non è una disposizione di un bus audio." +msgstr "File non valido, non una risorsa Tema." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "File non valido, corrisponde alla risorsa Tema in modifica." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9195,9 +9095,8 @@ msgid "Add Type:" msgstr "Tipo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Aggiungi Elemento" +msgstr "Aggiungi Elemento:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9205,42 +9104,36 @@ msgid "Add StyleBox Item" msgstr "Aggiungi Tutti gli Elementi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Rimuovi l'elemento" +msgstr "Rimuovi elementi:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Rimuovi Elementi di Classe" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Rimuovi Elementi di Classe" +msgstr "Rimuovi Elementi Personalizzati" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Rimuovi tutti gli elementi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Elementi Tema GUI" +msgstr "Aggiungi Elemento di Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Nome del nodo:" +msgstr "Nome precedente:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Importa tema" +msgstr "Importa Elementi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Predefinito" +msgstr "Tema Predefinito" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9268,9 +9161,8 @@ msgid "Cancel Item Rename" msgstr "Rinomina in blocco" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Sovrascrizioni" +msgstr "Sovrascrivi Elemento" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." @@ -9305,20 +9197,19 @@ msgstr "Carica i predefiniti" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." msgstr "" +"Mostra elementi predefiniti assieme ad elementi che sono stati sovrascritti." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Sovrascrizioni" +msgstr "Sovrascrivi tutti" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "Sovrascrivi tutti gli elementi predefiniti." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Tema" +msgstr "Tema:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9439,19 +9330,21 @@ msgstr "Ha,Molte,Opzioni" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." msgstr "" +"Percorso non valido, la risorsa PackedScene è stata probabilmente spostata o " +"rimossa." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." msgstr "" +"Risorsa PackedScene non valida, deve avere un nodo Control alla radice." #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "File non valido, non è una disposizione di un bus audio." +msgstr "File non valido, non è una risorsa PackedScene." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "Ricarica la scena per riflettere i suo stato più reale." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -9866,7 +9759,7 @@ msgstr "Rimuovi Poligono di Navigazione" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Priority" -msgstr "Modifica Priorità Tile" +msgstr "Modifica Priorità della Tile" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" @@ -9898,7 +9791,7 @@ msgstr "TileSet" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." -msgstr "Non sono disponibili addons VCS." +msgstr "Non sono disponibili estensioni VCS." #: editor/plugins/version_control_editor_plugin.cpp msgid "Error" @@ -9914,7 +9807,7 @@ msgstr "Commit" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "L'Addon VCS non è inizializzato" +msgstr "L'Estenzione VCS non è inizializzata" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" @@ -9962,7 +9855,7 @@ msgstr "Stage Tutto" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" -msgstr "Commit Cambiamenti" +msgstr "Commit Modifiche" #: editor/plugins/version_control_editor_plugin.cpp msgid "View file diffs before committing them to the latest version" @@ -10004,11 +9897,11 @@ msgstr "Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" -msgstr "Aggiungi porta di Input" +msgstr "Aggiungi porta di input" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" -msgstr "Aggiungi porta di Output" +msgstr "Aggiungi porta di output" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change input port type" @@ -10020,11 +9913,11 @@ msgstr "Cambia tipo di porta di output" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change input port name" -msgstr "Cambia Nome porta Input" +msgstr "Cambia nome porta Input" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port name" -msgstr "Cambia Nome porta Input" +msgstr "Cambia nome porta Input" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Remove input port" @@ -10178,11 +10071,11 @@ msgstr "Uguale (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "Maggiore Di (>)" +msgstr "Maggiore di (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "Maggiore o uguale (>=)" +msgstr "Maggiore o Uguale a (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -10210,11 +10103,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "Minore Di (<)" +msgstr "Minore di (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "Minore o Uguale (<=)" +msgstr "Minore o Uguale a (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" @@ -10451,9 +10344,8 @@ msgid "Finds the nearest even integer to the parameter." msgstr "Trova il numero intero pari più vicino al parametro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Clamps the value between 0.0 and 1.0." -msgstr "Blocca il valore tra 0.0 e 1.0." +msgstr "Limita il valore tra 0.0 e 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Extracts the sign of the parameter." @@ -10472,7 +10364,6 @@ msgid "Returns the square root of the parameter." msgstr "Restituisce la radice quadrata del parametro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -10561,7 +10452,6 @@ msgid "Transform function." msgstr "Funzione di trasformazione." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Calculate the outer product of a pair of vectors.\n" "\n" @@ -10575,10 +10465,10 @@ msgstr "" "\n" "OuterProduct considera il primo parametro \"c\" come un vettore colonna " "(matrice con una colonna) ed il secondo, \"r\", come un vettore riga " -"(matrice con una riga) ed esegue una moltiplicazione algebrica lineare di " -"matrici \"c * r\", creando una matrice i cui numeri di righe sono il numero " -"di componenti di \"c\" e le cui colonne sono il numero di componenti in \"r" -"\"." +"(matrice con una sola riga) ed esegue una moltiplicazione algebrica lineare " +"di matrici \"c * r\", creando una matrice il quale numero di righe è il " +"numero di componenti di \"c\" e il cui numero di colonne è il numero di " +"componenti in \"r\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -10695,7 +10585,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Restituisce un vettore che punta nella direzione della refrazione." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -10705,12 +10594,11 @@ msgid "" msgstr "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" -"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande " +"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande " "di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 " "usando i polinomiali di Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -10720,7 +10608,7 @@ msgid "" msgstr "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" -"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande " +"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande " "di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 " "usando i polinomiali di Hermite." @@ -10773,16 +10661,15 @@ msgid "Vector uniform." msgstr "Uniforme vettore." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Custom Godot Shader Language expression, with custom amount of input and " "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" -"Una espressione del Custom Godot Shader Language, con quantità " -"personalizzabile di porte input e output. Questa è una iniezione diretta di " -"codice nella funzione vertex/fragment/light. Non usarla per scrivere le " -"dichiarazione della funzione all'interno." +"Una espressione personalizzata in Godot Shader Language, con quantità " +"variabile di porte input e output. Questa è una iniezione diretta di codice " +"nella funzione vertex/fragment/light, non usarla per scrivere dichiarazioni " +"di funzioni al suo interno." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -10799,30 +10686,29 @@ msgid "" "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" -"Espressione custom per il Godot Shader Language, la quale sarà " -"sovraposizionata allo shader risultante. Puoi piazzare varie definizioni di " -"funzioni all'interno e chiamarla dopo nelle Espressioni. Puoi anche " +"Espressione personalizzata per il Godot Shader Language, la quale sarà " +"sovrapposta allo shader risultante. Puoi piazzare varie definizioni di " +"funzioni all'interno e chiamarla in seguito nelle Espressioni. Puoi anche " "dichiarare varianti, uniformi e costanti." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "A reference to an existing uniform." -msgstr "Un riferimento a una uniform esistente." +msgstr "Un riferimento a una uniforme esistente." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "(Solo modalità Fragment/Light) Fuzione derivata scalare." +msgstr "(Solo in modalità Fragment/Light) Funzione derivata scalare." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "(Solo modalità Fragment/Light) Fuzione derivata vettoriale." +msgstr "(Solo in modalità Fragment/Light) Funzione derivata vettoriale." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" -"(Solo modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la " +"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la " "differenziazione locale." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10830,7 +10716,7 @@ msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" -"(Solo modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la " +"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la " "differeziazione locale." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10838,7 +10724,7 @@ msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" -"(Soltanto modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la " +"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la " "differenziazione locale." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10846,35 +10732,32 @@ msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" -"(Soltanto modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la " +"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la " "differenziazione locale." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" -"(Soltanto modalità Fragment/Light) (Vettore) Somma delle derivate assolute " -"in \"x\" e \"y\"." +"(Solo in modalità Fragment/Light) (Vettore) Somma delle derivate assolute in " +"\"x\" e \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" -"(Soltanto modalità Fragment/Light) (Scalare) Somma delle derivate assolute " -"in \"x\" e \"y\"." +"(Solo in modalità Fragment/Light) (Scalare) Somma delle derivate assolute in " +"\"x\" e \"y\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "Modifica Proprietà Visive" +msgstr "Modifica Proprietà Visive:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -10893,17 +10776,16 @@ msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" -"Impossibile esportare il progetto per la piattaforma \"%s\".\n" +"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n" "I template di esportazione sembrano essere mancanti o non validi." #: editor/project_export.cpp -#, fuzzy msgid "" "Failed to export the project for platform '%s'.\n" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" -"Impossibile esportare il progetto per la piattaforma \"%s\".\n" +"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n" "Questo potrebbe essere dovuto a un problema di configurazione nel preset di " "esportazione o nelle impostazioni di esportazione." @@ -10975,7 +10857,7 @@ msgid "" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtri per esportare file/cartelle che non sono risorse\n" -"(separati da virgole, per sempio: *.json, *.txt, docs/*)" +"(separati da virgole, per esempio: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "" @@ -10983,7 +10865,7 @@ msgid "" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtri per escludere file/cartelle dal progetto\n" -"(separati da virgole, per sempio: *.json, *.txt, docs/*)" +"(separati da virgole, per esempio: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Features" @@ -11002,9 +10884,8 @@ msgid "Script" msgstr "Script" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Modalità Esportazione Script:" +msgstr "Modalità Esportazione GDScript:" #: editor/project_export.cpp msgid "Text" @@ -11012,21 +10893,20 @@ msgstr "Testo" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Compilato in Bytecode (Caricamento più Veloce)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "Criptato (Fornisci la Chiave Sotto)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "Chiave Crittografica non Valida (deve essere lunga 64 caratteri)" +msgstr "" +"Chiave Crittografica non Valida (deve essere lunga 64 caratteri esadecimali)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "Chiave di Crittografia Script (256-bits come esadecimali):" +msgstr "Chiave di Crittografia GDScript (256 bit in esadecimale):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -11034,7 +10914,7 @@ msgstr "Esporta PCK/Zip" #: editor/project_export.cpp msgid "Export Project" -msgstr "Esporta progetto" +msgstr "Esporta Progetto" #: editor/project_export.cpp msgid "Export mode?" @@ -11066,7 +10946,7 @@ msgstr "Esporta Con Debug" #: editor/project_manager.cpp msgid "The path specified doesn't exist." -msgstr "Il percorso specificato non é esistente." +msgstr "Il percorso specificato non esiste." #: editor/project_manager.cpp msgid "Error opening package file (it's not in ZIP format)." @@ -11085,7 +10965,7 @@ msgstr "Si prega di scegliere una cartella vuota." #: editor/project_manager.cpp msgid "Please choose a \"project.godot\" or \".zip\" file." -msgstr "Perfavore, scegli un file \"project.godot\" o \".zip\"." +msgstr "Si prega di scegliere un file \"project.godot\" o \".zip\"." #: editor/project_manager.cpp msgid "This directory already contains a Godot project." @@ -11100,9 +10980,8 @@ msgid "Imported Project" msgstr "Progetto Importato" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." -msgstr "Nome Progetto non Valido." +msgstr "Nome del progetto non valido." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -11118,7 +10997,7 @@ msgstr "Sarebbe una buona idea dare un nome al tuo progetto." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "Percorso di progetto invalido (cambiato qualcosa?)." +msgstr "Percorso del progetto invalido (cambiato qualcosa?)." #: editor/project_manager.cpp msgid "" @@ -11130,13 +11009,14 @@ msgstr "" #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "Impossibile modificare project.godot nel percorso di progetto." +msgstr "Impossibile modificare project.godot nel percorso del progetto." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "Impossibile creare project.godot nel percorso di progetto." +msgstr "Impossibile creare project.godot nel percorso del progetto." #: editor/project_manager.cpp +#, fuzzy msgid "Error opening package file, not in ZIP format." msgstr "Errore nell'apertura del file del pacchetto, non è in formato ZIP." @@ -11150,7 +11030,7 @@ msgstr "Pacchetto installato con successo!" #: editor/project_manager.cpp msgid "Rename Project" -msgstr "Rinomina progetto" +msgstr "Rinomina Progetto" #: editor/project_manager.cpp msgid "Import Existing Project" @@ -11186,7 +11066,7 @@ msgstr "Percorso Progetto:" #: editor/project_manager.cpp msgid "Project Installation Path:" -msgstr "Percorso Progetto di Installazione:" +msgstr "Percorso Installazione del Progetto:" #: editor/project_manager.cpp msgid "Renderer:" @@ -11209,7 +11089,7 @@ msgid "" msgstr "" "Qualità visiva migliore\n" "Tutte le funzionalità disponibili\n" -"Incompatibile con vecchi hardware\n" +"Incompatibile con hardware poco recente\n" "Non consigliato per giochi web" #: editor/project_manager.cpp @@ -11225,14 +11105,14 @@ msgid "" msgstr "" "Qualità visiva inferiore\n" "Alcune funzionalità non disponibili\n" -"Funziona sulla maggior parte degli hardware\n" -"Raccomandato per giochi web" +"Funziona sulla maggior parte di hardware\n" +"Consigliato per giochi web" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." msgstr "" "Il renderer può essere cambiato in seguito, ma potrebbe essere necessario " -"regolare le scene." +"rivedere le scene." #: editor/project_manager.cpp msgid "Unnamed Project" @@ -11327,22 +11207,20 @@ msgid "Are you sure to run %d projects at once?" msgstr "Sei sicuro di voler eseguire %d progetti contemporaneamente?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove %d projects from the list?" -msgstr "Seleziona il dispositivo dall'elenco" +msgstr "Rimuovere %d progetti dall'elenco?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove this project from the list?" -msgstr "Seleziona il dispositivo dall'elenco" +msgstr "Rimuovere questo progetto dall'elenco?" #: editor/project_manager.cpp msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Rimuovere tutti i progetti mancanti dalla lista?\n" -"I contenuti delle cartelle di progetto non saranno modificati." +"Rimuovere tutti i progetti mancanti dall'elenco?\n" +"Il contenuto delle cartelle di progetto non verrà modificato." #: editor/project_manager.cpp msgid "" @@ -11358,9 +11236,9 @@ msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"Sei sicuro di voler scannerizzare %s cartelle per progetti Godot già " +"Sei sicuro di voler scansionare %s cartelle per progetti Godot già " "esistenti?\n" -"Per questo potrebbe volerci un pò." +"Potrebbe volerci un po' di tempo." #. TRANSLATORS: This refers to the application where users manage their Godot projects. #: editor/project_manager.cpp @@ -11368,9 +11246,8 @@ msgid "Project Manager" msgstr "Gestore dei progetti" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Progetti" +msgstr "Progetti Locali" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -11381,23 +11258,20 @@ msgid "Last Modified" msgstr "Ultima Modifica" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Esporta progetto" +msgstr "Modifica Progetto" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "Rinomina progetto" +msgstr "Esegui progetto" #: editor/project_manager.cpp msgid "Scan" -msgstr "Esamina" +msgstr "Scansiona" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Progetti" +msgstr "Scansiona Progetti" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -11408,18 +11282,16 @@ msgid "New Project" msgstr "Nuovo Progetto" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Progetto Importato" +msgstr "Importa Progetto" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Rinomina progetto" +msgstr "Rimuovi Progetto" #: editor/project_manager.cpp msgid "Remove Missing" -msgstr "Rimuovi mancante" +msgstr "Rimuovi Mancanti" #: editor/project_manager.cpp msgid "About" @@ -11439,7 +11311,7 @@ msgstr "Rimuovi Tutto" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "Elimina anche i contenuti del progetto (non reversibile!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11454,25 +11326,22 @@ msgstr "" "Esplorare i progetti di esempio ufficiali nella libreria dei contenuti?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Filtra proprietà " +msgstr "Filtra progetti" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"La casella di ricerca filtra i progetti per nome e l'ultimo componente del " -"percorso.\n" +"Questo campo filtra i progetti per nome e ultimo componente del percorso.\n" "Per filtrare i progetti per nome e percorso completo, la query deve " "contenere almeno un carattere `/`." #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Tasto Fisico" #: editor/project_settings_editor.cpp msgid "Key " @@ -11500,7 +11369,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "An action with the name '%s' already exists." -msgstr "Un'azione col nome \"%s\" è già esistente." +msgstr "Un'azione con il nome \"%s\" è già esistente." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -11524,7 +11393,7 @@ msgstr "Dispositivo" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (Fisico)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11556,19 +11425,19 @@ msgstr "Pulsante Rotellina Giù" #: editor/project_settings_editor.cpp msgid "Wheel Left Button" -msgstr "Pulsante Sinistro della Rotellina" +msgstr "Pulsante Rotellina Sinistro" #: editor/project_settings_editor.cpp msgid "Wheel Right Button" -msgstr "Pulsante Destro della Rotellina" +msgstr "Pulsante Rotellina Destro" #: editor/project_settings_editor.cpp msgid "X Button 1" -msgstr "Tasto X 1" +msgstr "Pulsante X 1" #: editor/project_settings_editor.cpp msgid "X Button 2" -msgstr "Tasto X 2" +msgstr "Pulsante X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -11604,15 +11473,15 @@ msgstr "Pulsante Sinistro." #: editor/project_settings_editor.cpp msgid "Right Button." -msgstr "Pulsante DEstro." +msgstr "Pulsante Destro." #: editor/project_settings_editor.cpp msgid "Middle Button." -msgstr "Pulsante centrale." +msgstr "Pulsante Centrale." #: editor/project_settings_editor.cpp msgid "Wheel Up." -msgstr "Rotellina su." +msgstr "Rotellina Su." #: editor/project_settings_editor.cpp msgid "Wheel Down." @@ -11624,7 +11493,7 @@ msgstr "Aggiungi Proprietà Globale" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "Prima seleziona un oggetto di impostazione!" +msgstr "Seleziona prima un elemento di impostazione!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -11648,7 +11517,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "Aggiungi azione di input" +msgstr "Aggiungi Azione di Input" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -11667,27 +11536,25 @@ msgid "Override for Feature" msgstr "Sovrascrivi per Caratteristica" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Aggiungi Traduzione" +msgstr "Aggiungi %d Traduzioni" #: editor/project_settings_editor.cpp msgid "Remove Translation" msgstr "Rimuovi Traduzione" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "Remap Risorse Aggiungi Remap" +msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Percorso(i)" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "Remap Risorse Aggiungi Remap" +msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Remap" #: editor/project_settings_editor.cpp +#, fuzzy msgid "Change Resource Remap Language" -msgstr "Cambia Lingua Remap Risorse" +msgstr "Cambia Lingua per il Remap Risorse" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" @@ -11759,7 +11626,7 @@ msgstr "Traduzioni:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "Remaps" +msgstr "Rimappature" #: editor/project_settings_editor.cpp msgid "Resources:" @@ -11767,7 +11634,7 @@ msgstr "Risorse:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "Remaps per Locale:" +msgstr "Rimappature per Locale:" #: editor/project_settings_editor.cpp msgid "Locale" @@ -11855,7 +11722,7 @@ msgstr "Seleziona Proprietà " #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "Seleziona il Metodo Virtuale" +msgstr "Seleziona Metodo Virtuale" #: editor/property_selector.cpp msgid "Select Method" @@ -11883,7 +11750,7 @@ msgstr "Usa Espressioni Regolari" #: editor/rename_dialog.cpp msgid "Advanced Options" -msgstr "Opzioni avanzate" +msgstr "Opzioni Avanzate" #: editor/rename_dialog.cpp msgid "Substitute" @@ -11936,7 +11803,7 @@ msgstr "Passo" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "Importo di cui il contatore viene incrementato per ogni nodo" +msgstr "Quantità di cui viene incrementato il contatore per ogni nodo" #: editor/rename_dialog.cpp msgid "Padding" @@ -11971,6 +11838,7 @@ msgid "snake_case to PascalCase" msgstr "snake_case a PascalCase" #: editor/rename_dialog.cpp +#, fuzzy msgid "Case" msgstr "Caso" @@ -11984,7 +11852,7 @@ msgstr "In Maiuscolo" #: editor/rename_dialog.cpp msgid "Reset" -msgstr "Reset" +msgstr "Ripristina" #: editor/rename_dialog.cpp msgid "Regular Expression Error:" @@ -12000,7 +11868,7 @@ msgstr "Reparent Nodo" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "Posizione Reparent (Seleziona nuovo genitore):" +msgstr "Posizione di Reparent (Seleziona nuovo Genitore):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -12052,7 +11920,7 @@ msgstr "Istanzia Scena(e)" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "Sostituisci con la Scena Branch" +msgstr "Sostituisci con Scena Ramo" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -12060,7 +11928,7 @@ msgstr "Istanzia Scena Figlia" #: editor/scene_tree_dock.cpp msgid "Can't paste root node into the same scene." -msgstr "Non si può incollare il noto root nella stessa scena." +msgstr "Non si può incollare il nodo radice nella stessa scena." #: editor/scene_tree_dock.cpp msgid "Paste Node(s)" @@ -12128,12 +11996,16 @@ msgstr "Elimina il nodo \"%s\"?" msgid "" "Saving the branch as a scene requires having a scene open in the editor." msgstr "" +"Per salvare un ramo come scena è necessario avere una scene aperta " +"nell'editor." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"Per salvare un ramo come scena è necessario selezionare un solo nodo, ma ne " +"sono stati selezionati %s." #: editor/scene_tree_dock.cpp msgid "" @@ -12142,6 +12014,11 @@ msgid "" "FileSystem dock context menu\n" "or create an inherited scene using Scene > New Inherited Scene... instead." msgstr "" +"Impossibile salvare il ramo del nodo radice come una scena istanziata.\n" +"Per creare una copia modificabile della scena corrente, duplicala tramite il " +"menu contestuale del pannello file system\n" +"altrimenti crea una scena ereditata attraverso Scena > Nuova Scena " +"Ereditata... ." #: editor/scene_tree_dock.cpp msgid "" @@ -12149,6 +12026,10 @@ msgid "" "To create a variation of a scene, you can make an inherited scene based on " "the instanced scene using Scene > New Inherited Scene... instead." msgstr "" +"Impossibile salvare il ramo di una scena già istanziata.\n" +"Per creare una variazione di una scena, potresti invece creare una scena " +"ereditata basata sulla scena istanziata attraverso Scena > Nuova Scena " +"Ereditata... ." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -12167,7 +12048,7 @@ msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"Abilitare \"Carica Come Placeholder\" disabiliterà \"Figlio Modificabile\" e " +"Abilitare \"Carica come Placeholder\" disabiliterà \"Figli Modificabili\" e " "riporterà tutte le proprietà del nodo ai loro valori predefiniti." #: editor/scene_tree_dock.cpp @@ -12200,7 +12081,7 @@ msgstr "Altro nodo" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "Impossibile operare su nodi da scena esterna!" +msgstr "Impossibile operare su nodi di una scena esterna!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" @@ -12208,7 +12089,7 @@ msgstr "Impossibile operare su nodi da cui la scena corrente eredita!" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "Questa operazione no può essere eseguita su scene istanziate." +msgstr "Questa operazione non può essere eseguita su scene istanziate." #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -12220,27 +12101,27 @@ msgstr "Taglia Nodo(i)" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Rimuovi nodo(i)" +msgstr "Rimuovi Nodo(i)" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" -msgstr "Cambia il tipo del/i nodo/i" +msgstr "Cambia il tipo di nodo(i)" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"Impossibile salvare la scena. Probabili dipendenze (istanze) non hanno " -"potuto essere soddisfatte." +"Impossibile salvare una nuova scena. È probabile che le dipendenze (istanze) " +"non siano state soddisfatte." #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "Errore salvando la scena." +msgstr "Errore durante il salvataggio della scena." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "Errore duplicando la scena per salvarla." +msgstr "Errore nel duplicare la scena per salvarla." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -12248,15 +12129,15 @@ msgstr "Sotto-Risorse" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "Liberare ereditarietà " +msgstr "Libera Ereditarietà " #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "Figlio Modificabile" +msgstr "Figli Modificabili" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "Carica come placeholder" +msgstr "Carica come Placeholder" #: editor/scene_tree_dock.cpp msgid "" @@ -12274,7 +12155,7 @@ msgstr "Aggiungi un nodo figlio" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" -msgstr "Espandi/Collassa tutto" +msgstr "Espandi/Comprimi tutto" #: editor/scene_tree_dock.cpp msgid "Change Type" @@ -12282,7 +12163,7 @@ msgstr "Cambia Tipo" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" -msgstr "Reparent a Nuovo Nodo" +msgstr "Riparenta a Nuovo Nodo" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -12290,7 +12171,7 @@ msgstr "Rendi Scena Radice" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Unisci Da Scena" +msgstr "Unisci da Scena" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" @@ -12314,7 +12195,7 @@ msgid "" "exists." msgstr "" "Istanzia un file scena come Nodo. Crea una scena ereditata se nessun nodo di " -"root esiste." +"radice esiste." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script to the selected node." @@ -12322,7 +12203,7 @@ msgstr "Allega un nuovo script o uno già esistente al nodo selezionato." #: editor/scene_tree_dock.cpp msgid "Detach the script from the selected node." -msgstr "Rimuovi lo script per il nodo selezionato." +msgstr "Rimuovi lo script dal nodo selezionato." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -12336,7 +12217,7 @@ msgid "" msgstr "" "Se selezionato, il pannello della scena remota farà ricaricare il progetto " "ogni volta che viene aggiornato.\n" -"Tornare al pannello della scena locale per migliorare le prestazioni." +"Torna al pannello della scena locale per migliorare le prestazioni." #: editor/scene_tree_dock.cpp msgid "Local" @@ -12344,7 +12225,7 @@ msgstr "Locale" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "Liberare ereditarietà ? (No Undo!)" +msgstr "Liberare Ereditarietà ? (Non Annullabile!)" #: editor/scene_tree_editor.cpp msgid "Toggle Visible" @@ -12356,7 +12237,7 @@ msgstr "Sblocca nodo" #: editor/scene_tree_editor.cpp msgid "Button Group" -msgstr "Gruppo pulsanti" +msgstr "Gruppo Pulsanti" #: editor/scene_tree_editor.cpp msgid "(Connecting From)" @@ -12364,7 +12245,7 @@ msgstr "(Collegamento da)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "Avviso confugurazione nodo:" +msgstr "Avviso configurazione nodo:" #: editor/scene_tree_editor.cpp msgid "" @@ -12372,7 +12253,7 @@ msgid "" "Click to show signals dock." msgstr "" "Il nodo ha %s connessioni e %s gruppi.\n" -"Cliccare per mostrare il pannello dei segnali." +"Clicca per mostrare il pannello dei segnali." #: editor/scene_tree_editor.cpp msgid "" @@ -12380,7 +12261,7 @@ msgid "" "Click to show signals dock." msgstr "" "Il nodo ha %s connessioni.\n" -"Cliccare per mostrare il pannello dei segnali." +"Clicca per mostrare il pannello dei segnali." #: editor/scene_tree_editor.cpp msgid "" @@ -12392,7 +12273,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Open Script:" -msgstr "Apri script:" +msgstr "Apri Script:" #: editor/scene_tree_editor.cpp msgid "" @@ -12420,7 +12301,7 @@ msgid "" "Click to unpin." msgstr "" "AnimationPlayer è bloccato.\n" -"Fare clic per sbloccare." +"Fai clic per sbloccare." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -12476,7 +12357,7 @@ msgstr "Selezionata estensione errata." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" -msgstr "Errore caricamento template \"%s\"" +msgstr "Errore di caricamento template \"%s\"" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." @@ -12484,7 +12365,7 @@ msgstr "Errore - Impossibile creare script in filesystem." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "Errore caricamento script da %s" +msgstr "Errore di caricamento script da %s" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -12520,7 +12401,7 @@ msgstr "Nome o percorso genitore ereditato non valido." #: editor/script_create_dialog.cpp msgid "Script path/name is valid." -msgstr "Il nome e la path dello script sono validi." +msgstr "Il nome/percorso dello script sono validi." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -12528,7 +12409,7 @@ msgstr "Consentiti: a-z, A-Z, 0-9, _ e ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." -msgstr "Script incorporato (nel file della scena)." +msgstr "Script integrato (nel file della scena)." #: editor/script_create_dialog.cpp msgid "Will create a new script file." @@ -12547,14 +12428,16 @@ msgid "" "Note: Built-in scripts have some limitations and can't be edited using an " "external editor." msgstr "" -"Note: Gli script pre-installati hanno alcune limitazioni e non possono " -"essere modificati utilizzando un editor esterno." +"Nota: Gli script integrati hanno alcune limitazioni e non possono essere " +"modificati tramite un editor esterno." #: editor/script_create_dialog.cpp msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"Avviso: In genere non è ideale avere il nome dello script uguale a quello di " +"un tipo predefinito." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12566,7 +12449,7 @@ msgstr "Template:" #: editor/script_create_dialog.cpp msgid "Built-in Script:" -msgstr "Script Built-In:" +msgstr "Script Integrato:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -12578,7 +12461,7 @@ msgstr "Remoto " #: editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "Bytes:" +msgstr "Byte:" #: editor/script_editor_debugger.cpp msgid "Warning:" @@ -12618,7 +12501,7 @@ msgstr "Errori" #: editor/script_editor_debugger.cpp msgid "Child process connected." -msgstr "Processo Figlio Connesso." +msgstr "Processo figlio connesso." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -12626,7 +12509,7 @@ msgstr "Copia Errore" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "Apri Sorgente C++ su Github" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12634,7 +12517,7 @@ msgstr "RAM Video" #: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" -msgstr "Salta i breakpoint" +msgstr "Salta i punti di interruzione" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -12646,7 +12529,7 @@ msgstr "Ispeziona Istanza Successiva" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "Impila Frame" +msgstr "Stack Frame" #: editor/script_editor_debugger.cpp msgid "Profiler" @@ -12670,7 +12553,7 @@ msgstr "Monitor" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "Scegli uno o più oggetti dalla lista per mostrare il grafico." +msgstr "Scegli uno o più elementi dall'elenco per mostrare il grafico." #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" @@ -12706,11 +12589,11 @@ msgstr "Vari" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "Clicked Control:" +msgstr "Control Cliccato:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "Tipo Clicked Control:" +msgstr "Tipo Control Cliccato:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -12738,7 +12621,7 @@ msgstr "Cambia Scorciatoia" #: editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "Impostazioni editor" +msgstr "Impostazioni Editor" #: editor/settings_config_dialog.cpp msgid "Shortcuts" @@ -12805,24 +12688,20 @@ msgid "Change Ray Shape Length" msgstr "Cambia lunghezza Ray Shape" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Imposta Posizione Punto Curva" +msgstr "Imposta Posizione Punto Stanza" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Imposta Posizione Punto Curva" +msgstr "Imposta Posizione Punto Portale" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Occluder Sphere Radius" -msgstr "Modifica Raggio di Forma del Cilindro" +msgstr "Imposta Raggio della Sfera Occlusore" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Occluder Sphere Position" -msgstr "Imposta Curva In Posizione" +msgstr "Imposta Posizione della Sfera Occlusore" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12914,34 +12793,34 @@ msgstr "Non si basa su un file risorsa" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "Istanza invalida formato dizionario (manca @path)" +msgstr "Formato del dizionario dell'istanza non valido (manca @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"Istanza invalida formato dizionario (impossibile caricare script in @path)" +"Formato del dizionario dell'istanza non valido (impossibile caricare script " +"in @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "Istanza invalida formato dizionario (script invalido in @path)" +msgstr "" +"Formato del dizionario dell'istanza non valido (script invalido in @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "Istanza invalida formato dizionario (sottoclassi invalide)" +msgstr "Formato del dizionario dell'istanza non valido (sottoclassi invalide)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." msgstr "L'oggetto non può fornire una lunghezza." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Esporta una libreria di Mesh" +msgstr "Esporta Mesh GLTF2" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Esporta..." +msgstr "Esporta GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12957,11 +12836,11 @@ msgstr "Piano:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "Prossimo Piano" +msgstr "Pavimento Successivo" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" -msgstr "Piano Precedente" +msgstr "Pavimento Precedente" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" @@ -12976,6 +12855,7 @@ msgid "GridMap Fill Selection" msgstr "GridMap Riempi Selezione" #: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy msgid "GridMap Paste Selection" msgstr "Sezione GridMap incolla" @@ -12993,9 +12873,8 @@ msgid "Grid Map" msgstr "Mappa di Griglia" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "Scatta la vista" +msgstr "Scatta Visuale" #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -13076,7 +12955,8 @@ msgstr "Filtra mesh" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "Dai una risorsa MeshLibrary a questa GridMap per usare le sue mesh." +msgstr "" +"Assegna una risorsa MeshLibrary a questa GridMap per usare le sue mesh." #: modules/lightmapper_cpu/lightmapper_cpu.cpp msgid "Begin Bake" @@ -13111,17 +12991,17 @@ msgid "Class name can't be a reserved keyword" msgstr "Il nome della classe non può essere una parola chiave riservata" #: modules/mono/csharp_script.cpp -#, fuzzy msgid "Build Solution" -msgstr "Riempi Selezione" +msgstr "Crea Soluzione" #: modules/mono/mono_gd/gd_mono_utils.cpp +#, fuzzy msgid "End of inner exception stack trace" msgstr "Fine dell'analisi dell’eccezione interna dello stack" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "Preprocessa NavMesh" +msgstr "Prepara NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -13184,24 +13064,24 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"Un nodo ha ceduto senza memoria di lavoro, si prega di leggere la " -"documentazione riguardo a come cedere in maniera corretta!" +"Un nodo ha reso (yield) senza memoria di lavoro, si prega di leggere la " +"documentazione su come rendere correttamente!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"Il nodo ha ceduto, ma non ha ritornato uno stato di funzione nella prima " -"memoria di lavoro." +"Il nodo ha reso (yield), ma non ha ritornato uno stato di funzione nella " +"prima memoria di lavoro." #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" -"Il valore di return deve essere assegnato al primo elemento della memoria di " -"lavoro del nodo! Si prega di aggiustare il nodo." +"Il valore restituito (return) deve essere assegnato al primo elemento della " +"memoria di lavoro del nodo! Si prega di correggere il nodo." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -13244,18 +13124,16 @@ msgid "Add Output Port" msgstr "Aggiungi Porta Output" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Cambia Tipo" +msgstr "Cambia Tipo Porta" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "Cambia Nome porta Input" +msgstr "Cambia Nome Porta" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." -msgstr "Sovrascrivi una funzione built-in esistente." +msgstr "Sovrascrivi una funzione integrata esistente." #: modules/visual_script/visual_script_editor.cpp msgid "Create a new function." @@ -13263,7 +13141,7 @@ msgstr "Crea una nuova funzione." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" -msgstr "Valiabili:" +msgstr "Variabili:" #: modules/visual_script/visual_script_editor.cpp msgid "Create a new variable." @@ -13303,7 +13181,7 @@ msgstr "Aggiungi Funzione" #: modules/visual_script/visual_script_editor.cpp msgid "Delete input port" -msgstr "Rimuovi Porta Input" +msgstr "Elimina porta input" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" @@ -13342,8 +13220,8 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Mantieni premuto Control per rilasciare un Getter. Mantieni premuto Shift " -"per rilasciare una firma generica." +"Mantieni premuto Ctrl per rilasciare un Getter. Mantieni premuto Shift per " +"rilasciare una firma generica." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." @@ -13366,9 +13244,8 @@ msgid "Add Preload Node" msgstr "Aggiungi Nodo Preload" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Aggiungi Nodo" +msgstr "Aggiungi Nodo(i)" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -13381,7 +13258,7 @@ msgid "" msgstr "" "Impossibile lasciare le proprietà perché lo script \"%s\" non è usato nella " "scena.\n" -"Lascia andare premendo \"Shift (Maiuscolo)\" per copiare solo la firma." +"Lascia andare tenendo premuto \"Shift\" per copiare solo la firma." #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -13441,7 +13318,7 @@ msgstr "Incolla Nodi VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "Impossibile creare funzioni con il nodo funzione." +msgstr "Impossibile creare funzioni con un nodo funzione." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." @@ -13636,37 +13513,31 @@ msgstr "Seleziona il dispositivo dall'elenco" #: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "Esecuzione su %s" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Exporting APK..." -msgstr "Esportando Tutto" +msgstr "Esportando APK..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Uninstalling..." -msgstr "Disinstalla" +msgstr "Disinstallando..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Installing to device, please wait..." -msgstr "Caricamento, per favore attendere..." +msgstr "Installazione sul dispositivo, per favore attendere..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not install to device: %s" -msgstr "Impossibile istanziare la scena!" +msgstr "Impossibile installare sul dispositivo: %s" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Running on device..." -msgstr "Eseguendo Script Personalizzato..." +msgstr "In esecuzione sul dispositivo..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not execute on device." -msgstr "Impossibile creare la cartella." +msgstr "Impossibile eseguire sul dispositivo." #: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." @@ -13685,6 +13556,8 @@ msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" +"Devono essere configurate le impostazioni Debug Keystore, Debug User E Debug " +"Password, altrimenti nessuna di esse." #: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." @@ -13696,6 +13569,8 @@ msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" +"Devono essere configurate le impostazioni Release Keystore, Release User E " +"Release Password, altrimenti nessuna di esse." #: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." @@ -13709,7 +13584,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." -msgstr "Un percorso invalido per il SDK Android nelle Impostazioni Editor." +msgstr "Percorso per il SDK Android non valido nelle Impostazioni Editor." #: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" @@ -13750,7 +13625,7 @@ msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -"Modulo \"GodotPaymentV3\" non valido incluso nelle impostazione del progetto " +"Modulo \"GodotPaymentV3\" non valido incluso nell'impostazione del progetto " "\"android/moduli\" (modificato in Godot 3.2.2).\n" #: platform/android/export/export_plugin.cpp @@ -13776,35 +13651,34 @@ msgid "" "directory.\n" "The resulting %s is unsigned." msgstr "" +"Non è stato possibile trovare \"apksigner\".\n" +"Verificare che il comando sia disponibile nella directory degli strumenti di " +"compilazione Android SDK.\n" +"Il %s risultato non è firmato." #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Signing release %s..." -msgstr "" -"Scansione File,\n" -"Si prega di attendere..." +msgstr "Firmando rilascio %s..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not find keystore, unable to export." -msgstr "Impossibile aprire il template per l'esportazione:" +msgstr "Non è stato possibile trovare keystore, impossible esportare." #: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner' ha restituito con errore #%d" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Verifying %s..." -msgstr "Aggiungendo %s..." +msgstr "Verificando %s..." #: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "Verifica 'apksigner' di %s non riuscita." #: platform/android/export/export_plugin.cpp #, fuzzy @@ -13813,7 +13687,8 @@ msgstr "Esportazione per Android" #: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." -msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab." +msgstr "" +"Nome file non valido! Il Bundle Android App richiede l'estensione *.aab." #: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." @@ -13821,19 +13696,19 @@ msgstr "L'estensione APK non è compatibile con il Bundle Android App." #: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk." +msgstr "Nome file non valido! L'APK Android richiede l'estensione *.apk." #: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "Formato d'esportazione non supportato!\n" #: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -"Tentativo di costruire da un template build personalizzato, ma nesuna " -"informazione sulla sua versione esiste. Perfavore, reinstallalo dal menu " +"Tentato di costruire da un template build personalizzato, ma nessuna " +"informazione sulla sua versione esiste. Per favore, reinstallalo dal menu " "\"Progetto\"." #: platform/android/export/export_plugin.cpp @@ -13846,22 +13721,22 @@ msgstr "" "Versione build di Android non coerente:\n" " Template installato: %s\n" " Versione Godot: %s\n" -"Perfavore, reinstalla il build template di Android dal menu \"Progetto\"." +"Per favore, reinstalla il build template di Android dal menu \"Progetto\"." #: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"Impossibile sovrascrivere i file res://android/build/res/*.xml con il nome " +"del progetto" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not export project files to gradle project\n" -msgstr "Impossibile creare project.godot nel percorso di progetto." +msgstr "Impossibile esportare i file del progetto in un progetto gradle\n" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not write expansion package file!" -msgstr "Impossibile scrivere il file:" +msgstr "Impossibile scrivere il file del pacchetto di espansione!" #: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" @@ -13872,7 +13747,7 @@ msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"Costruzione del progetto Android fallita, controlla l'output per vedere gli " +"Compilazione del progetto Android fallita, controlla l'output per vedere gli " "errori.\n" "In alternativa, visita docs.godotengine.org per la documentazione della " "build Android." @@ -13890,21 +13765,20 @@ msgstr "" "directory del progetto gradle per gli output." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Package not found: %s" -msgstr "Animazione non trovata: \"%s\"" +msgstr "Pacchetto non trovato: \"%s\"" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Creating APK..." -msgstr "Creazione contorni..." +msgstr "Creazione APK..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "" "Could not find template APK to export:\n" "%s" -msgstr "Impossibile aprire il template per l'esportazione:" +msgstr "" +"Impossibile trovare il template APK per l'esportazione:\n" +"%s" #: platform/android/export/export_plugin.cpp msgid "" @@ -13913,28 +13787,30 @@ msgid "" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" +"Mancano librerie nel template di esportazione per le architetture " +"selezionate: %s.\n" +"Si prega di costruire un template con tutte le librerie richieste, o " +"deselezionare le architetture mancanti nel preset di esportazione." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Adding files..." -msgstr "Aggiungendo %s..." +msgstr "Aggiungendo file..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not export project files" -msgstr "Impossibile scrivere il file:" +msgstr "Impossibile esportare i file del progetto" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." -msgstr "" +msgstr "Allineamento APK..." #: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "Impossibile decomprimere l'APK temporaneamente non allineato." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." -msgstr "L'identificatore è mancante." +msgstr "Identificatore mancante." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "The character '%s' is not allowed in Identifier." @@ -13978,49 +13854,44 @@ msgid "Could not write file:" msgstr "Impossibile scrivere il file:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Impossibile scrivere il file:" +msgstr "Impossibile leggere il file:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Impossibile leggere la shell HTML personalizzata:" +msgstr "Impossibile leggere la shell HTML:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Impossibile creare la cartella." +msgstr "Impossibile creare la directory per il server HTTP:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Errore salvando la scena." +msgstr "Errore all'avvio del server HTTP:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Identificatore non valido:" +msgstr "Identificatore del bundle non valido:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "Autenticazione: è richiesta la firma del codice." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "Autenticazione: è richiesto un runtime rafforzato." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "Autenticazione: nome Apple ID non specificato." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "Autenticazione: password Apple ID non specificato." #: platform/uwp/export/export.cpp msgid "Invalid package short name." -msgstr "Nome pacchetto invalido, troppo corto." +msgstr "Nome breve del pacchetto non valido." #: platform/uwp/export/export.cpp msgid "Invalid package unique name." @@ -14040,9 +13911,10 @@ msgstr "GUID publisher invalido." #: platform/uwp/export/export.cpp msgid "Invalid background color." -msgstr "Colore di background invalido." +msgstr "Colore di sfondo non valido." #: platform/uwp/export/export.cpp +#, fuzzy msgid "Invalid Store Logo image dimensions (should be 50x50)." msgstr "" "Dimensioni dell'immagine dello Store Logo invalide (dovrebbero essere 50x50)." @@ -14080,7 +13952,7 @@ msgstr "" #: platform/uwp/export/export.cpp msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "" -"Dimensioni non valide dell'immagine dello splash screen (dovrebbero essere " +"Dimensioni per l'immagine dello splash screen non valide (dovrebbero essere " "620x300)." #: scene/2d/animated_sprite.cpp @@ -14089,7 +13961,7 @@ msgid "" "order for AnimatedSprite to display frames." msgstr "" "Una risorsa SpriteFrames deve essere creata o impostata nella proprietà " -"\"Frames\" in modo da far mostrare i frame dal nodo AnimatedSprite." +"\"Frames\" per permettere a AnimatedSprite di visualizzare i frame." #: scene/2d/canvas_modulate.cpp msgid "" @@ -14097,7 +13969,7 @@ msgid "" "scenes). The first created one will work, while the rest will be ignored." msgstr "" "Solamente un CanvasModulate visibile è consentito per scena (o insieme di " -"scene istanziate). Il primo creato funzionerà , mentre i restanti saranno " +"scene istanziate). Il primo creato funzionerà , mentre gli altri saranno " "ignorati." #: scene/2d/collision_object_2d.cpp @@ -14108,8 +13980,8 @@ msgid "" msgstr "" "Questo nodo non ha una forma, non può quindi collidere o interagire con gli " "altri oggetti.\n" -"Devi aggiungere come figlio un CollisionShape2D oppure un CollisionPolygon2D " -"per definire la sua forma." +"Aggiungi come figlio un CollisionShape2D o un CollisionPolygon2D per " +"definire la sua forma." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -14118,7 +13990,7 @@ msgid "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionPolygon2D serve a fornire una forma di collisione a un nodo " -"derivato di CollisionObject2D. Si prega di utilizzarlo solamente come figlio " +"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio " "di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da " "dargli una forma." @@ -14139,16 +14011,15 @@ msgstr "" "costruzione \"Segmenti\"." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "CollisionShape2D only serves to provide a collision shape to a " "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D serve a fornire una forma di collisione a un nodo derivato " -"da CollisionObject2D. Si prega di utilizzarlo solamente come figlio di " -"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da dargli " -"una forma." +"CollisionShape2D serve solo a fornire una forma di collisione a un nodo " +"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio " +"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da " +"dargli una forma." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -14163,9 +14034,9 @@ msgid "" "Polygon-based shapes are not meant be used nor edited directly through the " "CollisionShape2D node. Please use the CollisionPolygon2D node instead." msgstr "" -"Le forme basate sui poligoni non sono state fatte per essere usate nè " -"modificate direttamente tramite il nodo CollisionShape2D. Per piacere usa " -"invece il nodo CollisionPolygon2D." +"Le forme basate sui poligoni non sono dovrebbero essere usate né modificate " +"direttamente tramite il nodo CollisionShape2D. Si prega di usare invece il " +"nodo CollisionPolygon2D." #: scene/2d/cpu_particles_2d.cpp msgid "" @@ -14193,14 +14064,14 @@ msgstr "Il giunto non è collegato a due PhysicsBody2D" #: scene/2d/joints_2d.cpp msgid "Node A and Node B must be different PhysicsBody2Ds" -msgstr "Il Nodo A e il Nodo B devono essere PhysicsBody2D diversi" +msgstr "Nodo A e Nodo B devono essere PhysicsBody2D diversi" #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." msgstr "" -"Una texture con una forma della luce deve essere fornita alla proprietà " +"Una texture con la forma della luce deve essere fornita alla proprietà " "\"Texture\"." #: scene/2d/light_occluder_2d.cpp @@ -14213,7 +14084,7 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." msgstr "" -"Il poligono per questo occluder è vuoto. Perfavore, disegna un poligono." +"Il poligono per questo occluder è vuoto. Si prega di disegnare un poligono." #: scene/2d/navigation_polygon.cpp msgid "" @@ -14230,14 +14101,14 @@ msgid "" "node. It only provides navigation data." msgstr "" "NavigationPolygonInstance deve essere figlio o nipote di un nodo " -"Navigation2D. Fornisce solamente dati di navigazione." +"Navigation2D. Esso fornisce solamente dati di navigazione." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"Il nodo ParallaxLayer funziona solamente quando impostato come figlio di un " -"nodo ParallaxBackground." +"Il nodo ParallaxLayer funziona solamente se impostato come figlio di un nodo " +"ParallaxBackground." #: scene/2d/particles_2d.cpp msgid "" @@ -14254,8 +14125,8 @@ msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" -"Un materiale per processare le particelle non é assegnato, pertanto nessun " -"comportamento é impresso." +"Non è assegnato un materiale per processare le particelle, pertanto nessun " +"comportamento viene impresso." #: scene/2d/particles_2d.cpp msgid "" @@ -14268,8 +14139,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D funziona solamente quando impostato come figlio di un nodo " -"Path2D." +"PathFollow2D funziona solamente se impostato come figlio di un nodo Path2D." #: scene/2d/physics_body_2d.cpp msgid "" @@ -14278,11 +14148,10 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "I cambiamenti di dimensione a RigidBody2D (in modalità rigida o carattere) " -"saranno sovrascritti dal motore fisico quando in esecuzione.\n" +"saranno sovrascritti dal motore fisico durante l'esecuzione.\n" "Modifica invece la dimensione nelle forme di collisione figlie." #: scene/2d/remote_transform_2d.cpp -#, fuzzy msgid "Path property must point to a valid Node2D node to work." msgstr "La proprietà path deve puntare a un nodo Node2D valido per funzionare." @@ -14310,16 +14179,16 @@ msgid "" "KinematicBody2D, etc. to give them a shape." msgstr "" "TileMap con Use Parent abilitato richiede un genitore CollisionObject2D per " -"dargli forma. Perfavore, usalo come figlio di Area2D, StaticBody2D, " -"RigidBody2D, KinematicBody2D, etc. per dargli una forma." +"dargli forma. Si prega di usalo come figlio di Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, ecc. per dare loro una forma." #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnabler2D funziona meglio quando usato con il nodo principale " -"della scena ereditata direttamente come genitore." +"VisibilityEnabler2D funziona meglio se usato con il nodo radice della scena " +"modificata direttamente come genitore." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." @@ -14330,13 +14199,12 @@ msgid "ARVRController must have an ARVROrigin node as its parent." msgstr "ARVRController deve avere un nodo ARVROrigin come genitore." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" -"L'id del controller non deve essere 0 o non verrà associato a un controller " -"attuale." +"L'ID del controller non deve essere 0 o esso non verrà associato a un vero " +"controller." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." @@ -14348,8 +14216,8 @@ msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." msgstr "" -"L'ID dell'ancora non deve essere 0 oppure non verrà associato a un'ancora " -"attuale." +"L'ID dell'ancora non deve essere 0 oppure essa non verrà associata a " +"un'ancora vera." #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." @@ -14369,11 +14237,11 @@ msgstr "Preparazione Ambiente" #: scene/3d/baked_lightmap.cpp msgid "Generating capture" -msgstr "Generando cattura" +msgstr "Generazione cattura" #: scene/3d/baked_lightmap.cpp msgid "Saving lightmaps" -msgstr "Salvando Lightmap" +msgstr "Salvataggio Lightmap" #: scene/3d/baked_lightmap.cpp msgid "Done" @@ -14391,7 +14259,6 @@ msgstr "" "definire la sua forma." #: scene/3d/collision_polygon.cpp -#, fuzzy msgid "" "CollisionPolygon only serves to provide a collision shape to a " "CollisionObject derived node. Please only use it as a child of Area, " @@ -14399,30 +14266,31 @@ msgid "" msgstr "" "CollisionPolygon serve solamente a fornire una forma di collisione a un nodo " "derivato da CollisionObject. Si prega di usarlo solamente come figlio di " -"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma." +"Area, StaticBody, RigidBody, KinematicBody, ecc. in modo da dare loro una " +"forma." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." msgstr "Un CollisionPolygon vuoto non ha effetti in collisione." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape serve a fornire una forma di collisione a un nodo derivato da " -"CollisionObject. Si prega di utilizzarlo solamente come figlio di Area, " -"StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma." +"CollisionShape serve solamente a fornire una forma di collisione a un nodo " +"derivato da CollisionObject. Si prega di usarlo solamente come figlio di " +"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dare loro una " +"forma." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"Una forma deve essere fornita per il CollisionShape per farlo funzionare. " -"Perfavore, creali una risorsa \"forma\"." +"È necessario fornire una forma al CollisionShape per farlo funzionare. " +"Perciò, si prega di creare una risorsa forma (shape)." #: scene/3d/collision_shape.cpp msgid "" @@ -14472,6 +14340,9 @@ msgid "" "longer has any effect.\n" "To remove this warning, disable the GIProbe's Compress property." msgstr "" +"La proprietà GIProbe Compress è stata deprecata a causa di bug noti e non ha " +"più alcun effetto.\n" +"Per rimuovere questo avviso, disattiva la proprietà Compress di GIProbe." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -14481,7 +14352,7 @@ msgstr "" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"Una risorsa NavigationMesh deve essere creata o impostata affinché questo " +"È necessario creare o impostare una risorsa NavigationMesh affinché questo " "nodo funzioni." #: scene/3d/navigation_mesh.cpp @@ -14494,11 +14365,11 @@ msgstr "" #: scene/3d/occluder.cpp msgid "No shape is set." -msgstr "" +msgstr "Nessuna forma è impostata." #: scene/3d/occluder.cpp msgid "Only uniform scales are supported." -msgstr "" +msgstr "Solo scale uniformi sono supportate." #: scene/3d/particles.cpp msgid "" @@ -14520,8 +14391,8 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" -"Le animazioni delle particelle richiedono l'uso di un SpatialMaterial la cui " -"modalità Billboard è impostata a \"Particle Billboard\"." +"L'animazione delle particelle richiede l'uso di un SpatialMaterial la cui " +"Modalità Billboard è impostata a \"Particle Billboard\"." #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." @@ -14532,7 +14403,7 @@ msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" -"Il flag ROTATION_ORIENTED di un PathFollow richiede \"Up Vector\" di essere " +"Il flag ROTATION_ORIENTED di PathFollow richiede che \"Up Vector\" sia " "abilitato nella risorsa Curve del genitore Path." #: scene/3d/physics_body.cpp @@ -14541,41 +14412,41 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"I cambiamenti di dimensione a RigidBody (nel personaggio o nelle modalità " -"rigide) saranno sovrascritti dal motore fisico quando in esecuzione.\n" -"Modifica invece la dimensione in sagome di collisione figlie." +"I cambiamenti di dimensione a RigidBody (in modalità rigida o carattere) " +"saranno sovrascritti dal motore fisico durante l'esecuzione.\n" +"Modifica invece la dimensione nelle forme di collisione figlie." #: scene/3d/physics_joint.cpp msgid "Node A and Node B must be PhysicsBodies" -msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies" +msgstr "Nodo A e Nodo B devono essere PhysicsBodies" #: scene/3d/physics_joint.cpp msgid "Node A must be a PhysicsBody" -msgstr "Il Nodo A deve essere un PhysicsBody" +msgstr "Nodo A deve essere un PhysicsBody" #: scene/3d/physics_joint.cpp msgid "Node B must be a PhysicsBody" -msgstr "Il Nodo B deve essere un PhysicsBody" +msgstr "Nodo B deve essere un PhysicsBody" #: scene/3d/physics_joint.cpp msgid "Joint is not connected to any PhysicsBodies" -msgstr "Il giunto non è collegato a dei PhysicsBodies" +msgstr "Il giunto non è collegato a nessun PhysicsBody" #: scene/3d/physics_joint.cpp msgid "Node A and Node B must be different PhysicsBodies" -msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies diversi" +msgstr "Nodo A e Nodo B devono essere PhysicsBody diversi" #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Il RoomManager non deve essere figlio o nipote di un Portal." #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Un nodo Room non dovrebbe essere figlio o nipote di un Portal." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Un RoomGroup non dovrebbe essere figlio o nipote di un Portal." #: scene/3d/remote_transform.cpp msgid "" @@ -14587,83 +14458,108 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Un Room non può avere un altro Room come figlio o nipote." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "Il RoomManager non dovrebbe collocato all'interno di un Room." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "Un RoomGroup non dovrebbe essere collocato all'interno di un Room." #: scene/3d/room.cpp msgid "" "Room convex hull contains a large number of planes.\n" "Consider simplifying the room bound in order to increase performance." msgstr "" +"L'hull converso del Room contiene un gran numero di piani.\n" +"Si consiglia di semplificare i vincoli della stanza per aumentare le " +"prestazioni." #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." msgstr "" +"Il RoomManager non dovrebbe essere collocato all'interno di un RoomGroup." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "Il RoomList non è stato assegnato." #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." msgstr "" +"Il nodo RoomList dovrebbe essere di tipo Spatial (o derivato da Spatial)." #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"Portal Depth Limit è impostato a Zero.\n" +"Verrà renderizzata soltanto la Stanza in cui si trova la telecamera." #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "Ci dovrebbe essere un solo RoomManager nello SceneTree." #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"Percorso per il RoomList non valido.\n" +"Assicurarsi che il ramo RoomList sia stato assegnato nel RoomManager." #: scene/3d/room_manager.cpp +#, fuzzy msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList non contiene Stanze, interruzione." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Rilevati nodi con nomi errati, controlla il registro di output per i " +"dettagli. Interruzione." #: scene/3d/room_manager.cpp +#, fuzzy msgid "Portal link room not found, check output log for details." msgstr "" +"Collegamento stanza del Portale non trovato. Controlla il registro di output " +"per i dettagli." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Collegamento automatico portali fallito, controlla il registro di output per " +"i dettagli.\n" +"Assicurarsi che il portale sia rivolto verso l'esterno della stanza di " +"origine." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Rilevata sovrapposizione di stanze, le telecamere potrebbero non funzionare " +"correttamente nell'area sovrapposta.\n" +"Controlla il registro di output per i dettagli." #: scene/3d/room_manager.cpp +#, fuzzy msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Errore durante il calcolo dei confini della stanza.\n" +"Assicurarsi che tutte le stanze contengano geometria o confini manuali." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "Questo corpo verrà ignorato fino a quando non imposterai una mesh." +msgstr "Questo corpo verrà ignorato finché non imposterai una mesh." #: scene/3d/soft_body.cpp msgid "" @@ -14673,7 +14569,7 @@ msgid "" msgstr "" "Le modifiche alle dimensioni di SoftBody saranno sovrascritte dal motore " "fisico durante l'esecuzione.\n" -"Cambiare invece le dimensioni nelle forme di collisioni figlie." +"Modifica invece la dimensione nelle forme di collisione figlie." #: scene/3d/sprite_3d.cpp msgid "" @@ -14681,7 +14577,7 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" "Una risorsa SpriteFrames deve essere creata o impostata nella proprietà " -"\"Frames\" in modo da far mostrare i frame dall'AnimatedSprite3D." +"\"Frames\" per permettere a AnimatedSprite3D di visualizzare i frame." #: scene/3d/vehicle_body.cpp msgid "" @@ -14696,23 +14592,24 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" -"WordEnvironment richiede la sua proprietà \"Environment\" di contenere un " +"WordEnvironment richiede che la sua proprietà \"Environment\" contenga un " "Environment per avere un effetto visibile." #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" -"Solamente un WorldEnvironment è consentito per scena (o insieme di scene " -"istanziate)." +"Solamente un solo WorldEnvironment è consentito per scena (o insieme di " +"scene istanziate)." #: scene/3d/world_environment.cpp msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" -"Questo WorldEnvironment viene ignorato. Aggiungere una Telecamera (per le " -"scene 3D) o impostare questo ambiente Modalità Canvas (per le scene in 2D)." +"Questo WorldEnvironment è ignorato. Aggiungi una Telecamera (per le scene " +"3D) oppure imposta il Background Mode di questo ambiente su Canvas (per le " +"scene in 2D)." #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" @@ -14723,8 +14620,9 @@ msgid "Animation not found: '%s'" msgstr "Animazione non trovata: \"%s\"" #: scene/animation/animation_player.cpp +#, fuzzy msgid "Anim Apply Reset" -msgstr "" +msgstr "Applica Ripristino Anim." #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14736,7 +14634,7 @@ msgstr "Animazione non valida: \"%s\"." #: scene/animation/animation_tree.cpp msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Nulla collegato all'ingresso \"%s\" del nodo \"%s\"." +msgstr "Niente collegato all'input \"%s\" del nodo \"%s\"." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." @@ -14745,7 +14643,7 @@ msgstr "Non è stato impostato alcun AnimationNode root per il grafico." #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"Il Percorso di un nodo AnimationPlayer contenente animazioni non è impostato." +"Il percorso di un nodo AnimationPlayer contenente animazioni non è impostato." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." @@ -14755,11 +14653,11 @@ msgstr "" #: scene/animation/animation_tree.cpp msgid "The AnimationPlayer root node is not a valid node." -msgstr "Il nodo root dell'AnimationPlayer non è valido." +msgstr "Il nodo radice dell'AnimationPlayer non è valido." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "Questo nodo è stato deprecato. In alternativa, usa un AnimationTree." +msgstr "Questo nodo è stato deprecato. Usa invece un AnimationTree." #: scene/gui/color_picker.cpp msgid "" @@ -14797,17 +14695,19 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Il Contanier da se non serve alcuna funzione affinché uno script non " -"configura il comportamento di posizione dei figli.\n" -"Se non intendi aggiungere uno script, usa un semplice nodo Control." +"Il Container di per sé non serve a nulla, a meno che uno script non " +"configuri il suo comportamento di posizionamento figli.\n" +"Se non intendi aggiungere uno script, utilizza invece un semplice nodo " +"Control." #: scene/gui/control.cpp msgid "" "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\"." msgstr "" -"Il tooltip non comparirà poiché il Mouse filter del control è impostato a " -"\"Ignore\". Per risolvere questo, impostalo a \"Stop\" o \"Pass\"." +"Il Tooltip non apparirà poiché la proprietà Mouse Filter del Control è " +"impostata su \"Ignore\". Per risolvere questo problema, imposta Mouse Filter " +"su \"Stop\" o \"Pass\"." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -14832,6 +14732,10 @@ msgid "" "The GLES2 backend is currently in use, so these modes will act like Stretch " "instead." msgstr "" +"Le opzioni Tile e Tile Fit per le proprietà Axis Stretch hanno effetto solo " +"se si utilizza il rendering back-end GLES3.\n" +"Poiché il back-end GLES2 è attualmente in uso, queste modalità si " +"comporteranno invece come Stretch." #: scene/gui/popup.cpp msgid "" @@ -14839,8 +14743,8 @@ msgid "" "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"I popup saranno nascosti di default finchè non chiami popup(), o una delle " -"qualsiasi funzioni popup*(). Farli diventare visibili per modificarli va " +"I popup saranno nascosti di default finché non chiami popup(), o una " +"qualsiasi delle funzioni popup*(). Renderli visibili per modificarli va " "bene, ma scompariranno durante l'esecuzione." #: scene/gui/range.cpp @@ -14848,15 +14752,15 @@ msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." msgstr "Se \"Exp Edit\" è abilitato, \"Min Value\" deve essere maggiore di 0." #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer è inteso per funzionare con un singolo figlio di controllo.\n" -"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control e " -"imposta la dimensione minima personalizzata manualmente." +"ScrollContainer è progettato per funzionare con un singolo figlio di " +"controllo.\n" +"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control, " +"impostando la dimensione minima personalizzata manualmente." #: scene/gui/tree.cpp msgid "(Other)" @@ -14868,7 +14772,7 @@ msgid "" "Environment -> Default Environment) could not be loaded." msgstr "" "Non è stato possibile caricare l'Ambiente predefinito come specificato nelle " -"Impostazioni Progetto (Rendering -> Ambiente -> Ambiente Predefinito)." +"Impostazioni Progetto (Rendering -> Environment -> Default Environment)." #: scene/main/timer.cpp msgid "" @@ -14877,6 +14781,10 @@ msgid "" "Consider using a script's process loop instead of relying on a Timer for " "very low wait times." msgstr "" +"I tempi d'attesa dei Timer molto brevi (< 0.05 seconds) potrebbero " +"comportarsi in modo poco incoerente, a seconda del framerate di rendering o " +"fisico.\n" +"Si consiglia invece di affidarsi a un Timer per tempi d'attesa molto brevi." #: scene/main/viewport.cpp msgid "" @@ -14886,34 +14794,35 @@ msgid "" "texture to some node for display." msgstr "" "Questo viewport non è impostato come target di render. Se si vuole che il " -"suo contenuto venga direttamente mostrato a schermo, renderlo figlio di un " -"Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un " -"RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare." +"suo contenuto venga direttamente visualizzato sullo schermo, renderlo figlio " +"di un Control, in modo che possa ottenere una dimensione. Altrimenti, " +"renderlo un RenderTarget e assegnare la sua texture interna a qualche nodo " +"per la visualizzazione." #: scene/main/viewport.cpp -#, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" -"La dimensione del Viewport deve essere maggiore di 0 affinché qualcosa sia " -"visibile." +"La dimensione del Viewport deve essere maggiore o uguale a 2 pixel su " +"entrambi i lati per visualizzare qualcosa." #: scene/resources/occluder_shape.cpp +#, fuzzy msgid "OccluderShapeSphere Set Spheres" -msgstr "" +msgstr "Imposta Sfere OccluderShapeSphere" #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " "'SamplerPort'." msgstr "" -"La porta del sampler è connessa ma mai usata. Considera cambiare la sorgente " -"a \"SamplerPort\"." +"La porta del sampler è connessa ma mai usata. Considera di cambiare la " +"sorgente a \"SamplerPort\"." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." -msgstr "Fonte non valida per l'anteprima." +msgstr "Sorgente non valida per l'anteprima." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for shader." @@ -14924,26 +14833,30 @@ msgid "Invalid comparison function for that type." msgstr "Funzione di confronto non valida per quel tipo." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "" -"Le variabili possono essere assegnate soltanto in funzione del vertice." +msgstr "Le variabili non possono essere assegnate nella funzione \"%s\"." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"Le variabili assegnate nella funzione \"vertex\" non possono essere " +"riassegnate in \"fragment\" o \"light\"." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"Le variabili assegnate nella funzione \"fragment\" non possono essere " +"riassegnate in \"vertex\" o \"light\"." #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" msgstr "" +"Non è stato possibile accedere a variabile in fase di Fragment nella " +"funzione personalizzata!" #: servers/visual/shader_language.cpp msgid "Assignment to function." diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 0f9ea94f57..91af3e6757 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -40,7 +40,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: 2021-10-22 06:04+0000\n" +"PO-Revision-Date: 2021-11-14 11:41+0000\n" "Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" @@ -49,7 +49,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -7743,14 +7743,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "ã“ã®skeletonã«ã¯ãƒœãƒ¼ãƒ³ãŒã‚りã¾ã›ã‚“。åBone2DãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ ã—ã¦ãã ã•ã„。" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "ボーンã¸ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’è¨å®šã™ã‚‹" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" @@ -14418,7 +14418,7 @@ msgstr "è¦å‘Šï¼" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "確èª..." +msgstr "確èª" #: scene/gui/file_dialog.cpp msgid "Must use a valid extension." diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 1ce6deba73..aeb8023ba4 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -7700,11 +7700,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/km.po b/editor/translations/km.po index e54ab26b7b..4a61c9969d 100644 --- a/editor/translations/km.po +++ b/editor/translations/km.po @@ -7418,11 +7418,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 649e623c63..096d8a3ee8 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -27,12 +27,13 @@ # SteamB23 <steamb23@outlook.com>, 2021. # Jaemin Park <ppparkje@naver.com>, 2021. # ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021. +# Kiroo <elusive1102@naver.com>, 2021. 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-11-03 13:15+0000\n" +"PO-Revision-Date: 2021-11-19 08:43+0000\n" "Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -41,7 +42,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2929,7 +2930,7 @@ msgstr "다시 실행" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "프로ì 트 ë˜ëŠ” 씬 ê´€ë ¨ 여러가지 ë„구들." +msgstr "프로ì 트 ë˜ëŠ” 씬 ê´€ë ¨ 여러가지 툴." #: editor/editor_node.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp @@ -2966,7 +2967,7 @@ msgstr "프로ì 트 ë°ì´í„° í´ë” 열기" #: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Tools" -msgstr "ë„구" +msgstr "툴" #: editor/editor_node.cpp msgid "Orphan Resource Explorer..." @@ -3230,7 +3231,7 @@ msgstr "ì¸ìŠ¤íŽ™í„°" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "하단 íŒ¨ë„ í™•ìž¥" +msgstr "아래쪽 íŒ¨ë„ í™•ìž¥" #: editor/editor_node.cpp msgid "Output" @@ -4383,6 +4384,10 @@ msgid "" "Selecting another resource in the FileSystem dock without clicking Reimport " "first will discard changes made in the Import dock." msgstr "" +"ì•„ì§ ì ìš©ë˜ì§€ ì•Šì€ ë³´ë¥˜ ì¤‘ì¸ ë³€ê²½ì‚¬í•ì´ ìžˆìŠµë‹ˆë‹¤. ê°€ì ¸ì˜¤ê¸° ì˜µì…˜ì— ëŒ€í•œ 변경사" +"í•ì„ ì ìš©í•˜ë ¤ë©´ 다시 ê°€ì ¸ì˜¤ê¸°ë¥¼ í´ë¦í•˜ì„¸ìš”.\n" +"다시 ê°€ì ¸ì˜¤ê¸°ë¥¼ ë¨¼ì € í´ë¦í•˜ì§€ ì•Šê³ íŒŒì¼ì‹œìŠ¤í…œ ë…ì—서 다른 리소스를 ì„ íƒí•˜ë©´ " +"ê°€ì ¸ì˜¤ê¸° ë…ì˜ ë³€ê²½ì‚¬í•ì€ ë²„ë ¤ì§‘ë‹ˆë‹¤." #: editor/import_dock.cpp msgid "Import As:" @@ -4939,7 +4944,7 @@ msgstr "ë…¸ë“œì˜ ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ìŠ¤ì¼€ì¼ë¥¼ ì „ì²´ì 으로 ì¡°ì ˆí•©ë #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ë„구" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 툴" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation" @@ -4964,7 +4969,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 목ë¡ì„ 표시합니다." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "불러올 시 ìžë™ìœ¼ë¡œ 재ìƒ" +msgstr "불러오면 ìžë™ 재ìƒ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" @@ -5833,7 +5838,7 @@ msgstr "IK ì²´ì¸ ì§€ìš°ê¸°" msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." -msgstr "ê²½ê³ : 컨테ì´ë„ˆì˜ ìžì† 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤." +msgstr "ê²½ê³ : 컨테ì´ë„ˆì˜ ìžì‹ 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -5988,12 +5993,12 @@ msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸ˆì—서 풉니다 (움ì§ì¼ 수 ìžˆìŠµë‹ #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤." +msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí• 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." +msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí• 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -7691,17 +7696,17 @@ msgstr "ì…°ì´ë”" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì†ìœ¼ë¡œ 만드세요." - -#: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기" +msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì‹ìœ¼ë¡œ 만드세요." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "본ì—게 대기 ìžì„¸ ì„¤ì •" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "ìŠ¤ì¼ˆë ˆí†¤2D" @@ -7928,7 +7933,7 @@ msgstr "íšŒì „ì„ ë·°ì— ì •ë ¬" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "ìžì†ì„ ì¸ìŠ¤í„´ìŠ¤í• ë¶€ëª¨ê°€ 없습니다." +msgstr "ìžì‹ì„ ì¸ìŠ¤í„´ìŠ¤í™”í• ë¶€ëª¨ê°€ 없습니다." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." @@ -8091,11 +8096,11 @@ msgstr "í¬í„¸ 컬ë§ì„ 위한 ë£¸ì„ ë³€í™˜í•©ë‹ˆë‹¤." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" -msgstr "하단 ë·°" +msgstr "아래쪽 ë·°" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View" -msgstr "ìƒë‹¨ ë·°" +msgstr "위쪽 ë·°" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" @@ -8114,27 +8119,22 @@ msgid "Right View" msgstr "우측 ë·°" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View Down" msgstr "ì„ íšŒ ë·° 아래로" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View Left" msgstr "ì„ íšŒ ë·° 왼쪽으로" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View Right" msgstr "ì„ íšŒ ë·° 오른쪽으로" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View Up" msgstr "ì„ íšŒ ë·° 위로" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View 180" msgstr "ì„ íšŒ ë·° 180으로" @@ -11468,7 +11468,7 @@ msgstr "단계별 ì¹´ìš´í„°" #: editor/rename_dialog.cpp msgid "If set, the counter restarts for each group of child nodes." -msgstr "ì„¤ì •í•˜ë©´ ê° ê·¸ë£¹ì˜ ìžì† ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다." +msgstr "ì„¤ì •í•˜ë©´ ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -11598,7 +11598,7 @@ msgstr "가지 씬으로 êµì²´" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "ìžì† 씬 ì¸ìŠ¤í„´ìŠ¤í™”" +msgstr "ìžì‹ 씬 ì¸ìŠ¤í„´ìŠ¤í™”" #: editor/scene_tree_dock.cpp msgid "Can't paste root node into the same scene." @@ -11648,7 +11648,7 @@ msgstr "노드를 루트로 만들기" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes and any children?" -msgstr "%d ê°œì˜ ë…¸ë“œì™€ ëª¨ë“ ìžì† 노드를 ì‚ì œí• ê¹Œìš”?" +msgstr "%d ê°œì˜ ë…¸ë“œì™€ ëª¨ë“ ìžì‹ 노드를 ì‚ì œí• ê¹Œìš”?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -11660,7 +11660,7 @@ msgstr "루트 노드 \"%s\"ì„(를) ì‚ì œí• ê¹Œìš”?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "노드 \"%s\"와(ê³¼) ìžì†ì„ ì‚ì œí• ê¹Œìš”?" +msgstr "노드 \"%s\"와(ê³¼) ìžì‹ì„ ì‚ì œí• ê¹Œìš”?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -11717,7 +11717,7 @@ msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"íŽ¸ì§‘í• ìˆ˜ 있는 ìžì†\" ì„¤ì •ì´ ë¹„í™œì„±" +"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"íŽ¸ì§‘í• ìˆ˜ 있는 ìžì‹\" ì„¤ì •ì´ ë¹„í™œì„±" "í™”ë˜ê³ , 그러면 ê·¸ ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ ë””í´íŠ¸ë¡œ ë³µì›ë©ë‹ˆë‹¤." #: editor/scene_tree_dock.cpp @@ -11801,7 +11801,7 @@ msgstr "ìƒì† 지우기" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "íŽ¸ì§‘í• ìˆ˜ 있는 ìžì†" +msgstr "íŽ¸ì§‘í• ìˆ˜ 있는 ìžì‹" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" @@ -11818,7 +11818,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "ìžì† 노드 추가" +msgstr "ìžì‹ 노드 추가" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -11842,7 +11842,7 @@ msgstr "다른 씬ì—서 병합하기" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "가지를 씬으로 ì €ìž¥" +msgstr "가지를 씬으로 ì €ìž¥í•˜ê¸°" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" @@ -11861,7 +11861,7 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“니다." +"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í™”í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“니다." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script to the selected node." @@ -11954,7 +11954,7 @@ msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"ìžì†ì„ ì„ íƒí• 수 없습니다.\n" +"ìžì‹ì„ ì„ íƒí• 수 없습니다.\n" "í´ë¦í•˜ë©´ ì„ íƒí• 수 있습니다." #: editor/scene_tree_editor.cpp @@ -12167,7 +12167,7 @@ msgstr "오류" #: editor/script_editor_debugger.cpp msgid "Child process connected." -msgstr "ìžì† 프로세스 ì—°ê²°ë¨." +msgstr "ìžì‹ 프로세스 ì—°ê²°ë¨." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -13016,7 +13016,7 @@ msgstr "ì‹œê·¸ë„ íŽ¸ì§‘:" #: modules/visual_script/visual_script_editor.cpp msgid "Make Tool:" -msgstr "ë„구 만들기:" +msgstr "툴 만들기:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" @@ -13192,7 +13192,7 @@ msgstr "기기ì—서 ì‹¤í–‰í• ìˆ˜ 없었습니다." #: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." -msgstr "'apksigner' ë„구를 ì°¾ì„ ìˆ˜ 없습니다." +msgstr "'apksigner' íˆ´ì„ ì°¾ì„ ìˆ˜ 없습니다." #: platform/android/export/export_plugin.cpp msgid "" @@ -13596,7 +13596,7 @@ msgid "" "define its shape." msgstr "" "ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 없습니다.\n" -"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì† 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜" +"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜" "는 ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”." #: scene/2d/collision_polygon_2d.cpp @@ -13607,7 +13607,7 @@ msgid "" msgstr "" "CollisionPolygon2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용" "ë©ë‹ˆë‹¤. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, " -"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요." +"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." @@ -13629,7 +13629,7 @@ msgid "" msgstr "" "CollisionShape2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©" "니다. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, " -"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요." +"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -13704,14 +13704,14 @@ msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니" +"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니" "다. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•©ë‹ˆë‹¤." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." +"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." #: scene/2d/particles_2d.cpp msgid "" @@ -13741,7 +13741,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." +msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." #: scene/2d/physics_body_2d.cpp msgid "" @@ -13751,7 +13751,7 @@ msgid "" msgstr "" "(ìºë¦í„°ë‚˜ 리지드 모드ì—서) RigidBody2Dì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™" "안 í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n" -"ëŒ€ì‹ ìžì† ì½œë¦¬ì „ ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요." +"ëŒ€ì‹ ìžì‹ ì½œë¦¬ì „ ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -13780,7 +13780,7 @@ msgid "" msgstr "" "Use Parentê°€ 켜진 TileMapì€ ëª¨ì–‘ì„ ì£¼ëŠ” 부모 CollisionObject2Dê°€ 필요합니다. " "ëª¨ì–‘ì„ ì£¼ê¸° 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D ë“±ì„ ìž" -"ì† ë…¸ë“œë¡œ 사용해주세요." +"ì‹ ë…¸ë“œë¡œ 사용해주세요." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -13817,7 +13817,7 @@ msgstr "앵커 IDê°€ 0ì´ ë˜ë©´ 앵커가 ì‹¤ì œ ì•µì»¤ì— ë°”ì¸ë”©í•˜ì§€ 않ê #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROriginì€ ìžì†ìœ¼ë¡œ ARVRCamera 노드가 필요합니다." +msgstr "ARVROriginì€ ìžì‹ìœ¼ë¡œ ARVRCamera 노드가 필요합니다." #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" @@ -13850,7 +13850,7 @@ msgid "" "its shape." msgstr "" "ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤. 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ ìž‘ìš©í• ìˆ˜ 없습니다.\n" -"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì† 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” " +"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì‹ 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” " "ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”." #: scene/3d/collision_polygon.cpp @@ -13860,7 +13860,7 @@ msgid "" "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" "CollisionPolygonì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ" -"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용" +"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용" "해주세요." #: scene/3d/collision_polygon.cpp @@ -13874,7 +13874,7 @@ msgid "" "KinematicBody, etc. to give them a shape." msgstr "" "CollisionShapeì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ" -"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용" +"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용" "해주세요." #: scene/3d/collision_shape.cpp @@ -13952,7 +13952,7 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´" +"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´" "ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œ ì œê³µí•©ë‹ˆë‹¤." #: scene/3d/occluder.cpp @@ -13988,7 +13988,7 @@ msgstr "" #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì†ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." +msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤." #: scene/3d/path.cpp msgid "" @@ -14006,7 +14006,7 @@ msgid "" msgstr "" "(ìºë¦í„°ë‚˜ 리지드 모드ì—서) RigidBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™ì•ˆ " "í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n" -"ëŒ€ì‹ ìžì† ì½œë¦¬ì „ ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요." +"ëŒ€ì‹ ìžì‹ ì½œë¦¬ì „ ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요." #: scene/3d/physics_joint.cpp msgid "Node A and Node B must be PhysicsBodies" @@ -14030,15 +14030,15 @@ msgstr "노드 A와 노드 B는 서로 다른 PhysicsBody여야 합니다" #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "RoomManager는 Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." +msgstr "RoomManager는 Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "Roomì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." +msgstr "Roomì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "RoomGroupì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." +msgstr "RoomGroupì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다." #: scene/3d/remote_transform.cpp msgid "" @@ -14050,7 +14050,7 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì†ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다." +msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì‹ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." @@ -14165,7 +14165,7 @@ msgid "" "it as a child of a VehicleBody." msgstr "" "VehicleWheelì€ VehicleBody로 바퀴 ì‹œìŠ¤í…œì„ ì œê³µí•˜ëŠ” ì—í• ìž…ë‹ˆë‹¤. VehicleBody" -"ì˜ ìžì†ìœ¼ë¡œ 사용해주세요." +"ì˜ ìžì‹ìœ¼ë¡œ 사용해주세요." #: scene/3d/world_environment.cpp msgid "" @@ -14271,7 +14271,7 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Container ìžì²´ëŠ” ìžì† 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ ì—†ìŠµë‹ˆë‹¤.\n" +"Container ìžì²´ëŠ” ìžì‹ 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ ì—†ìŠµë‹ˆë‹¤.\n" "스í¬ë¦½íŠ¸ë¥¼ 추가하는 ì˜ë„ê°€ 없으면, 순수한 Control 노드를 사용해주세요." #: scene/gui/control.cpp @@ -14330,8 +14330,8 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer는 ë‹¨ì¼ ìžì† Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n" -"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì†ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³ ì‚¬ìš©ìž ì§€" +"ScrollContainer는 ë‹¨ì¼ ìžì‹ Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n" +"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì‹ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³ ì‚¬ìš©ìž ì§€" "ì • 최소 수치를 수ë™ìœ¼ë¡œ ì„¤ì •í•˜ì„¸ìš”." #: scene/gui/tree.cpp @@ -14353,6 +14353,10 @@ msgid "" "Consider using a script's process loop instead of relying on a Timer for " "very low wait times." msgstr "" +"매우 ì§§ì€ íƒ€ì´ë¨¸ 대기 시간(< 0.05ì´ˆ)ì€ ë Œë”ë§ëœ í”„ë ˆìž„ ë ˆì´íŠ¸ë‚˜ 물리 í”„ë ˆìž„ " +"ë ˆì´íŠ¸ì— ë”°ë¼ ìƒë‹¹ížˆ 다른 ë°©ì‹ìœ¼ë¡œ ìž‘ë™í• 수 있습니다.\n" +"대기 ì‹œê°„ì´ ë§¤ìš° 짧다면 타ì´ë¨¸ì— ì˜ì¡´í•˜ëŠ” ëŒ€ì‹ ìŠ¤í¬ë¦½íŠ¸ì˜ í”„ë¡œì„¸ìŠ¤ 루프를 사" +"용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤." #: scene/main/viewport.cpp msgid "" @@ -14362,16 +14366,16 @@ msgid "" "texture to some node for display." msgstr "" "ë·°í¬íŠ¸ë¥¼ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •í•˜ì§€ 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ì— ì§ì ‘ 표시" -"í•˜ë ¤ë©´, Controlì˜ ìžì† 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. ê·¸ë ‡ì§€ ì•Šì„ ê²½" +"í•˜ë ¤ë©´, Controlì˜ ìžì‹ 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. ê·¸ë ‡ì§€ ì•Šì„ ê²½" "ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 ë·°í¬íŠ¸ë¥¼ RenderTarget으로 ë§Œë“¤ê³ ë‚´ë¶€ì ì¸ í…스처" "를 다른 ë…¸ë“œì— ì§€ì •í•´ì•¼ 합니다." #: scene/main/viewport.cpp -#, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." -msgstr "무엇ì´ë“ ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 0보다 커야 합니다." +msgstr "" +"무엇ì´ë“ ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 양쪽 ì°¨ì›ì—서 2픽셀 ì´ìƒì´ì–´ì•¼ 합니다." #: scene/resources/occluder_shape.cpp msgid "OccluderShapeSphere Set Spheres" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index a4d205e4b1..f4cdcf8c89 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -7676,11 +7676,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 91d9e7e3d2..808a13782b 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -14,7 +14,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: 2021-11-03 13:53+0000\n" +"PO-Revision-Date: 2021-11-15 10:49+0000\n" "Last-Translator: M E <gruffy7932@gmail.com>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot/lv/>\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1027,7 +1027,7 @@ msgstr "AtkarÄ«bas" #: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" -msgstr "Resurs" +msgstr "Resurss" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp @@ -1048,7 +1048,7 @@ msgstr "AtkarÄ«bu Redaktors" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "MeklÄ“t AizstÄjÄ“ja Resursu:" +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 @@ -1142,7 +1142,7 @@ msgstr "Pieder" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "Resursi Bez Skaidra ĪpaÅ¡nieka:" +msgstr "Resursi bez izteiktas piederÄ«bas:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" @@ -1367,7 +1367,7 @@ msgstr "Kopnes IestatÄ«jumi" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "Izveidot DublikÄtu" +msgstr "Izveidot dublikÄtu" #: editor/editor_audio_buses.cpp msgid "Reset Volume" @@ -2115,7 +2115,7 @@ msgstr "MotÄ«va iestatÄ«jumi" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "UzskaitÄ«jumi" +msgstr "Uzskaites" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" @@ -2445,6 +2445,9 @@ msgid "" "To restore the Default layout to its base settings, use the Delete Layout " "option and delete the Default layout." msgstr "" +"NoklusÄ“juma redaktora izkÄrtojums pÄrrakstÄ«ts.\n" +"Lai atjaunotu noklusÄ“juma izkÄrtojumu uz bÄzes iestatÄ«jumiem, izmantojiet " +"DzÄ“st izkÄrtojumu opciju." #: editor/editor_node.cpp msgid "Layout name not found!" @@ -2480,6 +2483,10 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" +"Å Ä« aina ir importÄ“ta, tÄdēļ izmaiņas netiks saglabÄas.\n" +"Veidojiet no tÄs paraugu, lai ļautu saglabÄt izmaiņas.\n" +"LÅ«dzu, lasiet dokumentÄciju par ainu importēšanu un labÄkai darbaplÅ«smas " +"sapraÅ¡anai." #: editor/editor_node.cpp msgid "" @@ -2537,6 +2544,8 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"PaÅ¡reizÄ“jai ainav nav saknes mezgla, bet %d pÄrveidoti ÄrÄ“jie resursi tika " +"saglbÄti tÄpat." #: editor/editor_node.cpp msgid "" @@ -2690,7 +2699,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"NevarÄ“ja ielÄdÄ“t spraudÅ†Ä skriptu no mapes: '%s' Skripts nav rÄ«ka režīmÄ." +"NevarÄ“ja ielÄdÄ“t spraudņa skriptu no mapes: '%s' Skripts nav rÄ«ka režīmÄ." #: editor/editor_node.cpp msgid "" @@ -2837,11 +2846,11 @@ msgstr "" #: editor/editor_node.cpp msgid "New Scene" -msgstr "" +msgstr "Jauna aina" #: editor/editor_node.cpp msgid "New Inherited Scene..." -msgstr "" +msgstr "Jauna mantota aina..." #: editor/editor_node.cpp msgid "Open Scene..." @@ -3060,7 +3069,7 @@ msgstr "AtvÄ“rt redaktora iestatÄ«jumu mapi" #: editor/editor_node.cpp msgid "Manage Editor Features..." -msgstr "PÄrcaldÄ«t redaktora iespÄ“jas..." +msgstr "PÄrvaldÄ«t redaktora iespÄ“jas..." #: editor/editor_node.cpp msgid "Manage Export Templates..." @@ -3292,7 +3301,7 @@ msgstr "AtvÄ“rt skriptu redaktoru" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "" +msgstr "AtvÄ“rt lÄ«dzekļu bibliotÄ“ku" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -3519,7 +3528,7 @@ msgstr "Jauns skripts" #: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp msgid "Extend Script" -msgstr "" +msgstr "PagarinÄt skriptu" #: editor/editor_run_native.cpp msgid "" @@ -3530,23 +3539,23 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Raksti savu loÄ£iku _run() metodÄ“." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "" +msgstr "Jau ir rediģēta aina." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "" +msgstr "Nevar pakļaut skriptu:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "" +msgstr "Vai aizmirsi 'tool' atslÄ“gvÄrdu?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Nevar palaist skriptu:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" @@ -3562,15 +3571,15 @@ msgstr "" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" -msgstr "PÄlÅ«kot" +msgstr "PÄrlÅ«kot" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "" +msgstr "Ainas ceļš:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "ImportÄ“t no mezgla:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." @@ -3578,15 +3587,15 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "AtinstalÄ“t Å¡os Å¡ablonus." #: editor/export_template_manager.cpp msgid "There are no mirrors available." -msgstr "" +msgstr "Spoguļi nav pieejami." #: editor/export_template_manager.cpp msgid "Retrieving the mirror list..." -msgstr "" +msgstr "Saņem spoguļu sarakstu..." #: editor/export_template_manager.cpp msgid "Starting the download..." @@ -3598,15 +3607,15 @@ msgstr "Kļūda pieprasot URL:" #: editor/export_template_manager.cpp msgid "Connecting to the mirror..." -msgstr "" +msgstr "Savienojas ar spoguli..." #: editor/export_template_manager.cpp msgid "Can't resolve the requested address." -msgstr "" +msgstr "Nevar atrisinÄt pieprasÄ«to adresi." #: editor/export_template_manager.cpp msgid "Can't connect to the mirror." -msgstr "" +msgstr "Nevar pievienoties spogulim." #: editor/export_template_manager.cpp msgid "No response from the mirror." @@ -3765,7 +3774,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Download from:" -msgstr "" +msgstr "LejuplÄdÄ“t no:" #: editor/export_template_manager.cpp msgid "Open in Web Browser" @@ -3773,11 +3782,11 @@ msgstr "AtvÄ“rt interneta pÄrlÅ«kÄ" #: editor/export_template_manager.cpp msgid "Copy Mirror URL" -msgstr "" +msgstr "KopÄ“t spoguļa linku" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "LejuplÄdÄ“t un instalÄ“t" #: editor/export_template_manager.cpp msgid "" @@ -3787,7 +3796,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "OficiÄlie eksporta Å¡abloni nav pieejami eksperimentÄlajÄm bÅ«vÄ“m." #: editor/export_template_manager.cpp msgid "Install from File" @@ -3800,15 +3809,15 @@ msgstr "" #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "" +msgstr "Atcelt" #: editor/export_template_manager.cpp msgid "Cancel the download of the templates." -msgstr "" +msgstr "Atcelt Å¡ablonu lejuplÄdi." #: editor/export_template_manager.cpp msgid "Other Installed Versions:" -msgstr "" +msgstr "Citas instalÄ“tÄs versijas:" #: editor/export_template_manager.cpp msgid "Uninstall Template" @@ -4372,15 +4381,15 @@ msgstr "" #: editor/inspector_dock.cpp msgid "Open documentation for this object." -msgstr "" +msgstr "AtvÄ“rt dokumentÄciju Å¡im objektam." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" -msgstr "" +msgstr "AtvÄ“rt dokumentÄciju" #: editor/inspector_dock.cpp msgid "Filter properties" -msgstr "" +msgstr "FiltrÄ“t iestatÄ«jumus" #: editor/inspector_dock.cpp msgid "Manage object properties." @@ -4425,7 +4434,7 @@ msgstr "Versija:" #: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" -msgstr "" +msgstr "Valoda:" #: editor/plugin_config_dialog.cpp msgid "Script Name:" @@ -4668,7 +4677,7 @@ msgstr "IzdzÄ“st Mezglu" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "" +msgstr "DzÄ“st mezglu(s)" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" @@ -5624,7 +5633,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" -msgstr "" +msgstr "Pilns logs" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Keep Ratio" @@ -7170,7 +7179,7 @@ msgstr "BÄ«dÄ«t augÅ¡up" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "" +msgstr "BÄ«dÄ«t lejup" #: editor/plugins/script_editor_plugin.cpp msgid "Next Script" @@ -7281,7 +7290,7 @@ msgstr "TieÅ¡saistes Dokumenti" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "" +msgstr "AtvÄ“rt Godot tieÅ¡saistes dokumentÄciju." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -7524,11 +7533,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp @@ -8705,7 +8714,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Cancel Item Rename" -msgstr "" +msgstr "Atcelt pÄrsaukÅ¡anu" #: editor/plugins/theme_editor_plugin.cpp msgid "Override Item" @@ -8990,7 +8999,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "" +msgstr "SapludinÄt no ainas" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" @@ -9061,9 +9070,8 @@ msgid "Collision Mode" msgstr "Sadursmes režīms" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion Mode" -msgstr "Izveidot" +msgstr "OklÅ«zijas režīms" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" @@ -9149,7 +9157,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "" +msgstr "sablodinÄt no ainas?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Texture" @@ -9227,9 +9235,8 @@ msgid "Edit Collision Polygon" msgstr "Rediģēt sadursmes daudzstÅ«ri" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Edit Occlusion Polygon" -msgstr "Izveidot" +msgstr "Rediģēt oklÅ«zijas daudzstÅ«ri" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Navigation Polygon" @@ -9288,9 +9295,8 @@ msgid "Create Collision Polygon" msgstr "Izveidot sadursmes daudzstÅ«ri" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create Occlusion Polygon" -msgstr "Izveidot" +msgstr "Izveidot oklÅ«zijas daudzstÅ«ri" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." @@ -10389,7 +10395,7 @@ msgstr "" #: editor/project_manager.cpp msgid "New Game Project" -msgstr "Jauns SpÄ“les Projekts" +msgstr "Jauns spÄ“les projekts" #: editor/project_manager.cpp msgid "Imported Project" @@ -10475,11 +10481,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Projekta ceļš:" #: editor/project_manager.cpp msgid "Project Installation Path:" -msgstr "" +msgstr "Projekta instalÄcijas ceļš:" #: editor/project_manager.cpp msgid "Renderer:" @@ -10591,7 +10597,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Remove this project from the list?" -msgstr "" +msgstr "Noņemt Å¡o projektu no saraksta?" #: editor/project_manager.cpp msgid "" @@ -10650,7 +10656,7 @@ msgstr "NorÄdÄ«t mapi kuru skenÄ“t" #: editor/project_manager.cpp msgid "New Project" -msgstr "Jauns Projekts" +msgstr "Jauns projekts" #: editor/project_manager.cpp msgid "Import Project" @@ -10670,7 +10676,7 @@ msgstr "Par" #: editor/project_manager.cpp msgid "Asset Library Projects" -msgstr "" +msgstr "LÄ«dzekļu bibliotÄ“kas projekti" #: editor/project_manager.cpp msgid "Restart Now" @@ -10678,11 +10684,11 @@ msgstr "RestartÄ“t tagad" #: editor/project_manager.cpp msgid "Remove All" -msgstr "" +msgstr "Noņemt visu" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "DzÄ“st projekta saturu (nevar atsaukt)" #: editor/project_manager.cpp msgid "Can't run project" @@ -10693,6 +10699,8 @@ msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" +"Jums paÅ¡reiz nav neviena projekta.\n" +"Vai vÄ“laties skatÄ«t oficiÄlos paraugu projektus LÄ«dzekļu bibliotÄ“kÄ ?" #: editor/project_manager.cpp msgid "Filter projects" @@ -10711,7 +10719,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "AtslÄ“ga " +msgstr "Taustiņš " #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -10935,7 +10943,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" -msgstr "" +msgstr "Projekta iestatÄ«jumi (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -10951,7 +10959,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Ievade" #: editor/project_settings_editor.cpp msgid "Action:" @@ -10975,7 +10983,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Localization" -msgstr "" +msgstr "LokalizÄcija" #: editor/project_settings_editor.cpp msgid "Translations" @@ -11027,7 +11035,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "Sparudņi" +msgstr "Spraudņi" #: editor/project_settings_editor.cpp msgid "Import Defaults" @@ -11333,11 +11341,11 @@ msgstr "IzdzÄ“st %d mezglus?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "DzÄ“st saknes mezglu \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "DzÄ“st mezglu \"%s\" un tÄ bÄ“rnus?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -11399,15 +11407,15 @@ msgstr "Izveidot Cilmes Mezglu:" #: editor/scene_tree_dock.cpp msgid "2D Scene" -msgstr "" +msgstr "2D Aina" #: editor/scene_tree_dock.cpp msgid "3D Scene" -msgstr "" +msgstr "3D Aina" #: editor/scene_tree_dock.cpp msgid "User Interface" -msgstr "" +msgstr "LietotÄja interfeiss" #: editor/scene_tree_dock.cpp msgid "Other Node" @@ -11427,7 +11435,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "" +msgstr "Pievienot skriptu" #: editor/scene_tree_dock.cpp msgid "Cut Node(s)" @@ -11439,7 +11447,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" -msgstr "" +msgstr "Mezgla(-u) tipa maiņa" #: editor/scene_tree_dock.cpp msgid "" @@ -11480,7 +11488,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "Pievienot bÄ“rna mezglu" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -11488,7 +11496,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "MainÄ«t tipu" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" @@ -11500,7 +11508,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "SapludinÄt no ainas" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" @@ -11508,7 +11516,7 @@ msgstr "SaglabÄt zaru kÄ ainu" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "" +msgstr "KopÄ“t mezgla ceļu" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" @@ -11609,7 +11617,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "PÄrslÄ“gt redzamÄ«bu" #: editor/scene_tree_editor.cpp msgid "" @@ -11715,7 +11723,7 @@ msgstr "" #: editor/script_create_dialog.cpp msgid "Script path/name is valid." -msgstr "" +msgstr "Skripta ceļš/nosaukums ir derÄ«gs." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -11751,19 +11759,19 @@ msgstr "" #: editor/script_create_dialog.cpp msgid "Class Name:" -msgstr "" +msgstr "Klases nosaukums:" #: editor/script_create_dialog.cpp msgid "Template:" -msgstr "" +msgstr "Å ablons:" #: editor/script_create_dialog.cpp msgid "Built-in Script:" -msgstr "IebÅ«vÄ“ts skripts:" +msgstr "IebÅ«vÄ“tais skripts:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "" +msgstr "Pievienot mezgla skriptu" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -11807,7 +11815,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Errors" -msgstr "" +msgstr "Kļūdas" #: editor/script_editor_debugger.cpp msgid "Child process connected." @@ -11895,7 +11903,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Citi" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" @@ -12075,11 +12083,11 @@ msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" -msgstr "" +msgstr "BibliotÄ“ka" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "BibliotÄ“kas: " #: modules/gdnative/register_types.cpp msgid "GDNative" @@ -13774,7 +13782,7 @@ msgstr "BrÄ«dinÄjums!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "LÅ«dzu Apstipriniet..." +msgstr "LÅ«dzu apstipriniet..." #: scene/gui/file_dialog.cpp msgid "Must use a valid extension." diff --git a/editor/translations/mi.po b/editor/translations/mi.po index 0ca7a85100..6afda28ec5 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -7406,11 +7406,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/mk.po b/editor/translations/mk.po index fb20cef0b9..93b4e2afe1 100644 --- a/editor/translations/mk.po +++ b/editor/translations/mk.po @@ -4,19 +4,20 @@ # This file is distributed under the same license as the Godot source code. # # Kristijan Fremen Velkovski <me@krisfremen.com>, 2021. +# Denis <densisman@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-01-22 10:21+0000\n" -"Last-Translator: Kristijan Fremen Velkovski <me@krisfremen.com>\n" +"PO-Revision-Date: 2021-11-18 13:37+0000\n" +"Last-Translator: Denis <densisman@gmail.com>\n" "Language-Team: Macedonian <https://hosted.weblate.org/projects/godot-engine/" "godot/mk/>\n" "Language: mk\n" "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.5-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -39,7 +40,7 @@ msgstr "Ðевалидено внеÑување %i (не додадено) во #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self неможе да Ñе кориÑти зашто инÑтанцата е нула(не дадена)" +msgstr "Ñелф не може да Ñе кориÑти бидејќи инÑтанцата е нула (не минува)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -220,7 +221,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "" +msgstr "Додади Лента" #: editor/animation_track_editor.cpp msgid "Animation Looping" @@ -1796,7 +1797,7 @@ msgstr "" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Импортирај" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" @@ -2204,7 +2205,7 @@ msgstr "" #: editor/editor_network_profiler.cpp editor/editor_node.cpp msgid "Node" -msgstr "" +msgstr "Јазол" #: editor/editor_network_profiler.cpp msgid "Incoming RPC" @@ -7421,11 +7422,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 8f2b461e34..7fcb0ea508 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -7430,11 +7430,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/mr.po b/editor/translations/mr.po index f81040488f..8b63ae3338 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -7419,11 +7419,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/ms.po b/editor/translations/ms.po index ff7488d454..a6c0097736 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -7704,11 +7704,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 8924971039..0a8064f763 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -8082,15 +8082,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Fjern Ben" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "Singleton" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 80c2ab188d..669ed2e73d 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -50,13 +50,14 @@ # Hugo van de Kuilen <hugo.vandekuilen1234567890@gmail.com>, 2021. # tobeqz <vanveenjorik+tobeqz@gmail.com>, 2021. # Edgar <Edgar@anotherfoxguy.com>, 2021. +# Daan van Luijk <daanvl@outlook.be>, 2021. 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-10-24 20:52+0000\n" -"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n" +"PO-Revision-Date: 2021-11-07 22:23+0000\n" +"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\n" @@ -419,9 +420,8 @@ msgstr "node '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animatie" +msgstr "animatie" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -1787,6 +1787,8 @@ msgstr "Laat u 3D scenes weergeven en bewerken." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." msgstr "" +"Staat toe het script aan te passen door middel van de geïntegreerde script " +"editor" #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." @@ -2168,7 +2170,7 @@ msgstr "Thema-eigenschappen" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "Enumeratie" +msgstr "Enumeraties" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" @@ -7838,14 +7840,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Dit skelet heeft geen botten, maak een aantal Bone2D-knopen als kind." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "CreëerRest Pose vanuit botten" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Botten in rusthouding zetten" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "CreëerRest Pose vanuit botten" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/or.po b/editor/translations/or.po index eebe304b07..202b73cddc 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -7412,11 +7412,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/pl.po b/editor/translations/pl.po index f4e73cb4ba..2ca074c533 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -7760,14 +7760,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Ten szkielet nie ma koÅ›ci. Stwórz jakieÅ› wÄ™zÅ‚y potomne Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Utwórz pozÄ™ spoczynkowÄ… z koÅ›ci" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Ustaw koÅ›ciom pozÄ™ spoczynkowÄ…" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Utwórz pozÄ™ spoczynkowÄ… z koÅ›ci" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Szkielet 2D" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 363fb8def5..7d84259d58 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -7680,11 +7680,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/pt.po b/editor/translations/pt.po index 7b6e1eea53..58f22f48ae 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -24,7 +24,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: 2021-10-21 10:31+0000\n" +"PO-Revision-Date: 2021-11-07 09:45+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot/pt/>\n" @@ -3058,7 +3058,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Synchronize Scene Changes" -msgstr "Sincronizar Alterações de Cena" +msgstr "Sincronizar Alterações da Cena" #: editor/editor_node.cpp msgid "" @@ -7733,14 +7733,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Criar Pose de Descanso a partir de Ossos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Definir Pose de Descanso para Ossos" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Criar Pose de Descanso a partir de Ossos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Esqueleto2D" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index e32cf399c8..cf6ec219e1 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -127,13 +127,15 @@ # Mário Victor Ribeiro Silva <mariovictorrs@gmail.com>, 2021. # jak3z <jose_renato06@outlook.com>, 2021. # Henrique Darko <henridark00@gmail.com>, 2021. +# Cearaj <pmoraisleal@gmail.com>, 2021. +# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021. 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: 2021-11-03 13:15+0000\n" -"Last-Translator: jak3z <jose_renato06@outlook.com>\n" +"PO-Revision-Date: 2021-11-15 21:14+0000\n" +"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -141,7 +143,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -490,7 +492,7 @@ msgstr "Inserir Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp msgid "node '%s'" -msgstr "nodo '%s'" +msgstr "nó '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp @@ -4029,9 +4031,8 @@ msgid "Cancel" msgstr "Cancelar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "Cancelar download dos modelos." +msgstr "Cancelar o download dos modelos." #: editor/export_template_manager.cpp msgid "Other Installed Versions:" @@ -4490,7 +4491,7 @@ msgstr "Salvando..." #: editor/import_defaults_editor.cpp msgid "Select Importer" -msgstr "Selecione o arquivo para importar" +msgstr "Selecione Importador" #: editor/import_defaults_editor.cpp msgid "Importer:" @@ -5726,7 +5727,7 @@ msgstr "Configurar o Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Offset:" -msgstr "Deslocamento da grade:" +msgstr "Deslocamento da Grade:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Step:" @@ -5742,7 +5743,7 @@ msgstr "passos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" -msgstr "Deslocamento de rotação:" +msgstr "Deslocamento de Rotação:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" @@ -5981,7 +5982,7 @@ msgstr "Limpar Guias" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" -msgstr "Criar esqueleto(s) customizado(s) do(s) nó(s)" +msgstr "Criar Esqueleto(s) Customizado(s) a partir do(s) Nó(s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Bones" @@ -6032,7 +6033,7 @@ msgstr "V: Define a posição do pivô do nó selecionado." #: editor/plugins/spatial_editor_plugin.cpp msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Alt+Botão Esquerdo do Mouse: Mostrar a lista de todos os nós na posição " +"Alt+Botão Direito do Mouse: Mostrar a lista de todos os nós na posição " "clicada, incluindo os bloqueados." #: editor/plugins/canvas_item_editor_plugin.cpp @@ -7124,7 +7125,7 @@ msgid "" "viewport." msgstr "" "Polygon2D tem vértices internos, portanto não pode mais ser editado na " -"viewport." +"janela de exibição." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -7868,14 +7869,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Criar postura de descanso para os Ossos" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Definir a postura de repouso para os Ossos" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Criar postura de descanso para os Ossos" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Esqueleto2D" @@ -8292,15 +8293,15 @@ msgstr "Visão Direita" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Down" -msgstr "" +msgstr "Vista Órbita Baixo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Left" -msgstr "" +msgstr "Vista Órbita Esquerda" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Right" -msgstr "" +msgstr "Vista Órbita Direita" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -8309,7 +8310,7 @@ msgstr "Visão Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View 180" -msgstr "" +msgstr "Vista Órbita 180" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" @@ -8722,27 +8723,24 @@ msgid "Icons" msgstr "Ãcones" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "StyleBox" +msgstr "Styleboxes" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" msgstr "{num} cor(es)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "Nenhum sub-recurso encontrado." +msgstr "Nenhuma cor encontrada." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} constant(s)" msgstr "{num} constante(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Cor constante." +msgstr "Nenhuma constante encontrada." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" @@ -8762,7 +8760,7 @@ msgstr "Ãcones não encontrados." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} stylebox(es)" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8771,16 +8769,15 @@ msgstr "Nenhum sub-recurso encontrado." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} selecionado(s)" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "Nada foi selecionado para a importação." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Importar Tema" +msgstr "Importando Tema" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" @@ -8812,11 +8809,11 @@ msgstr "Selecione todos os itens de cor visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Selecione todos os itens de cor visÃveis e seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Desmarque todos os itens de cor visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items." @@ -8824,11 +8821,11 @@ msgstr "Selecione todos os itens constantes visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "Selecione todos os itens constantes visÃveis e seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "Desmarque todos os itens constantes visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items." @@ -8836,11 +8833,11 @@ msgstr "Selecione todos os itens de fonte visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "Selecione todos os itens de fonte visÃveis e seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "Desmarque todos os itens de fonte visÃveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible icon items." @@ -8875,33 +8872,28 @@ msgstr "" "do recurso do Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Recolher Tudo" +msgstr "Recolher tudo." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Expandir Tudo" +msgstr "Expandir tudo." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Selecionar o Arquivo de Modelo" +msgstr "Selecionar todos os itens do Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Selecionar Pontos" +msgstr "Selecionar Com Dados" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." msgstr "Selecionar todos os itens do Tema com dados." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Selecionar tudo" +msgstr "Desmarcar Tudo" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." @@ -8926,122 +8918,108 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Selecione um modelo de tema da lista para editar seus itens.\n" +"Você pode adicionar um modelo personalizado ou importar um modelo com itens " +"de outro tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens de Cor" #: editor/plugins/theme_editor_plugin.cpp msgid "Rename Item" msgstr "Renomear Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens de Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens de Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens de Ãcone" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Remove All StyleBox Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens de StyleBox" #: editor/plugins/theme_editor_plugin.cpp msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" -"Este tipo de tema está vazio.\n" +"Este modelo de tema está vazio.\n" "Adicione mais itens manualmente ou importe de outro tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Adicionar Itens de Classe" +msgstr "Adicionar Itens de Cor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Adicionar Itens de Classe" +msgstr "Adicionar Item de Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Adicionar Item" +msgstr "Adicionar Item de Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Adicionar Item" +msgstr "Adicionar Item de Ãcone" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Add Stylebox Item" -msgstr "Adicionar Todos os Itens" +msgstr "Adicionar Item de Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Remover Itens de Classe" +msgstr "Renomear Item de Cor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Remover Itens de Classe" +msgstr "Renomear Item de Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Renomear Nó" +msgstr "Renomear Item de Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Renomear Nó" +msgstr "Renomear Item de Ãcone" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Rename Stylebox Item" -msgstr "Remover Item Selecionado" +msgstr "Renomear Item de Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Arquivo inválido, não é um layout de canais de áudio." +msgstr "Arquivo inválido, não é um recurso de Tema." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Arquivo inválido, é o mesmo recurso de Tema sendo editado." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Gerenciar Templates" +msgstr "Gerenciar Itens do Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Item Editável" +msgstr "Editar Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Tipo:" +msgstr "Modelos:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Tipo:" +msgstr "Adicionar Modelo:" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Item:" @@ -9050,7 +9028,7 @@ msgstr "Adicionar Item:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy msgid "Add StyleBox Item" -msgstr "Adicionar Todos os Itens" +msgstr "Adicionar Item de Stylebox" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Items:" @@ -9061,133 +9039,119 @@ msgid "Remove Class Items" msgstr "Remover Itens de Classe" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Remover Itens de Classe" +msgstr "Remover Itens Personalizados" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Remover Todos os Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Itens do Tema de GUI" +msgstr "Adicionar Item de Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Nome do Nó:" +msgstr "Nome Antigo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Importar Tema" +msgstr "Importar Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Padrão" +msgstr "Tema Padrão" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Editar Tema" +msgstr "Tema do Editor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Excluir Recurso" +msgstr "Selecionar Outro Recurso de Tema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Importar Tema" +msgstr "Outro Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Renomear Trilha na Anim" +msgstr "Confirmar Renomeação do Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Renomear em lote" +msgstr "Cancelar Renomeação do Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Sobrescreve" +msgstr "Sobrescrever Item" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "Desafixar essa StyleBox do estilo principal." #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"Fixar essa StyleBox como estilo principal. Editar suas propriedades vai " +"atualizar as mesmas propriedades em todas as outras StyleBoxes desse modelo." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Tipo" +msgstr "Adicionar Modelo" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Adicionar Item" +msgstr "Adicionar Tipo de Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Node Types:" msgstr "Tipos de Nó:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Carregar Padrão" +msgstr "Mostrar Padrão" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." msgstr "" +"Mostrar itens do modelo padrão ao lado de itens que foram substituÃdos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Sobrescreve" +msgstr "Substituir Todos" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "Substituir todos os itens do modelo padrão." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme:" msgstr "Tema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Gerenciar Modelos de Exportação..." +msgstr "Gerenciar Itens..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "Adicionar, remover, organizar e importar itens de Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Visualização" +msgstr "Adicionar Prévia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Atualizar visualização" +msgstr "Prévia Padrão" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Selecione uma Malha de origem:" +msgstr "Selecione a Cena de UI:" #: editor/plugins/theme_editor_preview.cpp msgid "" @@ -9283,19 +9247,19 @@ msgstr "Tem,Muitas,Opções" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." msgstr "" +"Caminho inválido, o recurso PackedScene foi provavelmente movido ou deletado." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." -msgstr "" +msgstr "Recurso PackedScene inválido, se deve ter um nó Control na sua raÃz." #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "Arquivo inválido, não é um layout de canais de áudio." +msgstr "Arquivo inválido, não é um recurso PackedScene." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "Recarregue a cena para refletir seu estado mais atual." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -10820,9 +10784,8 @@ msgid "Script" msgstr "Roteiro" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Modo de Exportação de Scripts:" +msgstr "Modo de Exportação do GDScript:" #: editor/project_export.cpp msgid "Text" @@ -10830,7 +10793,7 @@ msgstr "Texto" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Bytecode Compilado (Carregamento Mais Rápido)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" @@ -11183,9 +11146,8 @@ msgid "Project Manager" msgstr "Gerenciador de Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Projetos" +msgstr "Projetos Locais" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -11196,9 +11158,8 @@ msgid "Last Modified" msgstr "Ultima Modificação" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Exportar Projeto" +msgstr "Editar Projeto" #: editor/project_manager.cpp #, fuzzy @@ -11210,9 +11171,8 @@ msgid "Scan" msgstr "Escanear" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Projetos" +msgstr "Escanear Projetos" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -11223,14 +11183,12 @@ msgid "New Project" msgstr "Novo Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Projeto Importado" +msgstr "Importar Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Renomear Projeto" +msgstr "Remover Projeto" #: editor/project_manager.cpp msgid "Remove Missing" @@ -11241,9 +11199,8 @@ msgid "About" msgstr "Sobre" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Biblioteca de Assets" +msgstr "Projetos da Biblioteca de Recursos" #: editor/project_manager.cpp msgid "Restart Now" @@ -11255,7 +11212,7 @@ msgstr "Remover Tudo" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "Também deletar os conteúdos do projeto (não se pode desfazer!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11270,9 +11227,8 @@ msgstr "" "Gostaria de explorar projetos de exemplo oficiais na Asset Library?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Filtrar propriedades" +msgstr "Filtrar Projetos" #: editor/project_manager.cpp #, fuzzy @@ -11288,7 +11244,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Tecla FÃsica" #: editor/project_settings_editor.cpp msgid "Key " @@ -11339,8 +11295,9 @@ msgid "Device" msgstr "Dispositivo" #: editor/project_settings_editor.cpp +#, fuzzy msgid " (Physical)" -msgstr "" +msgstr " FÃsico" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11483,9 +11440,8 @@ msgid "Override for Feature" msgstr "Sobrescrever para Funcionalidade" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Adicionar Tradução" +msgstr "Adicionar %d Traduções" #: editor/project_settings_editor.cpp msgid "Remove Translation" @@ -11943,12 +11899,15 @@ msgstr "Excluir o nó \"%s\"?" msgid "" "Saving the branch as a scene requires having a scene open in the editor." msgstr "" +"Para salvar o ramo como cena é necessário ter uma cena aberta no editor." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"Para salvar o ramo como cena é necessário selecionar apenas um nó, mas você " +"selecionou %d nós." #: editor/scene_tree_dock.cpp msgid "" @@ -12370,6 +12329,8 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"Aviso: É geralmente indesejável que o nome do script seja o mesmo que o de " +"um tipo embutido." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12441,7 +12402,7 @@ msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "Abrir Código C++ no GitHub" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12755,9 +12716,8 @@ msgid "Export Mesh GLTF2" msgstr "Exportar Biblioteca de Malhas" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Exportar..." +msgstr "Exportar GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12925,9 +12885,8 @@ msgid "Class name can't be a reserved keyword" msgstr "Nome da classe não pode ser uma palavra reservada" #: modules/mono/csharp_script.cpp -#, fuzzy msgid "Build Solution" -msgstr "Seleção de preenchimento" +msgstr "Construir Solução" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" @@ -13593,7 +13552,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "Assinando depuração %s..." #: platform/android/export/export_plugin.cpp msgid "Signing release %s..." @@ -13606,7 +13565,7 @@ msgstr "Não foi possÃvel encontrar a keystore, incapaz de exportar." #: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner' retornou com o erro #%d" #: platform/android/export/export_plugin.cpp msgid "Verifying %s..." @@ -13614,7 +13573,7 @@ msgstr "Verificando %s..." #: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "A verificação de 'apksigner' de %s falhou." #: platform/android/export/export_plugin.cpp msgid "Exporting for Android" @@ -13634,7 +13593,7 @@ msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk." #: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "Formato de Exportação Não Suportado\n" #: platform/android/export/export_plugin.cpp msgid "" @@ -13661,6 +13620,8 @@ msgstr "" msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"Incapaz de sobrescrever os arquivos res://android/build/res/*.xml com o nome " +"do projeto" #: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" @@ -13701,9 +13662,8 @@ msgid "Package not found: %s" msgstr "Pacote não encontrado: '%s'" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Creating APK..." -msgstr "Criando contornos..." +msgstr "Criando APK..." #: platform/android/export/export_plugin.cpp msgid "" @@ -13731,7 +13691,7 @@ msgstr "Não foi possÃvel exportar os arquivos do projeto" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." -msgstr "" +msgstr "Alinhando APK..." #: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." @@ -13783,9 +13743,8 @@ msgid "Could not write file:" msgstr "Não foi possÃvel escrever o arquivo:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Não foi possÃvel escrever o arquivo:" +msgstr "Não foi possÃvel ler o arquivo:" #: platform/javascript/export/export.cpp #, fuzzy @@ -14351,11 +14310,11 @@ msgstr "" #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Um Room não deve ser filho ou neto de um Portal." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Um RoomGroup não deve ser filho ou neto de um Portal." #: scene/3d/remote_transform.cpp msgid "" @@ -14367,15 +14326,15 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Um Room não pode ter outro Room como filho ou neto." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "O RoomManager não deve ser colocado dentro de um Room." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "Um RoomGroup não deve ser colocado dentro de um Room." #: scene/3d/room.cpp msgid "" @@ -14385,7 +14344,7 @@ msgstr "" #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "O RoomManager não deve ser colocado dentro de um RoomGroup." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." @@ -14393,7 +14352,7 @@ msgstr "" #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." -msgstr "" +msgstr "O nó RoomList deve ser Spatial(ou derivado de Spatial)." #: scene/3d/room_manager.cpp msgid "" @@ -14403,7 +14362,7 @@ msgstr "" #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "Só Deve existir um RoomManager na SceneTree." #: scene/3d/room_manager.cpp msgid "" @@ -14413,7 +14372,7 @@ msgstr "" #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "A RoomList não contem Rooms, abortando." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." @@ -14672,12 +14631,12 @@ msgstr "" "render e atribua sua textura interna a algum nó para exibir." #: scene/main/viewport.cpp -#, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" -"O tamanho da Viewport deve ser maior do que 0 para renderizar qualquer coisa." +"O tamanho do Viewport deve ser maior ou igual a 2 pixels em ambas as " +"dimensões para renderizar algo." #: scene/resources/occluder_shape.cpp msgid "OccluderShapeSphere Set Spheres" @@ -14722,7 +14681,7 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" -msgstr "" +msgstr "Variante Fragment-stage não pôde ser acessada na função personalizada!" #: servers/visual/shader_language.cpp msgid "Assignment to function." diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 1ffd38d5a0..9a45a6ca63 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -15,13 +15,14 @@ # f0roots <f0rootss@gmail.com>, 2020. # Gigel2 <mihalacher02@gmail.com>, 2020. # R3ktGamerRO <bluegamermc1@gmail.com>, 2021. +# FlooferLand <yunaflarf@gmail.com>, 2021. 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-03-20 04:18+0000\n" -"Last-Translator: R3ktGamerRO <bluegamermc1@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -30,7 +31,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 4.5.2-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -379,15 +380,13 @@ msgstr "Anim InseraÈ›i" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Mod Snap (%s)" +msgstr "nodul '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "AnimaÈ›ie" +msgstr "animaÈ›ie" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -395,9 +394,8 @@ msgstr "AnimationPlayer nu se poate anima singur, doar alÈ›i jucători." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Proprietate" +msgstr "proprietatea '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -486,7 +484,7 @@ msgstr "Anim MutaÈ›i Cheie" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "" +msgstr "Clipboardul este gol!" #: editor/animation_track_editor.cpp msgid "Paste Tracks" @@ -608,9 +606,8 @@ msgid "Go to Previous Step" msgstr "MergeÈ›i la Pasul Anterior" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "ResetaÈ›i Zoom-area" +msgstr "ResetaÈ›i" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -629,9 +626,8 @@ msgid "Use Bezier Curves" msgstr "FoloseÈ™te curbe Bezier" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "LipiÅ£i Piste" +msgstr "CreaÈ›i o pista RESET" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -973,11 +969,11 @@ msgstr "CreaÈ›i %s Nou" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "Niciun rezultat pentru \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Nu exista o descriere pentru %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1077,14 +1073,14 @@ msgid "Owners Of:" msgstr "Stăpâni La:" #: 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 "" "ȘtergeÈ›i fiÈ™ierele selectate din proiect? (AcÈ›iune ireversibilă)\n" -"PoÈ›i gasi fiÈ™ierele È™terse in coÈ™ul de gunoi dacă vrei să le restabileÈ™ti." +"Bazat pe configurarea sistemului de fiÈ™iere, fiÈ™ierele vor fi mutate în " +"coÈ™ul de gunoi al sistemului, ori vor fi È™terse definitiv." #: editor/dependency_editor.cpp #, fuzzy @@ -1170,7 +1166,7 @@ msgstr "MulÈ›umesc din partea comunităţii Godot!" #: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp msgid "Click to copy." -msgstr "" +msgstr "Apasă click sa copiezi." #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1268,41 +1264,38 @@ msgid "Licenses" msgstr "LicenÈ›e" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Eroare la deschiderea fiÅŸierului pachet, nu este în format ZIP." +msgstr "" +"Eroare la deschiderea fiÅŸierului pachet \"%s\" (nu este în formatul ZIP)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (Există deja)" +msgstr "%s (deja există)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "ConÈ›inutul pachetului \"%s\" - %d fiÈ™iere conflictă cu proiectul tău:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" +"ConÈ›inutul pachetului \"%s\" - Niciun fiÈ™ier nu conflictă cu proiectul tău:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "Decomprimare Asset-uri" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "Următoarele file au eÈ™uat extragerea din pachet:" +msgstr "Următoarele fiÈ™iere au eÈ™uat extragerea din pachetul \"%s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "È™i %d alte fiÈ™iere." +msgstr "(È™i %s alte fiÈ™iere)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "Pachet instalat cu succes!" +msgstr "Pachetul \"%s\" sa instalat cu succes!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1551,13 +1544,12 @@ msgid "Can't add autoload:" msgstr "Nu pot adaugă încărcare automata:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "FiÈ™ierul nu există." +msgstr "%s este o cale invalidă. FiÈ™ierul nu există." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s este o cale invalida. Nu este în calea resurselor (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1582,7 +1574,7 @@ msgstr "Nume" #: editor/editor_autoload_settings.cpp msgid "Global Variable" -msgstr "" +msgstr "Variabil Global" #: editor/editor_data.cpp msgid "Paste Params" @@ -1761,7 +1753,7 @@ msgstr "Importă Bară" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Permite vizualizarea È™i editarea scenelor 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." @@ -1783,7 +1775,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "Permite navigarea sistemului local de fiÈ™iere printr-un dock dedicat." #: editor/editor_feature_profile.cpp msgid "" @@ -1792,17 +1784,16 @@ msgid "" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Curent)" +msgstr "(actual)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(nici unul)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Șterge profilul actual selectat, '%s'? Nu poate fi anulat." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1834,9 +1825,8 @@ msgid "Enable Contextual Editor" msgstr "Activează Editorul Contextual" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "ReduceÈ›i toate proprietățile" +msgstr "Proprietățile clasei:" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1844,9 +1834,8 @@ msgid "Main Features:" msgstr "Caracteristici active:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Clase Activate:" +msgstr "Noduri È™i Clase:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1874,14 +1863,12 @@ msgid "Current Profile:" msgstr "Profil Curent:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Ștergere Profil" +msgstr "Creează un Profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Elimină Șablon" +msgstr "Șterge Profil" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1901,14 +1888,12 @@ msgid "Export" msgstr "Exportare" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Profil Curent:" +msgstr "Configură Profilul Selectat:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "OpÈ›iuni Clasă:" +msgstr "OpÈ›iunii Extra:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." @@ -1939,9 +1924,8 @@ msgid "Select Current Folder" msgstr "SelectaÅ£i directorul curent" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "FiÈ™ierul există, suprascrieÅ£i?" +msgstr "FiÈ™ierul există, înlocuiÈ›i?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2259,8 +2243,9 @@ msgstr "Proprietate:" #: editor/editor_inspector.cpp editor/scene_tree_dock.cpp #: modules/visual_script/visual_script_property_selector.cpp +#, fuzzy msgid "Set %s" -msgstr "" +msgstr "SetaÈ›i %s" #: editor/editor_inspector.cpp msgid "Set Multiple:" @@ -2436,9 +2421,8 @@ msgstr "" "putut fi satisfăcute." #: editor/editor_node.cpp -#, fuzzy msgid "Could not save one or more scenes!" -msgstr "Nu s-a putut porni subprocesul!" +msgstr "Nu s-au putut salva una sau mai multe scene!" #: editor/editor_node.cpp msgid "Save All Scenes" @@ -2543,7 +2527,7 @@ msgstr "Nu există nici o scenă definită pentru a execuÈ›ie." #: editor/editor_node.cpp msgid "Save scene before running..." -msgstr "" +msgstr "SalvaÈ›i scena înainte de a rula..." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -2579,7 +2563,7 @@ msgstr "Salvează schimbările la ’%s’ înainte de ieÈ™ire?" #: editor/editor_node.cpp msgid "%s no longer exists! Please specify a new save location." -msgstr "" +msgstr "%s nu mai există! Vă rugăm să specificaÈ›i o nouă locaÈ›ie de salvare." #: editor/editor_node.cpp msgid "" @@ -7879,15 +7863,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Creează Puncte de Emisie Din Mesh" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "Singleton (Unicat)" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 668cfb6afa..0d7bd238ed 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -99,13 +99,14 @@ # Олег Довгер <oleg.a.dovger@gmail.com>, 2021. # Anna Malinovskaia <tacitcoast@gmail.com>, 2021. # mrvladus <mrvladus@yandex.ru>, 2021. +# DΞLTΛ <craftercrafter43@gmail.com>, 2021. 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-10-21 10:31+0000\n" -"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" +"PO-Revision-Date: 2021-11-07 09:45+0000\n" +"Last-Translator: DΞLTΛ <craftercrafter43@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -7817,20 +7818,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "У Ñтого Ñкелета нет коÑтей, Ñоздайте дочерние Bone2D узлы." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Задать позу Ð¿Ð¾ÐºÐ¾Ñ ÐºÐ¾ÑÑ‚Ñм" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "2D Ñкелет" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Reset to Rest Pose" -msgstr "СброÑить к позе покоÑ" +msgstr "Создать позу покоÑ" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Overwrite Rest Pose" diff --git a/editor/translations/si.po b/editor/translations/si.po index 698dc3040d..a6c6eb5ab3 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -7480,11 +7480,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 59ddcb9fc1..70488a8dae 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -7783,11 +7783,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 0d0acd817d..5fe2168656 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -8055,15 +8055,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Zaženi Prizor po Meri" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "Posameznik" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index d6e23ddbe6..a68667d741 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -7802,11 +7802,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 0301c5f380..73448d79ed 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -6,12 +6,13 @@ # ÐлекÑандар Урошевић <nicecubedude@gmail.com>, 2017. # Младен Габић <cupakabra@protonmail.com>, 2020. # Anonymous <noreply@weblate.org>, 2020. +# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2020-05-22 21:01+0000\n" -"Last-Translator: Младен Габић <cupakabra@protonmail.com>\n" +"PO-Revision-Date: 2021-11-07 22:23+0000\n" +"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n" "Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-" "engine/godot/sr_Cyrl/>\n" "Language: sr_Cyrl\n" @@ -19,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -101,7 +102,6 @@ msgid "Balanced" msgstr "БаланÑирано" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" msgstr "Огледало" @@ -110,14 +110,12 @@ msgid "Time:" msgstr "Време:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" msgstr "ВредноÑÑ‚:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "Убаци кључ" +msgstr "Овде Убаците Кључ" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -1024,7 +1022,7 @@ msgstr "Сигурно желиш да уклониш Ñве везе Ñа \"%s\ #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "Сигнали" +msgstr "Знаци" #: editor/connections_dialog.cpp #, fuzzy @@ -2272,9 +2270,8 @@ msgid "Inherited by:" msgstr "ÐаÑлеђено од:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "ОпиÑ:" +msgstr "ОпиÑ" #: editor/editor_help.cpp #, fuzzy @@ -2297,25 +2294,26 @@ msgstr "Уобичајено" #: editor/editor_help.cpp msgid "Methods" -msgstr "Методе" +msgstr "ПоÑтупци" #: editor/editor_help.cpp #, fuzzy msgid "Theme Properties" -msgstr "ОÑобине" +msgstr "ОÑобине Теме" #: editor/editor_help.cpp +#, fuzzy msgid "Enumerations" -msgstr "Енумерације" +msgstr "ПопиÑивање" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" -msgstr "КонÑтанте" +msgstr "Ðепроменљиве" #: editor/editor_help.cpp #, fuzzy msgid "Property Descriptions" -msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" +msgstr "ОпиÑи ОÑобина" #: editor/editor_help.cpp #, fuzzy @@ -2333,7 +2331,7 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy msgid "Method Descriptions" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" +msgstr "ОпиÑи Метода" #: editor/editor_help.cpp msgid "" @@ -8467,13 +8465,13 @@ msgstr "Овај коÑтур нема коÑти, креирај му децу #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Create Rest Pose from Bones" -msgstr "Ðаправи тачке емиÑије од мреже" +msgid "Set Rest Pose to Bones" +msgstr "ПоÑтави Одмор Позу на КоÑке" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Set Rest Pose to Bones" -msgstr "ПоÑтави Одмор Позу на КоÑке" +msgid "Create Rest Pose from Bones" +msgstr "Ðаправи тачке емиÑије од мреже" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 66f5d9574f..d8a6c896f1 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -7532,11 +7532,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 3b674ce0e3..7abece55a6 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -7869,15 +7869,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "Skapa frÃ¥n Scen" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Skeleton2D" msgstr "Singleton" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index ac91117100..137e2a28f9 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -7482,11 +7482,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/te.po b/editor/translations/te.po index 6735d08c71..fbe2d0dac3 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -7416,11 +7416,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/th.po b/editor/translations/th.po index 602f593f13..6fe9af7f1d 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -7700,14 +7700,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "โครงหลัà¸à¸™à¸µà¹‰à¸¢à¸±à¸‡à¹„ม่มีโครงใดๆ สร้างโหนดลูà¸à¸‚à¸à¸‡ Bone2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "สร้างท่าโพสจาà¸à¹‚ครง" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "ตั้งท่าโพสจาà¸à¹‚ครง" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "สร้างท่าโพสจาà¸à¹‚ครง" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/tl.po b/editor/translations/tl.po new file mode 100644 index 0000000000..691f0eeeac --- /dev/null +++ b/editor/translations/tl.po @@ -0,0 +1,13819 @@ +# Tagalog translation of the Godot Engine editor. +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). +# This file is distributed under the same license as the Godot source code. +# +# Napstaguy04 <brokenscreen3@gmail.com>, 2021. +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine editor\n" +"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" +"PO-Revision-Date: 2021-11-19 08:44+0000\n" +"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n" +"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/" +"godot/tl/>\n" +"Language: tl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" +"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " +"|| n % 10 == 6 || n % 10 == 9);\n" +"X-Generator: Weblate 4.9.1-dev\n" + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: modules/visual_script/visual_script_builtin_funcs.cpp +msgid "Invalid type argument to convert(), use TYPE_* constants." +msgstr "" +"Di-wastong uri ng argumento para sa convert(), gamitin ang TYPE_* constants." + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Inaasahang string na may habang 1 (isang karakter)." + +#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#: 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 "Kulang na bytes para sa decoding bytes, o di-wastong format." + +#: core/math/expression.cpp +msgid "Invalid input %i (not passed) in expression" +msgstr "Di-wastong input %i (di naipasa) sa expression" + +#: core/math/expression.cpp +msgid "self can't be used because instance is null (not passed)" +msgstr "" +"Hindi magagamit ang self dahil ang instance ay naka-null (hindi ipinasa)" + +#: core/math/expression.cpp +msgid "Invalid operands to operator %s, %s and %s." +msgstr "Di-wastong mga operands sa mga operator %s, %s at %s." + +#: core/math/expression.cpp +msgid "Invalid index of type %s for base type %s" +msgstr "Di-wastong index ng uring %s para sa batayang uri %s" + +#: core/math/expression.cpp +msgid "Invalid named index '%s' for base type %s" +msgstr "Di-wastong pinangalang index '%s' para sa batayang uri na %s" + +#: core/math/expression.cpp +msgid "Invalid arguments to construct '%s'" +msgstr "Di-wastong mga argument para i-construct ang '%s'" + +#: core/math/expression.cpp +msgid "On call to '%s':" +msgstr "Sa pagtawag sa '%s':" + +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + +#: editor/animation_bezier_editor.cpp +msgid "Free" +msgstr "Walang Bayad" + +#: editor/animation_bezier_editor.cpp +msgid "Balanced" +msgstr "Nakabalanse" + +#: editor/animation_bezier_editor.cpp +msgid "Mirror" +msgstr "Salamin" + +#: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp +msgid "Time:" +msgstr "Oras:" + +#: editor/animation_bezier_editor.cpp +msgid "Value:" +msgstr "Halaga:" + +#: editor/animation_bezier_editor.cpp +msgid "Insert Key Here" +msgstr "Maglagay ng Key dito" + +#: editor/animation_bezier_editor.cpp +msgid "Duplicate Selected Key(s)" +msgstr "Doblehin ang (mga) Napiling Key" + +#: editor/animation_bezier_editor.cpp +msgid "Delete Selected Key(s)" +msgstr "Burahin ang (mga) Napiling Key" + +#: editor/animation_bezier_editor.cpp +msgid "Add Bezier Point" +msgstr "Magdagdag ng Bezier Point" + +#: editor/animation_bezier_editor.cpp +msgid "Move Bezier Points" +msgstr "Maglipat ng (mga) Bezier Point" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Duplicate Keys" +msgstr "Pagdodoble ng mga Animation Key" + +#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +msgid "Anim Delete Keys" +msgstr "Pagbura ng mga Animation Key" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Time" +msgstr "Pagbago ng Keyframe Time ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transition" +msgstr "Pagbago ng Transisyon ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Transform" +msgstr "Pagbago ng Transform ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Keyframe Value" +msgstr "Pagbago ng Nilalaman ng Keyframe ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Change Call" +msgstr "Pagbago ng Pagtawag sa Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Keyframe Time" +msgstr "Pagbago ng Oras ng Maraming Keyframe ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Transition" +msgstr "Pagbago ng Maraming Transisyon ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Transform" +msgstr "Pagbago ng Maraming Transform ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Keyframe Value" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Anim Multi Change Call" +msgstr "Pagbago ng Maraming Pagtawag ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Length" +msgstr "Pagbago ang Haba ng Animation" + +#: editor/animation_track_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation Loop" +msgstr "Pagbago ng Animation Loop" + +#: editor/animation_track_editor.cpp +msgid "Property Track" +msgstr "Pangkatangiang Track" + +#: editor/animation_track_editor.cpp +msgid "3D Transform Track" +msgstr "Track na Pang-3D Transform" + +#: editor/animation_track_editor.cpp +msgid "Call Method Track" +msgstr "Track na Pantawag ng Method" + +#: editor/animation_track_editor.cpp +msgid "Bezier Curve Track" +msgstr "Track na Pang-Bezier Curve" + +#: editor/animation_track_editor.cpp +msgid "Audio Playback Track" +msgstr "Track na Tagapatunog ng Audio" + +#: editor/animation_track_editor.cpp +msgid "Animation Playback Track" +msgstr "Track na Tagasimula ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Animation length (frames)" +msgstr "Haba ng Animation (frames)" + +#: editor/animation_track_editor.cpp +msgid "Animation length (seconds)" +msgstr "Haba ng Animation (Kada segundo)" + +#: editor/animation_track_editor.cpp +msgid "Add Track" +msgstr "Magdagdag ng Track" + +#: editor/animation_track_editor.cpp +msgid "Animation Looping" +msgstr "Paguulit ng Animation" + +#: editor/animation_track_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Functions:" +msgstr "Mga Punsyon:" + +#: editor/animation_track_editor.cpp +msgid "Audio Clips:" +msgstr "Kabahagi ng Audio:" + +#: editor/animation_track_editor.cpp +msgid "Anim Clips:" +msgstr "Mga Kabahagi ng Anim:" + +#: editor/animation_track_editor.cpp +msgid "Change Track Path" +msgstr "Ibahin ang Daan ng Track" + +#: editor/animation_track_editor.cpp +msgid "Toggle this track on/off." +msgstr "Ipalit sa on/off ang track na ito." + +#: editor/animation_track_editor.cpp +msgid "Update Mode (How this property is set)" +msgstr "Paraang Nag-aapdate (Kung papano inayos ang katangian na ito)" + +#: editor/animation_track_editor.cpp +msgid "Interpolation Mode" +msgstr "Paraang Interpolasyon" + +#: editor/animation_track_editor.cpp +msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" +msgstr "" +"Paraang Paikot na Paghigpit (I-interpolate ang dulo kasama ng pagsimula ng " +"loop)" + +#: editor/animation_track_editor.cpp +msgid "Remove this track." +msgstr "Tanggalin ang track na ito." + +#: editor/animation_track_editor.cpp +msgid "Time (s): " +msgstr "Oras (s): " + +#: editor/animation_track_editor.cpp +msgid "Toggle Track Enabled" +msgstr "Pinapagana ang Pagpalit ng Track" + +#: editor/animation_track_editor.cpp +msgid "Continuous" +msgstr "Tuloy-tuloy" + +#: editor/animation_track_editor.cpp +msgid "Discrete" +msgstr "Magkaiba" + +#: editor/animation_track_editor.cpp +msgid "Trigger" +msgstr "Trigger" + +#: editor/animation_track_editor.cpp +msgid "Capture" +msgstr "Pagkuha" + +#: editor/animation_track_editor.cpp +msgid "Nearest" +msgstr "Pinakamalapit" + +#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp +#: editor/property_editor.cpp +msgid "Linear" +msgstr "Pahanay" + +#: editor/animation_track_editor.cpp +msgid "Cubic" +msgstr "Pakubo" + +#: editor/animation_track_editor.cpp +msgid "Clamp Loop Interp" +msgstr "Hanggahan ang Loop Interp" + +#: editor/animation_track_editor.cpp +msgid "Wrap Loop Interp" +msgstr "Ibalot ang Loop Interp" + +#: editor/animation_track_editor.cpp +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key" +msgstr "Maglagay ng Key" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Key(s)" +msgstr "Doblehin ang (mga) Key" + +#: editor/animation_track_editor.cpp +msgid "Delete Key(s)" +msgstr "Tanggalin Ang (mga) Key" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Update Mode" +msgstr "Ibahin ang Paraan ng Pag-update ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Interpolation Mode" +msgstr "Ibahin ang Paraan ng Pag-interpolate ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Loop Mode" +msgstr "Ibahin Ang Paraan ng Pag-loop" + +#: editor/animation_track_editor.cpp +msgid "Remove Anim Track" +msgstr "Alisin ang Anim Track" + +#. TRANSLATORS: %s will be replaced by a phrase describing the target of track. +#: editor/animation_track_editor.cpp +msgid "Create NEW track for %s and insert key?" +msgstr "Gumawa ng BAGONG track para sa %s at ilagay ang key?" + +#: editor/animation_track_editor.cpp +msgid "Create %d NEW tracks and insert keys?" +msgstr "Gumawa ng %d BAGONG mga track at maglagay ng mga key?" + +#: editor/animation_track_editor.cpp editor/create_dialog.cpp +#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/mesh_instance_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Create" +msgstr "Lumikha" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert" +msgstr "Maglagay ng Anim" + +#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. +#: editor/animation_track_editor.cpp +msgid "node '%s'" +msgstr "node '%s'" + +#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. +#: editor/animation_track_editor.cpp +msgid "animation" +msgstr "animation" + +#: editor/animation_track_editor.cpp +msgid "AnimationPlayer can't animate itself, only other players." +msgstr "" +"Hindi kayang i-animate ng AnimationPlayer ang sarili, sa ibang manlalaro " +"lang." + +#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. +#: editor/animation_track_editor.cpp +msgid "property '%s'" +msgstr "katangiang '%s'" + +#: editor/animation_track_editor.cpp +msgid "Anim Create & Insert" +msgstr "Lumikha at Maglagay ng Anim" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Track & Key" +msgstr "Maglagay ng Anim Track & Key" + +#: editor/animation_track_editor.cpp +msgid "Anim Insert Key" +msgstr "Maglagay ng Anim Key" + +#: editor/animation_track_editor.cpp +msgid "Change Animation Step" +msgstr "Ibahin ang Baytang ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Rearrange Tracks" +msgstr "Ayusin ang mga Track" + +#: editor/animation_track_editor.cpp +msgid "Transform tracks only apply to Spatial-based nodes." +msgstr "" +"Ang mga transform track ay maari lang ikapit sa mga nakabaseng Spatial node." + +#: editor/animation_track_editor.cpp +msgid "" +"Audio tracks can only point to nodes of type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" +msgstr "" +"Maari lang tumuro sa mga node na ganitong uri:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" + +#: editor/animation_track_editor.cpp +msgid "Animation tracks can only point to AnimationPlayer nodes." +msgstr "Maari lang tumuro ang mga Animation tracks sa AnimationPlayer nodes." + +#: editor/animation_track_editor.cpp +msgid "Not possible to add a new track without a root" +msgstr "Hindi maaring magdagdag ng bagong track na walang ugat" + +#: editor/animation_track_editor.cpp +msgid "Invalid track for Bezier (no suitable sub-properties)" +msgstr "Hindi kaayong track para sa Bezier (walang kaayong subproperties)" + +#: editor/animation_track_editor.cpp +msgid "Add Bezier Track" +msgstr "Magdagdag ng Bezier Track" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a key." +msgstr "Ang pagdaraanan ng track ay imbalido, kaya hindi makakadagdag ng key." + +#: editor/animation_track_editor.cpp +msgid "Track is not of type Spatial, can't insert key" +msgstr "Hindi Spatial ang Track, hindi makakalagay ng key" + +#: editor/animation_track_editor.cpp +msgid "Add Transform Track Key" +msgstr "Magdagdag ng Transform Track Key" + +#: editor/animation_track_editor.cpp +msgid "Add Track Key" +msgstr "Magdagdag ng Track Key" + +#: editor/animation_track_editor.cpp +msgid "Track path is invalid, so can't add a method key." +msgstr "Di-wasto ang daan ng Track, kaya di maidaragdag ang method key." + +#: editor/animation_track_editor.cpp +msgid "Add Method Track Key" +msgstr "Magdagdag ng Method Track Key" + +#: editor/animation_track_editor.cpp +msgid "Method not found in object: " +msgstr "Hindi mahanap ang Method sa object: " + +#: editor/animation_track_editor.cpp +msgid "Anim Move Keys" +msgstr "" + +#: editor/animation_track_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Clipboard is empty!" +msgstr "Walang laman ang clipboard!" + +#: editor/animation_track_editor.cpp +msgid "Paste Tracks" +msgstr "Idikit ang mga Track" + +#: editor/animation_track_editor.cpp +msgid "Anim Scale Keys" +msgstr "Mga Key ng Anim Scale" + +#: editor/animation_track_editor.cpp +msgid "" +"This option does not work for Bezier editing, as it's only a single track." +msgstr "" +"Hindi gumagana ang opsyong ito para sa pag-edit ng Bezier, dahil iisa lang " +"ito." + +#: editor/animation_track_editor.cpp +msgid "" +"This animation belongs to an imported scene, so changes to imported tracks " +"will not be saved.\n" +"\n" +"To enable the ability to add custom tracks, navigate to the scene's import " +"settings and set\n" +"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks" +"\", then re-import.\n" +"Alternatively, use an import preset that imports animations to separate " +"files." +msgstr "" +"Ang animation na ito ay nabibilang sa na-import na eksena, kaya ang anumang " +"pagbabago sa imported tracks ay hindi mase-save.\n" +"\n" +"Upang magbigay ng kakayahang magdagdag ng mga custom track, mag-navigate sa " +"import settings ng eksena at itakda ang\n" +"\"Animation> Stroage\" sa \"File\", i-activate ang \"Animation> Keep Custom " +"Tracks\", pagkatapos ay muling i-import.\n" +"Bilang kahalili, gumamit ng import preset na nag-i-import ng mga animation " +"upang paghiwalayin ang mga file." + +#: editor/animation_track_editor.cpp +msgid "Warning: Editing imported animation" +msgstr "Babala: Ineedit ang na import na animation" + +#: editor/animation_track_editor.cpp +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Only show tracks from nodes selected in tree." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Group tracks by node or display them as plain list." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Snap:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Animation step value." +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Seconds" +msgstr "Mga Segundo" + +#: editor/animation_track_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "FPS" +msgstr "FPS" + +#: editor/animation_track_editor.cpp editor/editor_plugin_settings.cpp +#: editor/editor_resource_picker.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/plugins/tile_set_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit" +msgstr "Ayusin" + +#: editor/animation_track_editor.cpp +msgid "Animation properties." +msgstr "Mga katangian ng animation." + +#: editor/animation_track_editor.cpp +msgid "Copy Tracks" +msgstr "Kopyahin ang mga Tracks" + +#: editor/animation_track_editor.cpp +msgid "Scale Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale From Cursor" +msgstr "" + +#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Duplicate Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Duplicate Transposed" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Delete Selection" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Next Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Go to Previous Step" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Apply Reset" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize Animation" +msgstr "Pabilisin ang takbo ng Animation" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Pick the node that will be animated:" +msgstr "Piliin ang node na i-aanimate:" + +#: editor/animation_track_editor.cpp +msgid "Use Bezier Curves" +msgstr "Gumamit ng Bezier Curves" + +#: editor/animation_track_editor.cpp +msgid "Create RESET Track(s)" +msgstr "Gumawa ng (mga) RESET Track" + +#: editor/animation_track_editor.cpp +msgid "Anim. Optimizer" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Linear Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max. Angular Error:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Max Optimizable Angle:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Optimize" +msgstr "Pabilisin ang takbo" + +#: editor/animation_track_editor.cpp +msgid "Remove invalid keys" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Remove unresolved and empty tracks" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-up all animations" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up Animation(s) (NO UNDO!)" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Clean-Up" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Scale Ratio:" +msgstr "" + +#: editor/animation_track_editor.cpp +msgid "Select Tracks to Copy" +msgstr "" + +#: editor/animation_track_editor.cpp editor/editor_log.cpp +#: editor/editor_resource_picker.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Copy" +msgstr "Kopyahin" + +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "Piliin Lahat/Wala" + +#: editor/animation_track_editor_plugins.cpp +msgid "Add Audio Track Clip" +msgstr "Magdagdag ng Audio Track Clip" + +#: editor/animation_track_editor_plugins.cpp +msgid "Change Audio Track Clip Start Offset" +msgstr "" + +#: editor/animation_track_editor_plugins.cpp +msgid "Change Audio Track Clip End Offset" +msgstr "Ibahin ang Urong ng hulihan ng Audio Track" + +#: editor/array_property_edit.cpp +msgid "Resize Array" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value Type" +msgstr "" + +#: editor/array_property_edit.cpp +msgid "Change Array Value" +msgstr "" + +#: editor/code_editor.cpp +msgid "Go to Line" +msgstr "Pumunta sa Line" + +#: editor/code_editor.cpp +msgid "Line Number:" +msgstr "Bilang ng Linya:" + +#: editor/code_editor.cpp +msgid "%d replaced." +msgstr "Naalis ang %d." + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "%d match." +msgstr "%d na kapares." + +#: editor/code_editor.cpp editor/editor_help.cpp +msgid "%d matches." +msgstr "%d na mga kapares." + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Match Case" +msgstr "" + +#: editor/code_editor.cpp editor/find_in_files.cpp +msgid "Whole Words" +msgstr "" + +#: editor/code_editor.cpp +msgid "Replace" +msgstr "Palitan" + +#: editor/code_editor.cpp +msgid "Replace All" +msgstr "Palitan Lahat" + +#: editor/code_editor.cpp +msgid "Selection Only" +msgstr "Napili lang" + +#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp +#: editor/plugins/text_editor.cpp +msgid "Standard" +msgstr "Karaniwan" + +#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp +msgid "Toggle Scripts Panel" +msgstr "" + +#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp +msgid "Zoom In" +msgstr "Palakihin Ang Tanaw" + +#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp +msgid "Zoom Out" +msgstr "Paliitin Ang Tanaw" + +#: editor/code_editor.cpp +msgid "Reset Zoom" +msgstr "Ibalik sa Dati Ang Tanaw" + +#: editor/code_editor.cpp +msgid "Warnings" +msgstr "Mga Babala" + +#: editor/code_editor.cpp +msgid "Line and column numbers." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method in target node must be specified." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Method name must be a valid identifier." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "" +"Target method not found. Specify a valid method or attach a script to the " +"target node." +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Connect to Node:" +msgstr "Ikabit sa Node:" + +#: editor/connections_dialog.cpp +msgid "Connect to Script:" +msgstr "Ikabit sa Script:" + +#: editor/connections_dialog.cpp +msgid "From Signal:" +msgstr "Galing sa Hudyat:" + +#: editor/connections_dialog.cpp +msgid "Scene does not contain any script." +msgstr "Walang script ang eksena." + +#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp +#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +msgid "Add" +msgstr "Maglagay" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp +#: editor/project_settings_editor.cpp +msgid "Remove" +msgstr "Alisin" + +#: editor/connections_dialog.cpp +msgid "Add Extra Call Argument:" +msgstr "Magdagdag ng Dagdag na Argumento sa Tawag:" + +#: editor/connections_dialog.cpp +msgid "Extra Call Arguments:" +msgstr "Mga Dagdag na Argumento ng Tawag:" + +#: editor/connections_dialog.cpp +msgid "Receiver Method:" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Advanced" +msgstr "" + +#: editor/connections_dialog.cpp +msgid "Deferred" +msgstr "Ipinagbaliban" + +#: editor/connections_dialog.cpp +msgid "" +"Defers the signal, storing it in a queue and only firing it at idle time." +msgstr "" +"Ipinagpaliban ang hudyat. Iniistore ito sa isang queue at pinapalitaw lamang " +"kapag walang ginagawa." + +#: editor/connections_dialog.cpp +msgid "Oneshot" +msgstr "Isang Beses" + +#: editor/connections_dialog.cpp +msgid "Disconnects the signal after its first emission." +msgstr "Tinatanggal ang hudyat pagkatapos ng unang pag-trigger." + +#: editor/connections_dialog.cpp +msgid "Cannot connect signal" +msgstr "Hindi maikabit ang hudyat" + +#: editor/connections_dialog.cpp editor/dependency_editor.cpp +#: editor/export_template_manager.cpp editor/groups_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/property_editor.cpp +#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Close" +msgstr "Isara" + +#: editor/connections_dialog.cpp +msgid "Connect" +msgstr "Ikabit" + +#: editor/connections_dialog.cpp +msgid "Signal:" +msgstr "Hudyat:" + +#: editor/connections_dialog.cpp +msgid "Connect '%s' to '%s'" +msgstr "Ikabit ang '%s' sa '%s'" + +#: editor/connections_dialog.cpp +msgid "Disconnect '%s' from '%s'" +msgstr "Tanggalin ang '%s' sa '%s'" + +#: editor/connections_dialog.cpp +msgid "Disconnect all from signal: '%s'" +msgstr "Tanggalin lahat sa nakakabit na hudyat: '%s'" + +#: editor/connections_dialog.cpp +msgid "Connect..." +msgstr "Ikabit..." + +#: editor/connections_dialog.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Disconnect" +msgstr "Tanggalin" + +#: editor/connections_dialog.cpp +msgid "Connect a Signal to a Method" +msgstr "Ikabit Ang Hudyat sa Isang Method" + +#: editor/connections_dialog.cpp +msgid "Edit Connection:" +msgstr "Ayusin Ang Pagkakabit:" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from the \"%s\" signal?" +msgstr "" +"Tiyak ka bang gusto mong alisin lahat ng mga pagkakabit mula sa hudyat \"%s" +"\"?" + +#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp +msgid "Signals" +msgstr "Mga Hudyat" + +#: editor/connections_dialog.cpp +msgid "Filter signals" +msgstr "Salain ang mga hudyat" + +#: editor/connections_dialog.cpp +msgid "Are you sure you want to remove all connections from this signal?" +msgstr "Gusto mo bang alisin lahat ng pagkakabit sa hudyat na ito?" + +#: editor/connections_dialog.cpp +msgid "Disconnect All" +msgstr "Tanggalin Lahat" + +#: editor/connections_dialog.cpp +msgid "Edit..." +msgstr "Ayusin..." + +#: editor/connections_dialog.cpp +msgid "Go to Method" +msgstr "Pumunta sa Method" + +#: editor/create_dialog.cpp +msgid "Change %s Type" +msgstr "Ibahin Ang Uri ng %s" + +#: editor/create_dialog.cpp editor/project_settings_editor.cpp +msgid "Change" +msgstr "Baguhin" + +#: editor/create_dialog.cpp +msgid "Create New %s" +msgstr "Gumawa ng Bagong %s" + +#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "Walang resulta para sa \"%s\"." + +#: editor/create_dialog.cpp editor/property_selector.cpp +msgid "No description available for %s." +msgstr "Walang paglalarawan sa %s." + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp +msgid "Favorites:" +msgstr "Mga Paborito:" + +#: editor/create_dialog.cpp editor/editor_file_dialog.cpp +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 +#: 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 +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Matches:" +msgstr "Mga Tugma:" + +#: editor/create_dialog.cpp editor/editor_feature_profile.cpp +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Description:" +msgstr "Paglalarawan:" + +#: editor/dependency_editor.cpp +msgid "Search Replacement For:" +msgstr "Maghanap ng Kapalit para sa:" + +#: editor/dependency_editor.cpp +msgid "Dependencies For:" +msgstr "Mga Kaasahan Para Sa:" + +#: editor/dependency_editor.cpp +msgid "" +"Scene '%s' is currently being edited.\n" +"Changes will only take effect when reloaded." +msgstr "" +"Kasalukuyang binabago ang Eksenang '%s'.\n" +"Magpapakita lang ang mga pagbabago sa pag-reload." + +#: editor/dependency_editor.cpp +msgid "" +"Resource '%s' is in use.\n" +"Changes will only take effect when reloaded." +msgstr "" + +#: editor/dependency_editor.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dependencies" +msgstr "Mga Kaasahan" + +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp +msgid "Resource" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp +#: editor/project_manager.cpp editor/project_settings_editor.cpp +msgid "Path" +msgstr "Kinaroroonan" + +#: editor/dependency_editor.cpp +msgid "Dependencies:" +msgstr "Mga Kaasahan:" + +#: editor/dependency_editor.cpp +msgid "Fix Broken" +msgstr "Ayusin Ang Sira" + +#: editor/dependency_editor.cpp +msgid "Dependency Editor" +msgstr "Editor ng Kaasahan" + +#: editor/dependency_editor.cpp +msgid "Search Replacement Resource:" +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/script_create_dialog.cpp +#: modules/visual_script/visual_script_property_selector.cpp +#: scene/gui/file_dialog.cpp +msgid "Open" +msgstr "Buksan" + +#: editor/dependency_editor.cpp +msgid "Owners Of:" +msgstr "Mga May-ari ng:" + +#: editor/dependency_editor.cpp +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 "" +"Alisin ang mga napiling file sa proyekto? (Bawal nang bawiin.)\n" +"Depende sa ayos ng filesystem mo, ang mga file ay maaring malipat sa " +"basurahan ng system o mananatili nang mawala." + +#: editor/dependency_editor.cpp +msgid "" +"The files being removed are required by other resources in order for them to " +"work.\n" +"Remove them anyway? (Cannot be undone.)\n" +"Depending on your filesystem configuration, the files will either be moved " +"to the system trash or deleted permanently." +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Cannot remove:" +msgstr "Hindi matanggal:" + +#: editor/dependency_editor.cpp +msgid "Error loading:" +msgstr "Nabigong ikarga:" + +#: editor/dependency_editor.cpp +msgid "Load failed due to missing dependencies:" +msgstr "Nabigo ang pagkakarga dahil sa mga nawawalang kaasahan:" + +#: editor/dependency_editor.cpp editor/editor_node.cpp +msgid "Open Anyway" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Which action should be taken?" +msgstr "Aling kilos ang dapat tanggapin?" + +#: editor/dependency_editor.cpp +msgid "Fix Dependencies" +msgstr "Ayusin Ang Mga Kaasahan." + +#: editor/dependency_editor.cpp +msgid "Errors loading!" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Permanently delete %d item(s)? (No undo!)" +msgstr "" + +#: editor/dependency_editor.cpp +msgid "Show Dependencies" +msgstr "Ipakita Ang Mga Kaasahan" + +#: editor/dependency_editor.cpp +msgid "Orphan Resource Explorer" +msgstr "" + +#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp +msgid "Delete" +msgstr "Alisin" + +#: editor/dependency_editor.cpp +msgid "Owns" +msgstr "Ay Minamayari Ang" + +#: editor/dependency_editor.cpp +msgid "Resources Without Explicit Ownership:" +msgstr "Mga Resources na Walang Tiyak na Pagmamayari:" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Key" +msgstr "" + +#: editor/dictionary_property_edit.cpp +msgid "Change Dictionary Value" +msgstr "" + +#: editor/editor_about.cpp +msgid "Thanks from the Godot community!" +msgstr "Salamat mula sa komunidad ng Godot!" + +#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp +msgid "Click to copy." +msgstr "Pindutin para kopyahin." + +#: editor/editor_about.cpp +msgid "Godot Engine contributors" +msgstr "Mga Tagapagambag ng Godot Engine" + +#: editor/editor_about.cpp +msgid "Project Founders" +msgstr "Mga Tagapagtatag ng Proyekto" + +#: editor/editor_about.cpp +msgid "Lead Developer" +msgstr "Pangunahing Developer" + +#. TRANSLATORS: This refers to a job title. +#. The trailing space is used to distinguish with the project list application, +#. you do not have to keep it in your translation. +#: editor/editor_about.cpp +msgid "Project Manager " +msgstr "Tagapangasiwa ng Proyekto " + +#: editor/editor_about.cpp +msgid "Developers" +msgstr "Mga Developers" + +#: editor/editor_about.cpp +msgid "Authors" +msgstr "Mga May-akda" + +#: editor/editor_about.cpp +msgid "Platinum Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Mini Sponsors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Gold Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Silver Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Bronze Donors" +msgstr "" + +#: editor/editor_about.cpp +msgid "Donors" +msgstr "Mga Nagabuloy" + +#: editor/editor_about.cpp +msgid "License" +msgstr "Lisensya" + +#: editor/editor_about.cpp +msgid "Third-party Licenses" +msgstr "Mga Lisensyang Third-party" + +#: editor/editor_about.cpp +msgid "" +"Godot Engine relies on a number of third-party free and open source " +"libraries, all compatible with the terms of its MIT license. The following " +"is an exhaustive list of all such third-party components with their " +"respective copyright statements and license terms." +msgstr "" + +#: editor/editor_about.cpp +msgid "All Components" +msgstr "Lahat ng Mga Bahagi" + +#: editor/editor_about.cpp +msgid "Components" +msgstr "Mga Bahagi" + +#: editor/editor_about.cpp +msgid "Licenses" +msgstr "Mga Lisensya" + +#: editor/editor_asset_installer.cpp +msgid "Error opening asset file for \"%s\" (not in ZIP format)." +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "%s (already exists)" +msgstr "%s (mayroon na)" + +#: editor/editor_asset_installer.cpp +msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Contents of asset \"%s\" - No files conflict with your project:" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "Uncompressing Assets" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "The following files failed extraction from asset \"%s\":" +msgstr "" + +#: editor/editor_asset_installer.cpp +msgid "(and %s more files)" +msgstr "(at %s pang mga file)" + +#: editor/editor_asset_installer.cpp +msgid "Asset \"%s\" installed successfully!" +msgstr "" + +#: editor/editor_asset_installer.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Success!" +msgstr "Tagumpay!" + +#: editor/editor_asset_installer.cpp editor/editor_node.cpp +msgid "Install" +msgstr "I-install" + +#: editor/editor_asset_installer.cpp +msgid "Asset Installer" +msgstr "Taga-install ng mga Asset" + +#: editor/editor_audio_buses.cpp +msgid "Speakers" +msgstr "Mga Speaker" + +#: editor/editor_audio_buses.cpp +msgid "Add Effect" +msgstr "Magdagdag ng Effect" + +#: editor/editor_audio_buses.cpp +msgid "Rename Audio Bus" +msgstr "Palitan ang pangalan ng Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Change Audio Bus Volume" +msgstr "Ibahin ang Kaingayan ng Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Solo" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Mute" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Toggle Audio Bus Bypass Effects" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Select Audio Bus Send" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Move Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Bus Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Drag & drop to rearrange." +msgstr "I-drag & i-hulog para ayusin." + +#: editor/editor_audio_buses.cpp +msgid "Solo" +msgstr "Naka-solo" + +#: editor/editor_audio_buses.cpp +msgid "Mute" +msgstr "Nakatahimik" + +#: editor/editor_audio_buses.cpp +msgid "Bypass" +msgstr "Pasikot-sikot" + +#: editor/editor_audio_buses.cpp +msgid "Bus Options" +msgstr "" + +#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Duplicate" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Reset Volume" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Delete Effect" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Audio" +msgstr "Tunog (Audio)" + +#: editor/editor_audio_buses.cpp +msgid "Add Audio Bus" +msgstr "Magdagdag ng Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Master bus can't be deleted!" +msgstr "Hindi maaring alisin ang master bus!" + +#: editor/editor_audio_buses.cpp +msgid "Delete Audio Bus" +msgstr "Alisin ang Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Duplicate Audio Bus" +msgstr "Doblehin ang Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Reset Bus Volume" +msgstr "Ibalik sa Dati Ang Kaingayan ng Bus" + +#: editor/editor_audio_buses.cpp +msgid "Move Audio Bus" +msgstr "Ilipat ang Audio Bus" + +#: editor/editor_audio_buses.cpp +msgid "Save Audio Bus Layout As..." +msgstr "I-save Ang Ayos ng Audio Bus Bilang..." + +#: editor/editor_audio_buses.cpp +msgid "Location for New Layout..." +msgstr "Lokasyon para sa Bagong Layout..." + +#: editor/editor_audio_buses.cpp +msgid "Open Audio Bus Layout" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "There is no '%s' file." +msgstr "Walang file na '%s'." + +#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp +msgid "Layout" +msgstr "Kaayusan" + +#: editor/editor_audio_buses.cpp +msgid "Invalid file, not an audio bus layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Error saving file: %s" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add Bus" +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Add a new Audio Bus to this layout." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/editor_resource_picker.cpp +#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Load" +msgstr "Kumarga" + +#: editor/editor_audio_buses.cpp +msgid "Load an existing Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Save As" +msgstr "I-save Bilang" + +#: editor/editor_audio_buses.cpp +msgid "Save this Bus Layout to a file." +msgstr "" + +#: editor/editor_audio_buses.cpp editor/import_dock.cpp +msgid "Load Default" +msgstr "I-load ang Karaniwan" + +#: editor/editor_audio_buses.cpp +msgid "Load the default Bus Layout." +msgstr "" + +#: editor/editor_audio_buses.cpp +msgid "Create a new Bus Layout." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Invalid name." +msgstr "Di-wastong pangalan." + +#: editor/editor_autoload_settings.cpp +msgid "Valid characters:" +msgstr "Mga Pinapayagang Karakter:" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing engine class name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing built-in type name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Must not collide with an existing global constant name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Keyword cannot be used as an autoload name." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Autoload '%s' already exists!" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Rename Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Toggle AutoLoad Globals" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Move Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Remove Autoload" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp +msgid "Enable" +msgstr "Paganahin" + +#: editor/editor_autoload_settings.cpp +msgid "Rearrange Autoloads" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Can't add autoload:" +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "%s is an invalid path. File does not exist." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "%s is an invalid path. Not in resource path (res://)." +msgstr "" + +#: editor/editor_autoload_settings.cpp +msgid "Add AutoLoad" +msgstr "" + +#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp +msgid "Path:" +msgstr "Kinaroroonan:" + +#: editor/editor_autoload_settings.cpp +msgid "Node Name:" +msgstr "Pangalan ng Node:" + +#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp +#: editor/editor_plugin_settings.cpp editor/editor_profiler.cpp +#: editor/project_manager.cpp editor/settings_config_dialog.cpp +msgid "Name" +msgstr "Pangalan" + +#: editor/editor_autoload_settings.cpp +msgid "Global Variable" +msgstr "Pangkalahatang (Global) Variable" + +#: editor/editor_data.cpp +msgid "Paste Params" +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating Scene" +msgstr "" + +#: editor/editor_data.cpp +msgid "Storing local changes..." +msgstr "" + +#: editor/editor_data.cpp +msgid "Updating scene..." +msgstr "" + +#: editor/editor_data.cpp editor/editor_resource_picker.cpp +msgid "[empty]" +msgstr "[wala]" + +#: editor/editor_data.cpp +msgid "[unsaved]" +msgstr "[di-nakasave]" + +#: editor/editor_dir_dialog.cpp +msgid "Please select a base directory first." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose a Directory" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp editor/project_manager.cpp +#: scene/gui/file_dialog.cpp +msgid "Create Folder" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp +msgid "Name:" +msgstr "" + +#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp +#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp +msgid "Could not create folder." +msgstr "" + +#: editor/editor_dir_dialog.cpp +msgid "Choose" +msgstr "Pumili" + +#: editor/editor_export.cpp +msgid "Storing File:" +msgstr "Inimpok ang File:" + +#: editor/editor_export.cpp +msgid "No export template found at the expected path:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Packing" +msgstr "Iniimpake" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " +"Etc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC2' texture compression for GLES3. Enable " +"'Import Etc 2' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC' texture compression for the driver fallback " +"to GLES2.\n" +"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " +"Enabled'." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'PVRTC' texture compression for GLES2. Enable " +"'Import Pvrtc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " +"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." +msgstr "" + +#: editor/editor_export.cpp +msgid "" +"Target platform requires 'PVRTC' texture compression for the driver fallback " +"to GLES2.\n" +"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback " +"Enabled'." +msgstr "" + +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp platform/uwp/export/export.cpp +msgid "Custom debug template not found." +msgstr "" + +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp platform/uwp/export/export.cpp +msgid "Custom release template not found." +msgstr "" + +#: editor/editor_export.cpp platform/javascript/export/export.cpp +msgid "Template file not found:" +msgstr "" + +#: editor/editor_export.cpp +msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "3D Editor" +msgstr "3D Editor" + +#: editor/editor_feature_profile.cpp +msgid "Script Editor" +msgstr "Editor ng Script" + +#: editor/editor_feature_profile.cpp +msgid "Asset Library" +msgstr "Silid-Assetan" + +#: editor/editor_feature_profile.cpp +msgid "Scene Tree Editing" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Node Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "FileSystem Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Import Dock" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Allows to view and edit 3D scenes." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Allows to edit scripts using the integrated script editor." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Provides built-in access to the Asset Library." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Allows editing the node hierarchy in the Scene dock." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "" +"Allows to work with signals and groups of the node selected in the Scene " +"dock." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Allows to browse the local file system via a dedicated dock." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "" +"Allows to configure import settings for individual assets. Requires the " +"FileSystem dock to function." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "(current)" +msgstr "(nakatutok)" + +#: editor/editor_feature_profile.cpp +msgid "(none)" +msgstr "(wala)" + +#: editor/editor_feature_profile.cpp +msgid "Remove currently selected profile, '%s'? Cannot be undone." +msgstr "Alisin ang napiling profile na '%s'? Hindi na mababawi." + +#: editor/editor_feature_profile.cpp +msgid "Profile must be a valid filename and must not contain '.'" +msgstr "Ang profile ay dapat may wastong pangalan at walang '.'" + +#: editor/editor_feature_profile.cpp +msgid "Profile with this name already exists." +msgstr "Mayroon nang profile na may ganitong pangalan." + +#: editor/editor_feature_profile.cpp +msgid "(Editor Disabled, Properties Disabled)" +msgstr "" +"(Hindi pinapagana ang Editor, Ang Tala ng Katangian Ay Hindi Rin Pinapagana)" + +#: editor/editor_feature_profile.cpp +msgid "(Properties Disabled)" +msgstr "(Hindi Pinapagana Ang Tala ng Mga Katangian)" + +#: editor/editor_feature_profile.cpp +msgid "(Editor Disabled)" +msgstr "(Hindi Pinapagana Ang Editor)" + +#: editor/editor_feature_profile.cpp +msgid "Class Options:" +msgstr "Mga Kaayusan ng Class:" + +#: editor/editor_feature_profile.cpp +msgid "Enable Contextual Editor" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Class Properties:" +msgstr "Katangian ng Class:" + +#: editor/editor_feature_profile.cpp +msgid "Main Features:" +msgstr "Pangunahing Mga Tampok:" + +#: editor/editor_feature_profile.cpp +msgid "Nodes and Classes:" +msgstr "Mga Node at Class:" + +#: editor/editor_feature_profile.cpp +msgid "File '%s' format is invalid, import aborted." +msgstr "Hindi wasto ang format ng '%s', Ipinagpaliban ang pag-aangkat." + +#: editor/editor_feature_profile.cpp +msgid "" +"Profile '%s' already exists. Remove it first before importing, import " +"aborted." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Error saving profile to path: '%s'." +msgstr "Hindi maisalba ang profile sa kinaroroonang: '%s'." + +#: editor/editor_feature_profile.cpp +msgid "Reset to Default" +msgstr "Ibalik sa Dati" + +#: editor/editor_feature_profile.cpp +msgid "Current Profile:" +msgstr "Nakatutok na Profile:" + +#: editor/editor_feature_profile.cpp +msgid "Create Profile" +msgstr "Gumawa ng Profile" + +#: editor/editor_feature_profile.cpp +msgid "Remove Profile" +msgstr "Alisin ang Profile" + +#: editor/editor_feature_profile.cpp +msgid "Available Profiles:" +msgstr "Magagamit na mga Profile:" + +#: editor/editor_feature_profile.cpp +msgid "Make Current" +msgstr "" + +#: editor/editor_feature_profile.cpp editor/editor_node.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp +msgid "Import" +msgstr "Magangkat" + +#: editor/editor_feature_profile.cpp editor/project_export.cpp +msgid "Export" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Configure Selected Profile:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Extra Options:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Create or import a profile to edit available classes and properties." +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "New profile name:" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Godot Feature Profile" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Import Profile(s)" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Export Profile" +msgstr "" + +#: editor/editor_feature_profile.cpp +msgid "Manage Editor Feature Profiles" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select Current Folder" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File exists, overwrite?" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Select This Folder" +msgstr "Piliin ang Folder na Ito" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Copy Path" +msgstr "Kopyahin ang Kinaroroonan" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "Open in File Manager" +msgstr "Buksan sa File Manager" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/filesystem_dock.cpp editor/project_manager.cpp +msgid "Show in File Manager" +msgstr "Ipakita sa File Manager" + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "New Folder..." +msgstr "Bagong Folder..." + +#: editor/editor_file_dialog.cpp editor/find_in_files.cpp +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Refresh" +msgstr "I-refresh" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Recognized" +msgstr "Nakilala Lahat" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "All Files (*)" +msgstr "Lahat ng Files (*)" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File" +msgstr "Buksan ang File" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open File(s)" +msgstr "Buksan Ang (Mga) File" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a Directory" +msgstr "Bumukas ng Directory" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Open a File or Directory" +msgstr "Bumukas ng File o Directory" + +#: editor/editor_file_dialog.cpp editor/editor_node.cpp +#: editor/editor_resource_picker.cpp editor/import_defaults_editor.cpp +#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp scene/gui/file_dialog.cpp +msgid "Save" +msgstr "I-save" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Save a File" +msgstr "Magsave ng File" + +#: editor/editor_file_dialog.cpp +msgid "Go Back" +msgstr "Bumalik" + +#: editor/editor_file_dialog.cpp +msgid "Go Forward" +msgstr "Umusad" + +#: editor/editor_file_dialog.cpp +msgid "Go Up" +msgstr "Tumaas" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Hidden Files" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Favorite" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Toggle Mode" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Focus Path" +msgstr "" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Up" +msgstr "Ilipat Pataas Ang Paborito" + +#: editor/editor_file_dialog.cpp +msgid "Move Favorite Down" +msgstr "Ilipat Pababa ang Paborito" + +#: editor/editor_file_dialog.cpp +msgid "Go to previous folder." +msgstr "Pumunta sa Nakaraang Folder." + +#: editor/editor_file_dialog.cpp +msgid "Go to next folder." +msgstr "Pumunta sa susunod na folder." + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Go to parent folder." +msgstr "Pumunta sa ugat na folder." + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Refresh files." +msgstr "I-refresh ang mga file." + +#: editor/editor_file_dialog.cpp +msgid "(Un)favorite current folder." +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Toggle the visibility of hidden files." +msgstr "I-toggle ang pagkakakita ng mga nakatagong file." + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "View items as a grid of thumbnails." +msgstr "Tingnan ang mga items na nakabalaylay ang mga thumbnail." + +#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp +msgid "View items as a list." +msgstr "Tingnan ang mga item bilang talaan." + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "Directories & Files:" +msgstr "" + +#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp +#: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Preview:" +msgstr "" + +#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp +msgid "File:" +msgstr "File:" + +#: editor/editor_file_system.cpp +msgid "ScanSources" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "" +"There are multiple importers for different types pointing to file %s, import " +"aborted" +msgstr "" + +#: editor/editor_file_system.cpp +msgid "(Re)Importing Assets" +msgstr "Inaangkat muli ang mga Asset" + +#: editor/editor_help.cpp +msgid "Top" +msgstr "Nasaitaas" + +#: editor/editor_help.cpp +msgid "Class:" +msgstr "Class:" + +#: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp +msgid "Inherits:" +msgstr "" + +#: editor/editor_help.cpp +msgid "Inherited by:" +msgstr "Pinagmana ng:" + +#: editor/editor_help.cpp +msgid "Description" +msgstr "Paglalarawan" + +#: editor/editor_help.cpp +msgid "Online Tutorials" +msgstr "Mga Tutorial sa Online" + +#: editor/editor_help.cpp +msgid "Properties" +msgstr "Mga Katangian" + +#: editor/editor_help.cpp +msgid "override:" +msgstr "ipagpalit:" + +#: editor/editor_help.cpp +msgid "default:" +msgstr "karaniwan:" + +#: editor/editor_help.cpp +msgid "Methods" +msgstr "Mga Method" + +#: editor/editor_help.cpp +msgid "Theme Properties" +msgstr "Mga Katangian ng Theme" + +#: editor/editor_help.cpp +msgid "Enumerations" +msgstr "Mga Enumerasyon" + +#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Constants" +msgstr "Mga Konstant" + +#: editor/editor_help.cpp +msgid "Property Descriptions" +msgstr "Mga Paglalarawan ng Katangian" + +#: editor/editor_help.cpp +msgid "(value)" +msgstr "(halaga)" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this property. Please help us by " +"[color=$color][url=$url]contributing one[/url][/color]!" +msgstr "" +"Kasalukuyang walang panglalarawan sa katangiang ito. Maaring tulungan kami " +"sa pamamagitan ng [color=$color][url=$url]pag-kokontribyut[/url][/color]!" + +#: editor/editor_help.cpp +msgid "Method Descriptions" +msgstr "Panglalarawan ng mga Method" + +#: editor/editor_help.cpp +msgid "" +"There is currently no description for this method. Please help us by [color=" +"$color][url=$url]contributing one[/url][/color]!" +msgstr "" +"Kasalukuyang walang paglalarawan sa method na ito. Maaring tulungan kami sa " +"pamamagitan ng [color=$color][url=$url]pag-kontribyut[/url][/color]!" + +#: editor/editor_help_search.cpp editor/editor_node.cpp +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Help" +msgstr "Maghanap sa Sanggunian" + +#: editor/editor_help_search.cpp +msgid "Case Sensitive" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Show Hierarchy" +msgstr "Ipakita ang Halpunuan" + +#: editor/editor_help_search.cpp +msgid "Display All" +msgstr "Ipakita Lahat" + +#: editor/editor_help_search.cpp +msgid "Classes Only" +msgstr "Mga Class Lang" + +#: editor/editor_help_search.cpp +msgid "Methods Only" +msgstr "Mga Method Lang" + +#: editor/editor_help_search.cpp +msgid "Signals Only" +msgstr "Mga Hudyat Lang" + +#: editor/editor_help_search.cpp +msgid "Constants Only" +msgstr "Mga Konstant Lang" + +#: editor/editor_help_search.cpp +msgid "Properties Only" +msgstr "Mga Katangian Lang" + +#: editor/editor_help_search.cpp +msgid "Theme Properties Only" +msgstr "" + +#: editor/editor_help_search.cpp +msgid "Member Type" +msgstr "Uri ng Kasapi" + +#: editor/editor_help_search.cpp +msgid "Class" +msgstr "Class" + +#: editor/editor_help_search.cpp +msgid "Method" +msgstr "Method" + +#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp +msgid "Signal" +msgstr "Hudyat" + +#: editor/editor_help_search.cpp +msgid "Constant" +msgstr "Constant" + +#: editor/editor_help_search.cpp +msgid "Property" +msgstr "Katangian" + +#: editor/editor_help_search.cpp +msgid "Theme Property" +msgstr "" + +#: editor/editor_inspector.cpp editor/project_settings_editor.cpp +msgid "Property:" +msgstr "" + +#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Set %s" +msgstr "Itakda ang %s" + +#: editor/editor_inspector.cpp +msgid "Set Multiple:" +msgstr "" + +#: editor/editor_log.cpp +msgid "Output:" +msgstr "Kalabasan:" + +#: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Copy Selection" +msgstr "Kopyahin Ang Pinagpipilian" + +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_resource_picker.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/property_editor.cpp editor/scene_tree_dock.cpp +#: editor/script_editor_debugger.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Clear" +msgstr "Linisin" + +#: editor/editor_log.cpp +msgid "Clear Output" +msgstr "Linisin ang Kalabasan" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Huminto" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Magsimula" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Baba" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Taas" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Padating na RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "Padating na RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "Paluwas na RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "Paluwas na RSET" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "New Window" +msgstr "Bagong Tabing" + +#: editor/editor_node.cpp +msgid "" +"Spins when the editor window redraws.\n" +"Update Continuously is enabled, which can increase power usage. Click to " +"disable it." +msgstr "" + +#: editor/editor_node.cpp +msgid "Spins when the editor window redraws." +msgstr "" + +#: editor/editor_node.cpp +msgid "Imported resources can't be saved." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp scene/gui/dialogs.cpp +msgid "OK" +msgstr "OK" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Error saving resource!" +msgstr "Hindi ma-save ang resource!" + +#: editor/editor_node.cpp +msgid "" +"This resource can't be saved because it does not belong to the edited scene. " +"Make it unique first." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Save Resource As..." +msgstr "I-save ang Resource Bilang..." + +#: editor/editor_node.cpp +msgid "Can't open file for writing:" +msgstr "Hindi mabuksan ang file para sa pagsusulat:" + +#: editor/editor_node.cpp +msgid "Requested file format unknown:" +msgstr "Hindi ma-tiyak ang porma ng file na hinihiling:" + +#: editor/editor_node.cpp +msgid "Error while saving." +msgstr "Nabigo habang nagsesave." + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Can't open '%s'. The file could have been moved or deleted." +msgstr "Hindi mabuksan ang '%s'. Maaring nalipat o nabura ang file." + +#: editor/editor_node.cpp +msgid "Error while parsing '%s'." +msgstr "Nabigo habang sinisiyasat ang '%s'." + +#: editor/editor_node.cpp +msgid "Unexpected end of file '%s'." +msgstr "Hindi inaasahang hulihan ng file na '%s'." + +#: editor/editor_node.cpp +msgid "Missing '%s' or its dependencies." +msgstr "" + +#: editor/editor_node.cpp +msgid "Error while loading '%s'." +msgstr "Nabigo habang kinakarga ang '%s'." + +#: editor/editor_node.cpp +msgid "Saving Scene" +msgstr "Sinasalba ang Eksena" + +#: editor/editor_node.cpp +msgid "Analyzing" +msgstr "Sinusuri" + +#: editor/editor_node.cpp +msgid "Creating Thumbnail" +msgstr "Ginagawa ang Thumbnail" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a tree root." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " +"be satisfied." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not save one or more scenes!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save All Scenes" +msgstr "" + +#: editor/editor_node.cpp editor/scene_tree_dock.cpp +msgid "Can't overwrite scene that is still open!" +msgstr "Hindi ma-overwrite ang mga bukas pa ring eksena!" + +#: editor/editor_node.cpp +msgid "Can't load MeshLibrary for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving MeshLibrary!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't load TileSet for merging!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Error saving TileSet!" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"An error occurred while trying to save the editor layout.\n" +"Make sure the editor's user data path is writable." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Default editor layout overridden.\n" +"To restore the Default layout to its base settings, use the Delete Layout " +"option and delete the Default layout." +msgstr "" + +#: editor/editor_node.cpp +msgid "Layout name not found!" +msgstr "" + +#: editor/editor_node.cpp +msgid "Restored the Default layout to its base settings." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was imported, so it's not editable.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource belongs to a scene that was instanced or inherited.\n" +"Changes to it won't be kept when saving the current scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This resource was imported, so it's not editable. Change its settings in the " +"import panel and then re-import." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This scene was imported, so changes to it won't be kept.\n" +"Instancing it or inheriting will allow making changes to it.\n" +"Please read the documentation relevant to importing scenes to better " +"understand this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This is a remote object, so changes to it won't be kept.\n" +"Please read the documentation relevant to debugging to better understand " +"this workflow." +msgstr "" + +#: editor/editor_node.cpp +msgid "There is no defined scene to run." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save scene before running..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Could not start subprocess!" +msgstr "" + +#: editor/editor_node.cpp editor/filesystem_dock.cpp +msgid "Open Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Base Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Open Scene..." +msgstr "Mabilisang Magbukas ng Eksena..." + +#: editor/editor_node.cpp +msgid "Quick Open Script..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Close" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to '%s' before closing?" +msgstr "" + +#: editor/editor_node.cpp +msgid "%s no longer exists! Please specify a new save location." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"The current scene has no root node, but %d modified external resource(s) " +"were saved anyway." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"A root node is required to save the scene. You can add a root node using the " +"Scene tree dock." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene As..." +msgstr "" + +#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp +msgid "This operation can't be done without a scene." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Mesh Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a root node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Export Tile Set" +msgstr "" + +#: editor/editor_node.cpp +msgid "This operation can't be done without a selected node." +msgstr "" + +#: editor/editor_node.cpp +msgid "Current scene not saved. Open anyway?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "Ibalik: %s" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't reload a scene that was never saved." +msgstr "" + +#: editor/editor_node.cpp +msgid "Reload Saved Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"The current scene has unsaved changes.\n" +"Reload the saved scene anyway? This action cannot be undone." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quick Run Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Yes" +msgstr "Oo" + +#: editor/editor_node.cpp +msgid "Exit the editor?" +msgstr "Umalis sa editor?" + +#: editor/editor_node.cpp +msgid "Open Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save & Quit" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before quitting?" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save changes to the following scene(s) before opening Project Manager?" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This option is deprecated. Situations where refresh must be forced are now " +"considered a bug. Please report." +msgstr "" + +#: editor/editor_node.cpp +msgid "Pick a Main Scene" +msgstr "Pumili ng Pangunahing Eksena" + +#: editor/editor_node.cpp +msgid "Close Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Reopen Closed Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to enable addon plugin at: '%s' parsing of config failed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to find script field for addon plugin at: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s'." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s'. This might be due to a code " +"error in that script.\n" +"Disabling the addon at '%s' to prevent further errors." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Unable to load addon script from path: '%s' Base type is not EditorPlugin." +msgstr "" + +#: editor/editor_node.cpp +msgid "Unable to load addon script from path: '%s' Script is not in tool mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Scene '%s' was automatically imported, so it can't be modified.\n" +"To make changes to it, a new inherited scene can be created." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Error loading scene, it must be inside the project path. Use 'Import' to " +"open the scene, then save it inside the project path." +msgstr "" + +#: editor/editor_node.cpp +msgid "Scene '%s' has broken dependencies:" +msgstr "" + +#: editor/editor_node.cpp +msgid "Clear Recent Scenes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"No main scene has ever been defined, select one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' does not exist, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"Selected scene '%s' is not a scene file, select a valid one?\n" +"You can change it later in \"Project Settings\" under the 'application' " +"category." +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Delete Layout" +msgstr "Alisin Ang Pagkaayos" + +#: editor/editor_node.cpp editor/import_dock.cpp +#: editor/script_create_dialog.cpp +msgid "Default" +msgstr "Karaniwan" + +#: editor/editor_node.cpp editor/editor_resource_picker.cpp +#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp +msgid "Show in FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play This Scene" +msgstr "Ipalabas Ang Eksenang Ito" + +#: editor/editor_node.cpp +msgid "Close Tab" +msgstr "Isara ang Tab" + +#: editor/editor_node.cpp +msgid "Undo Close Tab" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Close Other Tabs" +msgstr "Isara Ang Ibang Mga Tab" + +#: editor/editor_node.cpp +msgid "Close Tabs to the Right" +msgstr "Isara Ang Mga Tab Sa Kanan" + +#: editor/editor_node.cpp +msgid "Close All Tabs" +msgstr "Isara Lahat ng Tabs" + +#: editor/editor_node.cpp +msgid "Switch Scene Tab" +msgstr "Palitan Ang Tab ng Eksena" + +#: editor/editor_node.cpp +msgid "%d more files or folders" +msgstr "%d pang mga file o mga folder" + +#: editor/editor_node.cpp +msgid "%d more folders" +msgstr "%d pang mga folder" + +#: editor/editor_node.cpp +msgid "%d more files" +msgstr "%d mga file" + +#: editor/editor_node.cpp +msgid "Dock Position" +msgstr "Idaong Ang Posisyon" + +#: editor/editor_node.cpp +msgid "Distraction Free Mode" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle distraction-free mode." +msgstr "" + +#: editor/editor_node.cpp +msgid "Add a new scene." +msgstr "Magdagdag ng panibagong eksena." + +#: editor/editor_node.cpp +msgid "Scene" +msgstr "Eksena" + +#: editor/editor_node.cpp +msgid "Go to previously opened scene." +msgstr "Bumalik sa dating binuksang eksena." + +#: editor/editor_node.cpp +msgid "Copy Text" +msgstr "Kopyahin Ang Nakasulat" + +#: editor/editor_node.cpp +msgid "Next tab" +msgstr "Susunod na tab" + +#: editor/editor_node.cpp +msgid "Previous tab" +msgstr "" + +#: editor/editor_node.cpp +msgid "Filter Files..." +msgstr "Magsala ng mga File..." + +#: editor/editor_node.cpp +msgid "Operations with scene files." +msgstr "" + +#: editor/editor_node.cpp +msgid "New Scene" +msgstr "Panibagong Eksena" + +#: editor/editor_node.cpp +msgid "New Inherited Scene..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Scene..." +msgstr "Magbukas ng Eksena..." + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +msgid "Open Recent" +msgstr "" + +#: editor/editor_node.cpp +msgid "Save Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Convert To..." +msgstr "Palitan Sa..." + +#: editor/editor_node.cpp +msgid "MeshLibrary..." +msgstr "MeshLibrary..." + +#: editor/editor_node.cpp +msgid "TileSet..." +msgstr "TileSet..." + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Undo" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Redo" +msgstr "" + +#: editor/editor_node.cpp +msgid "Miscellaneous project or scene-wide tools." +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +#: editor/script_create_dialog.cpp +msgid "Project" +msgstr "Proyekto" + +#: editor/editor_node.cpp +msgid "Project Settings..." +msgstr "Kaayusan ng Proyekto..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Pagmamahala ng Bersyon" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Export..." +msgstr "Magluwas..." + +#: editor/editor_node.cpp +msgid "Install Android Build Template..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Project Data Folder" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp +msgid "Tools" +msgstr "Mga Kagamitan" + +#: editor/editor_node.cpp +msgid "Orphan Resource Explorer..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Reload Current Project" +msgstr "" + +#: editor/editor_node.cpp +msgid "Quit to Project List" +msgstr "Umuwi sa Talaproyektuhan" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/project_export.cpp +msgid "Debug" +msgstr "Debug" + +#: editor/editor_node.cpp +msgid "Deploy with Remote Debug" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, using one-click deploy will make the executable " +"attempt to connect to this computer's IP so the running project can be " +"debugged.\n" +"This option is intended to be used for remote debugging (typically with a " +"mobile device).\n" +"You don't need to enable it to use the GDScript debugger locally." +msgstr "" + +#: editor/editor_node.cpp +msgid "Small Deploy with Network Filesystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, using one-click deploy for Android will only " +"export an executable without the project data.\n" +"The filesystem will be provided from the project by the editor over the " +"network.\n" +"On Android, deploying will use the USB cable for faster performance. This " +"option speeds up testing for projects with large assets." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Collision Shapes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, collision shapes and raycast nodes (for 2D and " +"3D) will be visible in the running project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Visible Navigation" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, navigation meshes and polygons will be visible " +"in the running project." +msgstr "" + +#: editor/editor_node.cpp +msgid "Synchronize Scene Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, any changes made to the scene in the editor " +"will be replicated in the running project.\n" +"When used remotely on a device, this is more efficient when the network " +"filesystem option is enabled." +msgstr "" + +#: editor/editor_node.cpp +msgid "Synchronize Script Changes" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"When this option is enabled, any script that is saved will be reloaded in " +"the running project.\n" +"When used remotely on a device, this is more efficient when the network " +"filesystem option is enabled." +msgstr "" + +#: editor/editor_node.cpp editor/script_create_dialog.cpp +msgid "Editor" +msgstr "Editor" + +#: editor/editor_node.cpp +msgid "Editor Settings..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Editor Layout" +msgstr "" + +#: editor/editor_node.cpp +msgid "Take Screenshot" +msgstr "" + +#: editor/editor_node.cpp +msgid "Screenshots are stored in the Editor Data/Settings Folder." +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle Fullscreen" +msgstr "" + +#: editor/editor_node.cpp +msgid "Toggle System Console" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data/Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Data Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Editor Settings Folder" +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Editor Features..." +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Export Templates..." +msgstr "" + +#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp +msgid "Help" +msgstr "Tulong" + +#: editor/editor_node.cpp +msgid "Online Documentation" +msgstr "" + +#: editor/editor_node.cpp +msgid "Questions & Answers" +msgstr "Mga Katanungan at Kasagutan" + +#: editor/editor_node.cpp +msgid "Report a Bug" +msgstr "Umulat ng Bug" + +#: editor/editor_node.cpp +msgid "Suggest a Feature" +msgstr "Magmungkahi ng Tampok" + +#: editor/editor_node.cpp +msgid "Send Docs Feedback" +msgstr "Magpadala ng Puna Ukol sa Docs" + +#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp +msgid "Community" +msgstr "Pamayanan" + +#: editor/editor_node.cpp +msgid "About Godot" +msgstr "Tungkol sa Godot" + +#: editor/editor_node.cpp +msgid "Support Godot Development" +msgstr "" + +#: editor/editor_node.cpp +msgid "Play the project." +msgstr "Ipalabas ang proyekto." + +#: editor/editor_node.cpp +msgid "Play" +msgstr "Ipalabas" + +#: editor/editor_node.cpp +msgid "Pause the scene execution for debugging." +msgstr "Ihinto muna ang pagpapalabas ng eksena para sa pagdebug." + +#: editor/editor_node.cpp +msgid "Pause Scene" +msgstr "Ihinto muna ang Eksena" + +#: editor/editor_node.cpp +msgid "Stop the scene." +msgstr "Itigil Ang Pagpapalabas ng Eksena." + +#: editor/editor_node.cpp +msgid "Play the edited scene." +msgstr "Ipalabas ang nabagong eksena." + +#: editor/editor_node.cpp +msgid "Play Scene" +msgstr "Ipalabas Ang Eksena" + +#: editor/editor_node.cpp +msgid "Play custom scene" +msgstr "Ipalabas ang pasadyang eksena" + +#: editor/editor_node.cpp +msgid "Play Custom Scene" +msgstr "" + +#: editor/editor_node.cpp +msgid "Changing the video driver requires restarting the editor." +msgstr "" + +#: editor/editor_node.cpp editor/project_settings_editor.cpp +#: editor/settings_config_dialog.cpp +msgid "Save & Restart" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update Continuously" +msgstr "" + +#: editor/editor_node.cpp +msgid "Update When Changed" +msgstr "" + +#: editor/editor_node.cpp +msgid "Hide Update Spinner" +msgstr "" + +#: editor/editor_node.cpp +msgid "FileSystem" +msgstr "" + +#: editor/editor_node.cpp +msgid "Inspector" +msgstr "" + +#: editor/editor_node.cpp +msgid "Expand Bottom Panel" +msgstr "" + +#: editor/editor_node.cpp +msgid "Output" +msgstr "" + +#: editor/editor_node.cpp +msgid "Don't Save" +msgstr "" + +#: editor/editor_node.cpp +msgid "Android build template is missing, please install relevant templates." +msgstr "" + +#: editor/editor_node.cpp +msgid "Manage Templates" +msgstr "" + +#: editor/editor_node.cpp +msgid "Install from file" +msgstr "" + +#: editor/editor_node.cpp +msgid "Select android sources file" +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." +msgstr "" + +#: editor/editor_node.cpp +msgid "" +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." +msgstr "" + +#: editor/editor_node.cpp +msgid "Import Templates From ZIP File" +msgstr "Magankat ng mga Template mula sa ZIP File" + +#: editor/editor_node.cpp +msgid "Template Package" +msgstr "Pakete ng Template" + +#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp +msgid "Export Library" +msgstr "Iluwas ang Library" + +#: editor/editor_node.cpp +msgid "Merge With Existing" +msgstr "Ipagsama Sa Mga Umiiral" + +#: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "Applayan ng MeshInstance Transform" + +#: editor/editor_node.cpp +msgid "Open & Run a Script" +msgstr "Magbukas at magpatakbo ng skrip" + +#: editor/editor_node.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Reload" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Resave" +msgstr "Isalba muli" + +#: editor/editor_node.cpp +msgid "New Inherited" +msgstr "" + +#: editor/editor_node.cpp +msgid "Load Errors" +msgstr "Mga Kabugian Sa Pagloload" + +#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp +msgid "Select" +msgstr "Magpili" + +#: editor/editor_node.cpp +msgid "Select Current" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 2D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open 3D Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open Script Editor" +msgstr "" + +#: editor/editor_node.cpp editor/project_manager.cpp +msgid "Open Asset Library" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the next Editor" +msgstr "" + +#: editor/editor_node.cpp +msgid "Open the previous Editor" +msgstr "" + +#: editor/editor_node.h +msgid "Warning!" +msgstr "Babala!" + +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + +#: editor/editor_path.cpp +msgid "Open a list of sub-resources." +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Creating Mesh Previews" +msgstr "" + +#: editor/editor_plugin.cpp +msgid "Thumbnail..." +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Edit Plugin" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Installed Plugins:" +msgstr "" + +#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp +msgid "Update" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Version" +msgstr "" + +#: editor/editor_plugin_settings.cpp +msgid "Author" +msgstr "" + +#: editor/editor_plugin_settings.cpp +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Measure:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame Time (ms)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Average Time (ms)" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Physics Frame %" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Inclusive" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Self" +msgstr "Sarili" + +#: editor/editor_profiler.cpp +msgid "" +"Inclusive: Includes time from other functions called by this function.\n" +"Use this to spot bottlenecks.\n" +"\n" +"Self: Only count the time spent in the function itself, not in other " +"functions called by that function.\n" +"Use this to find individual functions to optimize." +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Frame #:" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Time" +msgstr "" + +#: editor/editor_profiler.cpp +msgid "Calls" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Edit Text:" +msgstr "Baguhin ang Text:" + +#: editor/editor_properties.cpp editor/script_create_dialog.cpp +msgid "On" +msgstr "Nakabukas" + +#: editor/editor_properties.cpp +msgid "Layer" +msgstr "" + +#: editor/editor_properties.cpp +msgid "Bit %d, value %d" +msgstr "" + +#: editor/editor_properties.cpp +msgid "[Empty]" +msgstr "[Puwang]" + +#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp +msgid "Assign..." +msgstr "" + +#: editor/editor_properties.cpp +msgid "Invalid RID" +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on resources saved as a file.\n" +"Resource needs to belong to a scene." +msgstr "" + +#: editor/editor_properties.cpp +msgid "" +"Can't create a ViewportTexture on this resource because it's not set as " +"local to scene.\n" +"Please switch on the 'local to scene' property on it (and all resources " +"containing it up to a node)." +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Pick a Viewport" +msgstr "" + +#: editor/editor_properties.cpp editor/property_editor.cpp +msgid "Selected node is not a Viewport!" +msgstr "" + +#: editor/editor_properties_array_dict.cpp +msgid "Size: " +msgstr "Laki: " + +#: editor/editor_properties_array_dict.cpp +msgid "Page: " +msgstr "Pahina: " + +#: editor/editor_properties_array_dict.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Item" +msgstr "Alisin ang Gamit" + +#: editor/editor_properties_array_dict.cpp +msgid "New Key:" +msgstr "Bagong Susi:" + +#: editor/editor_properties_array_dict.cpp +msgid "New Value:" +msgstr "Bagong Halaga:" + +#: editor/editor_properties_array_dict.cpp +msgid "Add Key/Value Pair" +msgstr "" + +#: editor/editor_resource_picker.cpp +msgid "" +"The selected resource (%s) does not match any type expected for this " +"property (%s)." +msgstr "" + +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + +#: editor/editor_resource_picker.cpp editor/property_editor.cpp +msgid "Make Unique" +msgstr "" + +#: editor/editor_resource_picker.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp +#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Paste" +msgstr "Idikit" + +#: editor/editor_resource_picker.cpp editor/property_editor.cpp +msgid "Convert to %s" +msgstr "" + +#: editor/editor_resource_picker.cpp editor/property_editor.cpp +msgid "New %s" +msgstr "" + +#: editor/editor_resource_picker.cpp editor/property_editor.cpp +msgid "New Script" +msgstr "" + +#: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + +#: editor/editor_run_native.cpp +msgid "" +"No runnable export preset found for this platform.\n" +"Please add a runnable preset in the Export menu or define an existing preset " +"as runnable." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Write your logic in the _run() method." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "There is an edited scene already." +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't instance script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the 'tool' keyword?" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Couldn't run script:" +msgstr "" + +#: editor/editor_run_script.cpp +msgid "Did you forget the '_run' method?" +msgstr "" + +#: editor/editor_spin_slider.cpp +msgid "Hold %s to round to integers. Hold Shift for more precise changes." +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Select Node(s) to Import" +msgstr "" + +#: editor/editor_sub_scene.cpp editor/project_manager.cpp +msgid "Browse" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Scene Path:" +msgstr "" + +#: editor/editor_sub_scene.cpp +msgid "Import From Node:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Open the folder containing these templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall these templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "There are no mirrors available." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Retrieving the mirror list..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Starting the download..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error requesting URL:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connecting to the mirror..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't resolve the requested address." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't connect to the mirror." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No response from the mirror." +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Request ended up in a redirect loop." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Request failed:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download complete; extracting templates..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Cannot remove temporary file:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"Templates installation failed.\n" +"The problematic templates archives can be found at '%s'." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error getting the list of mirrors." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error parsing JSON with the list of mirrors. Please report this issue!" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Best available mirror" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"No download links found for this version. Direct download is only available " +"for official releases." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Disconnected" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Resolving" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Resolve" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connecting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't Connect" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connected" +msgstr "" + +#: editor/export_template_manager.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Requesting..." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Downloading" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Connection Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "SSL Handshake Error" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Can't open the export templates file." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Invalid version.txt format inside the export templates file: %s." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "No version.txt found inside the export templates file." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Error creating path for extracting templates:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Extracting Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Importing:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Remove templates for the version '%s'?" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uncompressing Android Build Sources" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export Template Manager" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Current Version:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export templates are missing. Download them or install from a file." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Export templates are installed and ready to be used." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Open Folder" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Open the folder containing installed templates for the current version." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall templates for the current version." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download from:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Open in Web Browser" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Copy Mirror URL" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Download and Install" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"Download and install templates for the current version from the best " +"possible mirror." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Official export templates aren't available for development builds." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install from File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Install templates from a local file." +msgstr "" + +#: editor/export_template_manager.cpp editor/find_in_files.cpp +#: editor/progress_dialog.cpp scene/gui/dialogs.cpp +msgid "Cancel" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Cancel the download of the templates." +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Other Installed Versions:" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Uninstall Template" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Select Template File" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp +msgid "" +"The templates will continue to download.\n" +"You may experience a short editor freeze when they finish." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Status: Import of file failed. Please fix file and reimport manually." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Importing has been disabled for this file, so it can't be opened for editing." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move/rename resources root." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Cannot move a folder into itself." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error moving:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Error duplicating:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Unable to update dependencies:" +msgstr "" + +#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp +msgid "No name provided." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Provided name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "A file or folder with this name already exists." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Name contains invalid characters." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"The following files or folders conflict with items in the target location " +"'%s':\n" +"\n" +"%s\n" +"\n" +"Do you wish to overwrite them?" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Renaming folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating file:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicating folder:" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Inherited Scene" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Set As Main Scene" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Open Scenes" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Instance" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Add to Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Remove from Favorites" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Edit Dependencies..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "View Owners..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move To..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Scene..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +msgid "New Script..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "New Resource..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/inspector_dock.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_editor_debugger.cpp +msgid "Expand All" +msgstr "" + +#: editor/filesystem_dock.cpp editor/inspector_dock.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/script_editor_debugger.cpp +msgid "Collapse All" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort files" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by Name (Ascending)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by Name (Descending)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by Type (Ascending)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by Type (Descending)" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by Last Modified" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Sort by First Modified" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Duplicate..." +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +msgid "Rename..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Focus the search box" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Previous Folder/File" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Next Folder/File" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Re-Scan Filesystem" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Toggle Split Mode" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Search files" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "" +"Scanning Files,\n" +"Please Wait..." +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Move" +msgstr "" + +#: editor/filesystem_dock.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/project_manager.cpp editor/rename_dialog.cpp +#: editor/scene_tree_dock.cpp +msgid "Rename" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Overwrite" +msgstr "" + +#: editor/filesystem_dock.cpp +msgid "Create Scene" +msgstr "" + +#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +msgid "Create Script" +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp +msgid "Find in Files" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Folder:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Filters:" +msgstr "" + +#: editor/find_in_files.cpp +msgid "" +"Include the files with the following extensions. Add or remove them in " +"ProjectSettings." +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find..." +msgstr "" + +#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp +msgid "Replace..." +msgstr "" + +#: editor/find_in_files.cpp +msgid "Find: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace: " +msgstr "" + +#: editor/find_in_files.cpp +msgid "Replace all (no undo)" +msgstr "" + +#: editor/find_in_files.cpp +msgid "Searching..." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d match in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d file." +msgstr "" + +#: editor/find_in_files.cpp +msgid "%d matches in %d files." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Add to Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Remove from Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group name already exists." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Invalid group name." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Rename Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Delete Group" +msgstr "" + +#: editor/groups_editor.cpp editor/node_dock.cpp +msgid "Groups" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes Not in Group" +msgstr "" + +#: editor/groups_editor.cpp editor/scene_tree_dock.cpp +#: editor/scene_tree_editor.cpp +msgid "Filter nodes" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Nodes in Group" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Empty groups will be automatically removed." +msgstr "" + +#: editor/groups_editor.cpp +msgid "Group Editor" +msgstr "" + +#: editor/groups_editor.cpp +msgid "Manage Groups" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Single Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import with Separate Objects+Materials+Animations" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Import as Multiple Scenes+Materials" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import Scene" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Importing Scene..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating Lightmaps" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Generating for Mesh: " +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Running Custom Script..." +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Couldn't load post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Invalid/broken script for post-import (check console):" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Error running post-import script:" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Did you return a Node-derived object in the `post_import()` method?" +msgstr "" + +#: editor/import/resource_importer_scene.cpp +msgid "Saving..." +msgstr "" + +#: editor/import_defaults_editor.cpp +msgid "Select Importer" +msgstr "" + +#: editor/import_defaults_editor.cpp +msgid "Importer:" +msgstr "" + +#: editor/import_defaults_editor.cpp +msgid "Reset to Defaults" +msgstr "" + +#: editor/import_dock.cpp +msgid "Keep File (No Import)" +msgstr "" + +#: editor/import_dock.cpp +msgid "%d Files" +msgstr "" + +#: editor/import_dock.cpp +msgid "Set as Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Clear Default for '%s'" +msgstr "" + +#: editor/import_dock.cpp +msgid "Reimport" +msgstr "" + +#: editor/import_dock.cpp +msgid "" +"You have pending changes that haven't been applied yet. Click Reimport to " +"apply changes made to the import options.\n" +"Selecting another resource in the FileSystem dock without clicking Reimport " +"first will discard changes made in the Import dock." +msgstr "" + +#: editor/import_dock.cpp +msgid "Import As:" +msgstr "" + +#: editor/import_dock.cpp +msgid "Preset" +msgstr "" + +#: editor/import_dock.cpp +msgid "Save Scenes, Re-Import, and Restart" +msgstr "" + +#: editor/import_dock.cpp +msgid "Changing the type of an imported file requires editor restart." +msgstr "" + +#: editor/import_dock.cpp +msgid "" +"WARNING: Assets exist that use this resource, they may stop loading properly." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Failed to load resource." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Paste Properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Sub-Resources Unique" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Create a new resource in memory and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Load an existing resource from disk and edit it." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Save the currently edited resource." +msgstr "" + +#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Save As..." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Extra resource options." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Edit Resource from Clipboard" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Copy Resource" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Make Resource Built-In" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the previous edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Go to the next edited object in history." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "History of recently edited objects." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Open documentation for this object." +msgstr "" + +#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp +msgid "Open Documentation" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Filter properties" +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Manage object properties." +msgstr "" + +#: editor/inspector_dock.cpp +msgid "Changes may be lost!" +msgstr "" + +#: editor/multi_node_edit.cpp +msgid "MultiNode Set" +msgstr "" + +#: editor/node_dock.cpp +msgid "Select a single node to edit its signals and groups." +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Edit a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Create a Plugin" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Plugin Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Subfolder:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Author:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Version:" +msgstr "" + +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp +msgid "Language:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Script Name:" +msgstr "" + +#: editor/plugin_config_dialog.cpp +msgid "Activate now?" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create points." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "" +"Edit points.\n" +"LMB: Move Point\n" +"RMB: Erase Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Erase points." +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Edit Polygon" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Insert Point" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Edit Polygon (Remove Point)" +msgstr "" + +#: editor/plugins/abstract_polygon_2d_editor.cpp +msgid "Remove Polygon And Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Animation" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Load..." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Move Node Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Change BlendSpace1D Limits" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Change BlendSpace1D Labels" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "This type of node can't be used. Only root nodes are allowed." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Node Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Animation Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Remove BlendSpace1D Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +msgid "Move BlendSpace1D Node Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"AnimationTree is inactive.\n" +"Activate to enable playback, check node warnings if activation fails." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Set the blending position within the space" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Select and move points, create points with RMB." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp +msgid "Enable snap and show grid." +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Point" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Open Animation Node" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Triangle already exists." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Add Triangle" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Change BlendSpace2D Limits" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Change BlendSpace2D Labels" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Remove BlendSpace2D Point" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Remove BlendSpace2D Triangle" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "BlendSpace2D does not belong to an AnimationTree node." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "No triangles exist, so no blending can take place." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Toggle Auto Triangles" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Create triangles by connecting points." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Erase points and triangles." +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +msgid "Generate blend triangles automatically (instead of manually)" +msgstr "" + +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Parameter Changed:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Filters" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Output node can't be added to the blend tree." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Add Node to BlendTree" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Node Moved" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Unable to connect, port may be in use or connection may be invalid." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Nodes Connected" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Nodes Disconnected" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Set Animation" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Delete Node" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/scene_tree_dock.cpp +msgid "Delete Node(s)" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Toggle Filter On/Off" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Change Filter" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "No animation player set, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Player path set is invalid, so unable to retrieve track names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "" +"Animation player has no valid root node path, so unable to retrieve track " +"names." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Anim Clips" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Audio Clips" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Functions" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Node Renamed" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node..." +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Edit Filtered Tracks:" +msgstr "" + +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Enable Filtering" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Toggle Autoplay" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "New Anim" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Animation Name:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Animation?" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Remove Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Invalid animation name!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation name already exists!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Rename Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Next Changed" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Change Blend Time" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Load Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Duplicate Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to copy!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation resource on clipboard!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pasted Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Paste Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "No animation to edit!" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from current pos. (A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation backwards from end. (Shift+A)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Stop animation playback. (S)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from start. (Shift+D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Play selected animation from current pos. (D)" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation position (in seconds)." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Scale animation playback globally for the node." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Tools" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp +msgid "New" +msgstr "Bago" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Edit Transitions..." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Open in Inspector" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Display list of animations in player." +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Autoplay on Load" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Enable Onion Skinning" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Onion Skinning Options" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Directions" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Past" +msgstr "Nakaraan" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Future" +msgstr "Hinaharap" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Depth" +msgstr "Lalim" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "1 step" +msgstr "1 hakbang" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "2 steps" +msgstr "2 hakbang" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "3 steps" +msgstr "3 hakbang" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Differences Only" +msgstr "Mga Pagkakaiba Lang" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Force White Modulate" +msgstr "Piliting Magmodulate ng Paputi" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Include Gizmos (3D)" +msgstr "Magsama ng mga Gizmo (3D)" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Pin AnimationPlayer" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Create New Animation" +msgstr "Gumawa ng Bagong Animasyon" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Animation Name:" +msgstr "Pangalan ng Animasyon:" + +#: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp +msgid "Error!" +msgstr "Kabiguan!" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Blend Times:" +msgstr "" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Next (Auto Queue):" +msgstr "Sunod (Kusang Pagpila):" + +#: editor/plugins/animation_player_editor_plugin.cpp +msgid "Cross-Animation Blend Times" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Move Node" +msgstr "Ilipat Ang Node" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition exists!" +msgstr "Mayroon ng Transisyon!" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Add Transition" +msgstr "Magdagdag ng Transisyon" + +#: editor/plugins/animation_state_machine_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node" +msgstr "Magdagdag ng Node" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "End" +msgstr "Iwakas" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Immediate" +msgstr "Mabilisan" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Sync" +msgstr "Ipagsabay" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "At End" +msgstr "Sa Huli" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Travel" +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Start and end nodes are needed for a sub-transition." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "No playback resource set at path: %s." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Node Removed" +msgstr "Naalis ang Node" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition Removed" +msgstr "Naalis ang Transisyon" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set Start Node (Autoplay)" +msgstr "Itakda ang Umpisa ng Node (Kusang Pagpalabas)" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "" +"Select and move nodes.\n" +"RMB to add new nodes.\n" +"Shift+LMB to create connections." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Create new nodes." +msgstr "Gumawa ng bagong mga node." + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Connect nodes." +msgstr "Magkabit ng mga node." + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Remove selected node or transition." +msgstr "Alisin ang napiling node o transisyon." + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Toggle autoplay this animation on start, restart or seek to zero." +msgstr "" + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Set the end animation. This is useful for sub-transitions." +msgstr "" +"Itakda ang hulihan ng animasyon. Magagamit to para sa mga sub-transisyon." + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Transition: " +msgstr "Transisyon: " + +#: editor/plugins/animation_state_machine_editor.cpp +msgid "Play Mode:" +msgstr "Paraan sa Pagpapalabas:" + +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "AnimationTree" +msgstr "AnimationTree" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "New name:" +msgstr "Bagong pangalan:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Scale:" +msgstr "Sukat:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade In (s):" +msgstr "(Mga) Palabong Pagpasok:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Fade Out (s):" +msgstr "(Mga) Palabong Paglabas:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend" +msgstr "Halo" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix" +msgstr "Mix" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Auto Restart:" +msgstr "Kusa Muling Pagumpisa:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Restart (s):" +msgstr "(Mga) Muling Pagumpisa:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Random Restart (s):" +msgstr "Alinmang (Mga) Kusa Muling-Pagsisimula:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Start!" +msgstr "Simulan!" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Amount:" +msgstr "Bilang:" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 0:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend 1:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "X-Fade Time (s):" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Current:" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Clear Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Set Auto-Advance" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Delete Input" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is valid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation tree is invalid." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Animation Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "OneShot Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Mix Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend2 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend3 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Blend4 Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeScale Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "TimeSeek Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Transition Node" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Import Animations..." +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Edit Node Filters" +msgstr "" + +#: editor/plugins/animation_tree_player_editor_plugin.cpp +msgid "Filters..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Contents:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "View Files" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Connection error, please try again." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't connect to host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response from host:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "No response." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve hostname:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Can't resolve." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, return code:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Cannot save response to:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Write error." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, too many redirects" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Redirect loop." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Request failed, timeout" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Timeout." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Bad download hash, assuming file has been tampered with." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Expected:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Got:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Failed SHA-256 hash check" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Asset Download Error:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading (%s / %s)..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Downloading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Resolving..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Error making request" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Idle" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Install..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Retry" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download Error" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Download for this asset is already in progress!" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "First" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Previous" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Next" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Last" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "All" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Search templates, projects, and demos" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Search assets (excluding templates, projects, and demos)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Import..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Plugins..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp +msgid "Sort:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Category:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Site:" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Support" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Official" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Testing" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Loading..." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Assets ZIP File" +msgstr "" + +#: editor/plugins/audio_stream_editor_plugin.cpp +msgid "Audio Preview Play/Pause" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Can't determine a save path for lightmap images.\n" +"Save your scene and try again." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " +"In Baked Light' and 'Generate Lightmap' flags are on." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed creating lightmap images, make sure path is writable." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Failed determining lightmap size. Maximum lightmap size too small?" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Some mesh is invalid. Make sure the UV2 channel values are contained within " +"the [0.0,1.0] square region." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "" +"Godot editor was built without ray tracing support, lightmaps can't be baked." +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Bake Lightmaps" +msgstr "" + +#: editor/plugins/baked_lightmap_editor_plugin.cpp +msgid "Select lightmap bake file:" +msgstr "" + +#: editor/plugins/camera_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Preview" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Configure Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Grid Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Primary Line Every:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "steps" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Offset:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Step:" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove Vertical Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Remove Horizontal Guide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Horizontal and Vertical Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotate CanvasItem \"%s\" to %d degrees" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem \"%s\" Anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale Node2D \"%s\" to (%s, %s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Resize Control \"%s\" to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale CanvasItem \"%s\" to (%s, %s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move %d CanvasItems" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Move CanvasItem \"%s\" to (%d, %d)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Children of containers have their anchors and margins values overridden by " +"their parent." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Presets for the anchors and margins values of a Control node." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"When active, moving Control nodes changes their anchors instead of their " +"margins." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Left" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Top" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Right" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Bottom" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Left Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Top Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Right Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Bottom Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "VCenter Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "HCenter Wide" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Full Rect" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Keep Ratio" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Anchors only" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors and Margins" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Anchors" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Project Camera Override\n" +"Overrides the running project's camera with the editor viewport camera." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Project Camera Override\n" +"No project instance running. Run the project from the editor to use this " +"feature." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Group Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Ungroup Selected" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Paste Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Create Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear IK Chain" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Warning: Children of a container get their position and size determined only " +"by their parent." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp +msgid "Zoom Reset" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Select Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Drag: Rotate selected node around pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Alt+Drag: Move selected node." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "V: Set selected node's pivot position." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "RMB: Add node at position clicked." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Move Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Show a list of all objects at the position clicked\n" +"(same as Alt+RMB in select mode)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Click to change object's rotation pivot." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Ruler Mode" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Rotation Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Scale Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap Relative" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Pixel Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Smart Snapping" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Configure Snap..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Parent" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Anchor" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Sides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Node Center" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Other Nodes" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snap to Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock the selected object in place (can't be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unlock the selected object (can be moved)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Makes sure the object's children are not selectable." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Restores the object's children's ability to be selected." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Skeleton Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Make Custom Bone(s) from Node(s)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Custom Bones" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Always Show Grid" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Helpers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Rulers" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Guides" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Origin" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Viewport" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Show Group And Lock Icons" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Center Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Frame Selection" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Preview Canvas Scale" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Translation mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Rotation mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Scale mask for inserting keys." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert keys (based on mask)." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Auto insert keys when objects are translated, rotated or scaled (based on " +"mask).\n" +"Keys are only added to existing tracks, no new tracks will be created.\n" +"Keys must be inserted manually for the first time." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Auto Insert Key" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Animation Key and Pose Options" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Insert Key (Existing Tracks)" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Copy Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Clear Pose" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add Node Here" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Instance Scene Here" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Multiply grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Divide grid step by 2" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Pan View" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 3.125%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 6.25%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 12.5%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 25%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 50%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 100%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 200%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 400%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 800%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Zoom to 1600%" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Add %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Adding %s..." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Cannot instantiate multiple nodes without root." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Create Node" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "Error instancing scene from %s" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Change Default Type" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "" +"Drag & drop + Shift : Add node as sibling\n" +"Drag & drop + Alt : Change node type" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Create Polygon3D" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Edit Poly" +msgstr "" + +#: editor/plugins/collision_polygon_editor_plugin.cpp +msgid "Edit Poly (Remove Point)" +msgstr "" + +#: editor/plugins/collision_shape_2d_editor_plugin.cpp +msgid "Set Handle" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Load Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Restart" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Clear Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Particles" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generated Point Count:" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Mask" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Solid Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Border Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Directed Border Pixels" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Capture from Pixel" +msgstr "" + +#: editor/plugins/cpu_particles_2d_editor_plugin.cpp +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Emission Colors" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +msgid "CPUParticles" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Mesh" +msgstr "" + +#: editor/plugins/cpu_particles_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emission Points From Node" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat 0" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Flat 1" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp +msgid "Ease In" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp +msgid "Ease Out" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Smoothstep" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Modify Curve Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Curve Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Add Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Left Linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right Linear" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Load Preset" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Remove Curve Point" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Toggle Curve Linear Tangent" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Hold Shift to edit tangents individually" +msgstr "" + +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + +#: editor/plugins/gi_probe_editor_plugin.cpp +msgid "Bake GI Probe" +msgstr "" + +#: editor/plugins/gradient_editor_plugin.cpp +msgid "Gradient Edited" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item %d" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Items" +msgstr "" + +#: editor/plugins/item_list_editor_plugin.cpp +msgid "Item List Editor" +msgstr "" + +#: editor/plugins/light_occluder_2d_editor_plugin.cpp +msgid "Create Occluder Polygon" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh is empty!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a Trimesh collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Static Trimesh Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "This doesn't work on scene root!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Simplified Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Navigation Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Contained Mesh is not of type ArrayMesh." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Unwrap failed, mesh may not be manifold?" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "No mesh to debug." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has no UV in layer %d." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "MeshInstance lacks a Mesh!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh has not surface to create outlines from!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Could not create outline!" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Static Body" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Trimesh Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Simplified Convex Collision Sibling" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a simplified convex collision shape.\n" +"This is similar to single collision shape, but can result in a simpler " +"geometry in some cases, at the cost of accuracy." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between a single convex collision and a " +"polygon-based collision." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh..." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV1" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "View UV2" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Unwrap UV2 for Lightmap/AO" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Outline Mesh" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Outline Size:" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "UV Channel Debug" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove item %d?" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "" +"Update from existing scene?:\n" +"%s" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Mesh Library" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Add Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Remove Selected Item" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Update from Scene" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and no MultiMesh set in node)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No mesh source specified (and MultiMesh contains no Mesh)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (not a MeshInstance)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh source is invalid (contains no Mesh resource)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "No surface source specified." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (invalid path)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no geometry)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Surface source is invalid (no faces)." +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Select a Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate Surface" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate MultiMesh" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Target Surface:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Source Mesh:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "X-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Y-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Z-Axis" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Mesh Up Axis:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Rotation:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Tilt:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Random Scale:" +msgstr "" + +#: editor/plugins/multimesh_editor_plugin.cpp +msgid "Populate" +msgstr "" + +#: editor/plugins/navigation_polygon_editor_plugin.cpp +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Navigation Polygon" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Convert to CPUParticles" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generating Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Generate Visibility Rect" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Can only set point into a ParticlesMaterial process material" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +msgid "Convert to CPUParticles2D" +msgstr "" + +#: editor/plugins/particles_2d_editor_plugin.cpp +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generation Time (sec):" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "The geometry's faces don't contain any area." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "The geometry doesn't contain any faces." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't inherit from Spatial." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't contain geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "\"%s\" doesn't contain face geometry." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Create Emitter" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Points:" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Surface Points+Normal (Directed)" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Volume" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Emission Source: " +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "A processor material of type 'ParticlesMaterial' is required." +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generating AABB" +msgstr "" + +#: editor/plugins/particles_editor_plugin.cpp +msgid "Generate Visibility AABB" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Point from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove Out-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Remove In-Control from Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point to Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Split Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Point in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move In-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Move Out-Control in Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Select Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Shift+Drag: Select Control Points" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Click: Add Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Left Click: Split Segment (in curve)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Right Click: Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +msgid "Select Control Points (Shift+Drag)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Add Point (in empty space)" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Delete Point" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Close Curve" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +#: editor/plugins/theme_editor_preview.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp +msgid "Options" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Angles" +msgstr "" + +#: editor/plugins/path_2d_editor_plugin.cpp +#: editor/plugins/path_editor_plugin.cpp +msgid "Mirror Handle Lengths" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Curve Point #" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Point Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve In Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Set Curve Out Position" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Path" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Path Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove Out-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Remove In-Control Point" +msgstr "" + +#: editor/plugins/path_editor_plugin.cpp +msgid "Split Segment (in curve)" +msgstr "" + +#: editor/plugins/physical_bone_plugin.cpp +msgid "Move Joint" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"The skeleton property of the Polygon2D does not point to a Skeleton2D node" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"No texture in this polygon.\n" +"Set a texture to be able to edit UV." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"Polygon 2D has internal vertices, so it can no longer be edited in the " +"viewport." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Polygon & UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create Internal Vertex" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Internal Vertex" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Invalid Polygon (need 3 different vertices)" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Add Custom Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Remove Custom Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform UV Map" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Transform Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint Bone Weights" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Open Polygon 2D UV editor." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygon 2D UV Editor" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Points" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Polygons" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Bones" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Points" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Command: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift: Move All" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Command: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Ctrl: Rotate" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Shift+Ctrl: Scale" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Move Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Rotate Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Scale Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Create a custom polygon. Enables custom polygon rendering." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "" +"Remove a custom polygon. If none remain, custom polygon rendering is " +"disabled." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Paint weights with specified intensity." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Unpaint weights with specified intensity." +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Radius:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Copy Polygon to UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Copy UV to Polygon" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Clear UV" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Settings" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Enable Snap" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Configure Grid:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Offset Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step X:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Grid Step Y:" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Sync Bones to Polygon" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ERROR: Couldn't load resource!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Add Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Rename Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Delete Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Resource clipboard is empty!" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Paste Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_editor.cpp +msgid "Instance:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Type:" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp +msgid "Open in Editor" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "Load Resource" +msgstr "" + +#: editor/plugins/resource_preloader_editor_plugin.cpp +msgid "ResourcePreloader" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Flip Portals" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Room Generate Points" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Generate Points" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Flip Portal" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "AnimationTree has no path set to an AnimationPlayer" +msgstr "" + +#: editor/plugins/root_motion_editor_plugin.cpp +msgid "Path to AnimationPlayer is invalid" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Files" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close and save changes?" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error writing TextFile:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Could not load file at:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving file!" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error Saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error importing theme." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error Importing" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "New Text File..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save File As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Can't obtain the script for running." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Script failed reloading, check console for errors." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Script is not in tool mode, will not be able to run." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"To run this script, it must inherit EditorScript and be set to tool mode." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error while saving theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Error saving" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme As..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "%s Class Reference" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Filter scripts" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Toggle alphabetical sorting of the method list." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Filter methods" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Sort" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Up" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Move Down" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Next Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Previous Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "File" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reopen Closed Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Soft Reload Script" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Copy Script Path" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "History Next" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Import Theme..." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Reload Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Save Theme" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close All" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Close Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +msgid "Run" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Search" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Into" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Break" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp +#: editor/script_editor_debugger.cpp +msgid "Continue" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Keep Debugger Open" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Debug with External Editor" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/shader_editor_plugin.cpp +msgid "Online Docs" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Open Godot online documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search the reference documentation." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to previous edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Go to next edited document." +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Discard" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "" +"The following files are newer on disk.\n" +"What action should be taken?:" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Debugger" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Search Results" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp +msgid "Clear Recent Scripts" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Connections to method:" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp +msgid "Source" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Target" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "" +"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "[Ignore]" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Only resources from filesystem can be dropped." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Lookup Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Pick Color" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Convert Case" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Uppercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Lowercase" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Capitalize" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp +msgid "Syntax Highlighter" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +msgid "Bookmarks" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp +msgid "Go To" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Cut" +msgstr "" + +#: editor/plugins/script_text_editor.cpp editor/plugins/theme_editor_plugin.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Delete Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Left" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Indent Right" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Comment" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold/Unfold Line" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Fold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Unfold All Lines" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Complete Symbol" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Evaluate Selection" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Trim Trailing Whitespace" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Spaces" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Convert Indent to Tabs" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Auto Indent" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Find in Files..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Contextual Help" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Toggle Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Bookmark" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Bookmarks" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Function..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Line..." +msgstr "" + +#: editor/plugins/script_text_editor.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Toggle Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Remove All Breakpoints" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Next Breakpoint" +msgstr "" + +#: editor/plugins/script_text_editor.cpp +msgid "Go to Previous Breakpoint" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "" +"This shader has been modified on on disk.\n" +"What action should be taken?" +msgstr "" + +#: editor/plugins/shader_editor_plugin.cpp +msgid "Shader" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "This skeleton has no bones, create some children Bone2D nodes." +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Skeleton2D" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Reset to Rest Pose" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Overwrite Rest Pose" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical bones" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Skeleton" +msgstr "" + +#: editor/plugins/skeleton_editor_plugin.cpp +msgid "Create physical skeleton" +msgstr "" + +#: editor/plugins/skeleton_ik_editor_plugin.cpp +msgid "Play IK" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Aborted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "X-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Y-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Z-Axis Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Plane Transform." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: editor/plugins/texture_region_editor_plugin.cpp +#: editor/plugins/theme_editor_plugin.cpp scene/resources/visual_shader.cpp +msgid "None" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate" +msgstr "" + +#. TRANSLATORS: This refers to the movement that changes the position of an object. +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scaling: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translating: " +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotating %s degrees." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Keying is disabled (no key inserted)." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Animation Key Inserted." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pitch:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Yaw:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Size:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Objects Drawn:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Material Changes:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Shader Changes:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Surface Changes:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Draw Calls:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Vertices:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "FPS: %d (%s ms)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Transform with View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Align Rotation with View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "No parent to instance a child at." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp +msgid "This operation requires a single selected node." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Auto Orthogonal Enabled" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Lock View Rotation" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Normal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Wireframe" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Overdraw" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Display Unshaded" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Environment" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Information" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View FPS" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Half Resolution" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Audio Listener" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Enable Doppler" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Cinematic Preview" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Not available when using the GLES2 renderer." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Forward" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Backwards" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Speed Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Camera Preview" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Rotation Locked" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"To zoom further, change the camera's clipping planes (View -> Settings...)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Note: The FPS value displayed is the editor's framerate.\n" +"It cannot be used as a reliable indication of in-game performance." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Convert Rooms" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "XForm Dialog" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "" +"Click to toggle between visibility states.\n" +"\n" +"Open eye: Gizmo is visible.\n" +"Closed eye: Gizmo is hidden.\n" +"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Nodes to Floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Couldn't find a solid floor to snap the selection to." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Local Space" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Converts rooms for portal culling." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orbit View Down" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orbit View Left" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orbit View Right" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orbit View Up" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Orbit View 180" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Switch Perspective/Orthogonal View" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Insert Animation Key" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Focus Selection" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Toggle Freelook" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Object to Floor" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Dialog..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "1 Viewport" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "2 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "3 Viewports (Alt)" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "4 Viewports" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Gizmos" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Origin" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Grid" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Portal Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Settings..." +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Snap Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate Snap:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate Snap (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale Snap (%):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Viewport Settings" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Perspective FOV (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Near:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "View Z-Far:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Change" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Translate:" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rotate (deg.):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Scale (ratio):" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Transform Type" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Pre" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Post" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Unnamed Gizmo" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create Mesh2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Mesh2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create Polygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Polygon2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create CollisionPolygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "CollisionPolygon2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create LightOccluder2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "LightOccluder2D Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite is empty!" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Can't convert a sprite using animation frames to mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't replace by mesh." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to Mesh2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create polygon." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Convert to Polygon2D" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create collision polygon." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create CollisionPolygon2D Sibling" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Invalid geometry, can't create light occluder." +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Create LightOccluder2D Sibling" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Sprite" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Simplification: " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Grow (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Update Preview" +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp +msgid "Settings:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "No Frames Selected" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add %d Frame(s)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Unable to load images" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "ERROR: Couldn't load frame resource!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Resource clipboard is empty or not a texture!" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Paste Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Empty" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Change Animation FPS" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "(empty)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animations:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "New Animation" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Speed:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Loop" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Animation Frames:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add a Texture from File" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Add Frames from a Sprite Sheet" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Insert Empty (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (Before)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move (After)" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Select Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Horizontal:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Vertical:" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Select/Clear All Frames" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Create Frames from Sprite Sheet" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "SpriteFrames" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Region Rect" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Set Margin" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Snap Mode:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Pixel Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Grid Snap" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Auto Slice" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Offset:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Step:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "Separation:" +msgstr "" + +#: editor/plugins/texture_region_editor_plugin.cpp +msgid "TextureRegion" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Colors" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Fonts" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Icons" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Styleboxes" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} color(s)" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "No colors found." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} constant(s)" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "No constants found." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} font(s)" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "No fonts found." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} icon(s)" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "No icons found." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} stylebox(es)" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "No styleboxes found." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "{num} currently selected" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Nothing was selected for the import." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Importing Theme Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Importing items {n}/{n}" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Updating the editor" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Finalizing" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Filter:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "With Data" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select by data type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible color items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible color items and their data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all visible color items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible constant items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible constant items and their data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all visible constant items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible font items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible font items and their data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all visible font items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible icon items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible icon items and their data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all visible icon items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible stylebox items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all visible stylebox items and their data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all visible stylebox items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "" +"Caution: Adding icon data may considerably increase the size of your Theme " +"resource." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Collapse types." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Expand types." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all Theme items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select With Data" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select all Theme items with item data." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Deselect all Theme items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Import Selected" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "" +"Import Items tab has some items selected. Selection will be lost upon " +"closing this window.\n" +"Close anyway?" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "" +"Select a theme type from the list to edit its items.\n" +"You can add a custom type or import a type with its items from another theme." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Color Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Constant Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Font Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Icon Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All StyleBox Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "" +"This theme type is empty.\n" +"Add more items to it manually or by importing from another theme." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Color Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Constant Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Font Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Icon Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Stylebox Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Color Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Constant Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Font Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Icon Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Rename Stylebox Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Invalid file, not a Theme resource." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Invalid file, same as the edited Theme resource." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Manage Theme Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Edit Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Types:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Type:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Item:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add StyleBox Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Items:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Class Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove Custom Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Remove All Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Theme Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Old Name:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Import Items" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Default Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Editor Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select Another Theme Resource:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Another Theme" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Confirm Item Rename" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Cancel Item Rename" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Override Item" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Unpin this StyleBox as a main style." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "" +"Pin this StyleBox as a main style. Editing its properties will update the " +"same properties in all other StyleBoxes of this type." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Type" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Item Type" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Node Types:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Show Default" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Show default type items alongside items that have been overridden." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Override All" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Override all default type items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Theme:" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Manage Items..." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add, remove, organize and import Theme items." +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Add Preview" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Default Preview" +msgstr "" + +#: editor/plugins/theme_editor_plugin.cpp +msgid "Select UI Scene:" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "" +"Toggle the control picker, allowing to visually select control types for " +"edit." +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Toggle Button" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Disabled Button" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Disabled Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Check Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Checked Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Checked Radio Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Named Separator" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Submenu" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Subitem 1" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Subitem 2" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Has" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Many" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Disabled LineEdit" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Tab 1" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Tab 2" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Tab 3" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Editable Item" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Subtree" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Has,Many,Options" +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Invalid path, the PackedScene resource was probably moved or removed." +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Invalid PackedScene resource, must have a Control node at its root." +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Invalid file, not a PackedScene resource." +msgstr "" + +#: editor/plugins/theme_editor_preview.cpp +msgid "Reload the scene to reflect its most actual state." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Fix Invalid Tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cut Selection" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Line Draw" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Bucket Fill" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Erase TileMap" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Find Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Transpose" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Disable Autotile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Enable Priority" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Paint Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "" +"Shift+LMB: Line Draw\n" +"Shift+Command+LMB: Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "" +"Shift+LMB: Line Draw\n" +"Shift+Ctrl+LMB: Rectangle Paint" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Pick Tile" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate Left" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Rotate Right" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip Horizontally" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Flip Vertically" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Clear Transform" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Add Texture(s) to TileSet." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove selected Texture from TileSet." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from Scene" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Single Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Autotile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Atlas" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Next Coordinate" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select the next shape, subtile, or Tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Previous Coordinate" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Select the previous shape, subtile, or Tile." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Region" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Collision" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Occlusion" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Navigation" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Priority" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Icon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Z Index" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Region Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Collision Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Occlusion Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Navigation Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Bitmask Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Priority Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Icon Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Z Index Mode" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Copy bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Paste bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Erase bitmask." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create a new rectangle." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Rectangle" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create a new polygon." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "New Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete Selected Shape" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Keep polygon inside region Rect." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Enable snap and show grid (configurable via the Inspector)." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Display Tile Names (Hold Alt Key)" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove selected texture? This will remove all tiles which use it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "You haven't selected a texture to remove." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create from scene? This will overwrite all current tiles." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Merge from scene?" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Texture" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "%s file(s) were not added because was already on the list." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Drag handles to edit Rect.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete selected Rect." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select current edited sub-tile.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Delete polygon." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"LMB: Set bit on.\n" +"RMB: Set bit off.\n" +"Shift+LMB: Set wildcard bit.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to use as icon, this will be also used on invalid autotile " +"bindings.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to change its priority.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Select sub-tile to change its z index.\n" +"Click on another Tile to edit it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Set Tile Region" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Set Tile Icon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Navigation Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Paste Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Clear Tile Bitmask" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Polygon Concave" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Polygon Convex" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Tile" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Remove Navigation Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Priority" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Edit Tile Z Index" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Convex" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Make Concave" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Collision Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "Create Occlusion Polygon" +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "This property can't be changed." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "TileSet" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Output" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add input port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add output port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change input port type" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change output port type" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change input port name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Change output port name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Remove input port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Remove output port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set expression" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Resize VisualShader node" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set Uniform Name" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Set Input Default Port" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Add Node to Visual Shader" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Node(s) Moved" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Duplicate Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Delete Nodes" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Visual Shader Input Type Changed" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "UniformRef Name Changed" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vertex" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Fragment" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Light" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Show resulted shader code." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Create Shader Node" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Grayscale function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts HSV vector to RGB equivalent." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts RGB vector to HSV equivalent." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sepia function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Burn operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Darken operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Difference operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Dodge operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "HardLight operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Lighten operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Overlay operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Screen operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "SoftLight operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Color uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the boolean result of the %s comparison between two parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Equal (==)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Greater Than (>)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Greater Than or Equal (>=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated vector if the provided scalars are equal, greater or " +"less." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between INF and a scalar " +"parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between NaN and a scalar " +"parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Less Than (<)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Less Than or Equal (<=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Not Equal (!=)" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated vector if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the boolean result of the comparison between two parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the boolean result of the comparison between INF (or NaN) and a " +"scalar parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Boolean uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for all shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Input parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex and fragment shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for fragment and light shader modes." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for fragment shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for light shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "'%s' input parameter for vertex and fragment shader mode." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "E constant (2.718282). Represents the base of the natural logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Epsilon constant (0.00001). Smallest possible scalar number." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Phi constant (1.618034). Golden ratio." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi/4 constant (0.785398) or 45 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi/2 constant (1.570796) or 90 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Pi constant (3.141593) or 180 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Tau constant (6.283185) or 360 degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sqrt2 constant (1.414214). Square root of 2." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the absolute value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the arc-tangent of the parameters." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse hyperbolic tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Finds the nearest integer that is greater than or equal to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Constrains a value to lie between two further values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic cosine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts a quantity in radians to degrees." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-e Exponential." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-2 Exponential." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest integer less than or equal to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Computes the fractional part of the argument." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the inverse of the square root of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Natural logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Base-2 logarithm." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the greater of two values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the lesser of two values." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the opposite value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 - scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the value of the first parameter raised to the power of the second." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Converts a quantity in degrees to radians." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 / scalar" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest integer to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the nearest even integer to the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Clamps the value between 0.0 and 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Extracts the sign of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic sine of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the square root of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if x is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( scalar(edge), scalar(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the hyperbolic tangent of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Finds the truncated value of the parameter." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Adds scalar to scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Divides scalar by scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies scalar by scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the remainder of the two scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Subtracts scalar from scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Scalar uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Perform the cubic texture lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Perform the texture lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Cubic texture uniform lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "2D texture uniform lookup." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "2D texture uniform lookup with triplanar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Calculate the outer product of a pair of vectors.\n" +"\n" +"OuterProduct treats the first parameter 'c' as a column vector (matrix with " +"one column) and the second parameter 'r' as a row vector (matrix with one " +"row) and does a linear algebraic matrix multiply 'c * r', yielding a matrix " +"whose number of rows is the number of components in 'c' and whose number of " +"columns is the number of components in 'r'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Composes transform from four vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Decomposes transform to four vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the determinant of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the inverse of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the transpose of a transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies transform by transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies vector by transform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Transform uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector operator." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Composes vector from three scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Decomposes vector to three scalars." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the cross product of two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the distance between two points." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the dot product of two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the vector that points in the same direction as a reference vector. " +"The function has three vector parameters : N, the vector to orient, I, the " +"incident vector, and Nref, the reference vector. If the dot product of I and " +"Nref is smaller than zero the return value is N. Otherwise -N is returned." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the length of a vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Linear interpolation between two vectors using scalar." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Calculates the normalize product of vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 - vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "1.0 / vector" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns the vector that points in the direction of reflection ( a : incident " +"vector, b : normal vector )." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the vector that points in the direction of refraction." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than " +"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " +"using Hermite polynomials." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( vector(edge), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Step function( scalar(edge), vector(x) ).\n" +"\n" +"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Adds vector to vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Divides vector by vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Multiplies vector by vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Returns the remainder of the two vectors." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Subtracts vector from vector." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector constant." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Vector uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Custom Godot Shader Language expression, with custom amount of input and " +"output ports. This is a direct injection of code into the vertex/fragment/" +"light function, do not use it to write the function declarations inside." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns falloff based on the dot product of surface normal and view " +"direction of camera (pass associated inputs to it)." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Custom Godot Shader Language expression, which is placed on top of the " +"resulted shader. You can place various function definitions inside and call " +"it later in the Expressions. You can also declare varyings, uniforms and " +"constants." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "A reference to an existing uniform." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(Fragment/Light mode only) Scalar derivative function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(Fragment/Light mode only) Vector derivative function." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Derivative in 'x' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Derivative in 'y' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " +"differencing." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " +"'y'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " +"'y'." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "VisualShader" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Edit Visual Property:" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Visual Shader Mode Changed" +msgstr "" + +#: editor/project_export.cpp +msgid "Runnable" +msgstr "" + +#: editor/project_export.cpp +msgid "Delete preset '%s'?" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Failed to export the project for platform '%s'.\n" +"Export templates seem to be missing or invalid." +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Failed to export the project for platform '%s'.\n" +"This might be due to a configuration issue in the export preset or your " +"export settings." +msgstr "" + +#: editor/project_export.cpp +msgid "Release" +msgstr "" + +#: editor/project_export.cpp +msgid "Exporting All" +msgstr "" + +#: editor/project_export.cpp +msgid "The given export path doesn't exist:" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing/corrupted:" +msgstr "" + +#: editor/project_export.cpp +msgid "Presets" +msgstr "" + +#: editor/project_export.cpp editor/project_settings_editor.cpp +msgid "Add..." +msgstr "" + +#: editor/project_export.cpp +msgid "" +"If checked, the preset will be available for use in one-click deploy.\n" +"Only one preset per platform may be marked as runnable." +msgstr "" + +#: editor/project_export.cpp +msgid "Export Path" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources" +msgstr "" + +#: editor/project_export.cpp +msgid "Export all resources in the project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected scenes (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export selected resources (and dependencies)" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Resources to export:" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "" + +#: editor/project_export.cpp +msgid "" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "" + +#: editor/project_export.cpp +msgid "Features" +msgstr "Mga Tampok" + +#: editor/project_export.cpp +msgid "Custom (comma-separated):" +msgstr "" + +#: editor/project_export.cpp +msgid "Feature List:" +msgstr "" + +#: editor/project_export.cpp +msgid "Script" +msgstr "" + +#: editor/project_export.cpp +msgid "GDScript Export Mode:" +msgstr "" + +#: editor/project_export.cpp +msgid "Text" +msgstr "" + +#: editor/project_export.cpp +msgid "Compiled Bytecode (Faster Loading)" +msgstr "" + +#: editor/project_export.cpp +msgid "Encrypted (Provide Key Below)" +msgstr "" + +#: editor/project_export.cpp +msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" +msgstr "" + +#: editor/project_export.cpp +msgid "GDScript Encryption Key (256-bits as hexadecimal):" +msgstr "" + +#: editor/project_export.cpp +msgid "Export PCK/Zip" +msgstr "" + +#: editor/project_export.cpp +msgid "Export Project" +msgstr "" + +#: editor/project_export.cpp +msgid "Export mode?" +msgstr "" + +#: editor/project_export.cpp +msgid "Export All" +msgstr "" + +#: editor/project_export.cpp editor/project_manager.cpp +msgid "ZIP File" +msgstr "" + +#: editor/project_export.cpp +msgid "Godot Game Pack" +msgstr "" + +#: editor/project_export.cpp +msgid "Export templates for this platform are missing:" +msgstr "" + +#: editor/project_export.cpp +msgid "Manage Export Templates" +msgstr "" + +#: editor/project_export.cpp +msgid "Export With Debug" +msgstr "" + +#: editor/project_manager.cpp +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose an empty folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "" + +#: editor/project_manager.cpp +msgid "This directory already contains a Godot project." +msgstr "" + +#: editor/project_manager.cpp +msgid "New Game Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Imported Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project name." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create folder." +msgstr "" + +#: editor/project_manager.cpp +msgid "There is already a folder in this path with the specified name." +msgstr "" + +#: editor/project_manager.cpp +msgid "It would be a good idea to name your project." +msgstr "" + +#: editor/project_manager.cpp +msgid "Invalid project path (changed anything?)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Couldn't load project.godot in project path (error %d). It may be missing or " +"corrupted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't edit project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Couldn't create project.godot in project path." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file, not in ZIP format." +msgstr "" + +#: editor/project_manager.cpp +msgid "The following files failed extraction from package:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Package installed successfully!" +msgstr "" + +#: editor/project_manager.cpp +msgid "Rename Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Existing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Create & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install Project:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Install & Edit" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Name:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Project Installation Path:" +msgstr "" + +#: editor/project_manager.cpp +msgid "Renderer:" +msgstr "" + +#: editor/project_manager.cpp +msgid "OpenGL ES 3.0" +msgstr "" + +#: editor/project_manager.cpp +msgid "Not supported by your GPU drivers." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Higher visual quality\n" +"All features available\n" +"Incompatible with older hardware\n" +"Not recommended for web games" +msgstr "" + +#: editor/project_manager.cpp +msgid "OpenGL ES 2.0" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Lower visual quality\n" +"Some features not available\n" +"Works on most hardware\n" +"Recommended for web games" +msgstr "" + +#: editor/project_manager.cpp +msgid "Renderer can be changed later, but scenes may need to be adjusted." +msgstr "" + +#: editor/project_manager.cpp +msgid "Unnamed Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Missing Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Error: Project is missing on the filesystem." +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't open project at '%s'." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to open more than one project?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"The following project settings file does not specify the version of Godot " +"through which it was created.\n" +"\n" +"%s\n" +"\n" +"If you proceed with opening it, it will be converted to Godot's current " +"configuration file format.\n" +"Warning: You won't be able to open the project with previous versions of the " +"engine anymore." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"The following project settings file was generated by an older engine " +"version, and needs to be converted for this version:\n" +"\n" +"%s\n" +"\n" +"Do you want to convert it?\n" +"Warning: You won't be able to open the project with previous versions of the " +"engine anymore." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"The project settings were created by a newer engine version, whose settings " +"are not compatible with this version." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: no main scene defined.\n" +"Please edit the project and set the main scene in the Project Settings under " +"the \"Application\" category." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Can't run project: Assets need to be imported.\n" +"Please edit the project to trigger the initial import." +msgstr "" + +#: editor/project_manager.cpp +msgid "Are you sure to run %d projects at once?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove %d projects from the list?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove this project from the list?" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Remove all missing projects from the list?\n" +"The project folders' contents won't be modified." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Language changed.\n" +"The interface will update after restarting the editor or project manager." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Are you sure to scan %s folders for existing Godot projects?\n" +"This could take a while." +msgstr "" + +#. TRANSLATORS: This refers to the application where users manage their Godot projects. +#: editor/project_manager.cpp +msgid "Project Manager" +msgstr "" + +#: editor/project_manager.cpp +msgid "Local Projects" +msgstr "" + +#: editor/project_manager.cpp +msgid "Loading, please wait..." +msgstr "" + +#: editor/project_manager.cpp +msgid "Last Modified" +msgstr "" + +#: editor/project_manager.cpp +msgid "Edit Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Run Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "Scan Projects" +msgstr "" + +#: editor/project_manager.cpp +msgid "Select a Folder to Scan" +msgstr "" + +#: editor/project_manager.cpp +msgid "New Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Import Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove Project" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove Missing" +msgstr "" + +#: editor/project_manager.cpp +msgid "About" +msgstr "Tungkol sa Godot" + +#: editor/project_manager.cpp +msgid "Asset Library Projects" +msgstr "" + +#: editor/project_manager.cpp +msgid "Restart Now" +msgstr "" + +#: editor/project_manager.cpp +msgid "Remove All" +msgstr "" + +#: editor/project_manager.cpp +msgid "Also delete project contents (no undo!)" +msgstr "" + +#: editor/project_manager.cpp +msgid "Can't run project" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"You currently don't have any projects.\n" +"Would you like to explore official example projects in the Asset Library?" +msgstr "" + +#: editor/project_manager.cpp +msgid "Filter projects" +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"This field filters projects by name and last path component.\n" +"To filter projects by name and full path, the query must contain at least " +"one `/` character." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Physical Key" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Key " +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joy Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "An action with the name '%s' already exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Rename Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Action deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "All Devices" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid " (Physical)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "Press a Key..." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Mouse Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Left Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Right Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 1" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "X Button 2" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Axis Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Axis" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Joypad Button Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Erase Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Button" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Left Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Right Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Middle Button." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Up." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Wheel Down." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Global Property" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Select a setting item first!" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "No property '%s' exists." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Setting '%s' is internal, and it can't be deleted." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Delete Item" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "" +"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " +"'\"'." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add Input Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Error saving settings." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Settings saved OK." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Override for Feature" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Add %d Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Translation" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translation Resource Remap: Add %d Path(s)" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translation Resource Remap: Add %d Remap(s)" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Change Resource Remap Language" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remove Resource Remap Option" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Changed Locale Filter Mode" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Project Settings (project.godot)" +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "General" +msgstr "Pangkalahatan" + +#: editor/project_settings_editor.cpp +msgid "Override For..." +msgstr "" + +#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp +msgid "The editor must be restarted for changes to take effect." +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Input Map" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Action" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Deadzone" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Device:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Index:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Localization" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Translations:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Resources:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Remaps by Locale:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locale" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales Filter" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show All Locales" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Show Selected Locales Only" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Filter mode:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Locales:" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "AutoLoad" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Plugins" +msgstr "" + +#: editor/project_settings_editor.cpp +msgid "Import Defaults" +msgstr "" + +#: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Zero" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing In-Out" +msgstr "" + +#: editor/property_editor.cpp +msgid "Easing Out-In" +msgstr "" + +#: editor/property_editor.cpp +msgid "File..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Dir..." +msgstr "" + +#: editor/property_editor.cpp +msgid "Assign" +msgstr "" + +#: editor/property_editor.cpp +msgid "Select Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Error loading file: Not a resource!" +msgstr "" + +#: editor/property_editor.cpp +msgid "Pick a Node" +msgstr "" + +#: editor/property_editor.cpp +msgid "Bit %d, val %d." +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Property" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Virtual Method" +msgstr "" + +#: editor/property_selector.cpp +msgid "Select Method" +msgstr "" + +#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp +msgid "Batch Rename" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Replace:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Prefix:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Suffix:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Advanced Options" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Substitute" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node's parent name, if available" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Node type" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Current scene name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Root node name" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Sequential integer counter.\n" +"Compare counter options." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Per-level Counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "If set, the counter restarts for each group of child nodes." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Initial value for the counter" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Step" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Amount by which counter is incremented for each node" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Padding" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "" +"Minimum number of digits for the counter.\n" +"Missing digits are padded with leading zeros." +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Post-Process" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Style" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Keep" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "PascalCase to snake_case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "snake_case to PascalCase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Case" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Lowercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "To Uppercase" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Reset" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "Regular Expression Error:" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent Node" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Reparent Location (Select new Parent):" +msgstr "" + +#: editor/reparent_dialog.cpp +msgid "Keep Global Transform" +msgstr "" + +#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp +msgid "Reparent" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Run Mode:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Current Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Main Scene Arguments:" +msgstr "" + +#: editor/run_settings_dialog.cpp +msgid "Scene Run Settings" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "No parent to instance the scenes at." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error loading scene from %s" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot instance the scene '%s' because the current scene exists within one " +"of its nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Scene(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instance Child Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't paste root node into the same scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Paste Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Detach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on the tree root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Node In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Move Nodes In Parent" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Duplicate Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Node must belong to the edited scene to become root." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Instantiated scenes can't become root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make node as Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete %d nodes and any children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Saving the branch as a scene requires having a scene open in the editor." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Saving the branch as a scene requires selecting only one node, but you have " +"selected %d nodes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Can't save the root node branch as an instanced scene.\n" +"To create an editable copy of the current scene, duplicate it using the " +"FileSystem dock context menu\n" +"or create an inherited scene using Scene > New Inherited Scene... instead." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Can't save the branch of an already instanced scene.\n" +"To create a variation of a scene, you can make an inherited scene based on " +"the instanced scene using Scene > New Inherited Scene... instead." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Save New Scene As..." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Disabling \"editable_instance\" will cause all properties of the node to be " +"reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "New Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Create Root Node:" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "2D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "3D Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "User Interface" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Other Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes from a foreign scene!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Can't operate on nodes the current scene inherits from!" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "This operation can't be done on instanced scenes." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach Script" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Cut Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remove Node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change type of node(s)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Couldn't save new scene. Likely dependencies (instances) couldn't be " +"satisfied." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error saving scene." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Error duplicating scene to save it." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Sub-Resources" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Cannot attach a script: there are no languages registered.\n" +"This is probably because this editor was built with all language modules " +"disabled." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add Child Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Expand/Collapse All" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Change Type" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Reparent to New Node" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Make Scene Root" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Merge From Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Save Branch as Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp +msgid "Copy Node Path" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete (No Confirm)" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Add/Create a New Node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"Instance a scene file as a Node. Creates an inherited scene if no root node " +"exists." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Attach a new or existing script to the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Detach the script from the selected node." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Remote" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "" +"If selected, the Remote scene tree dock will cause the project to stutter " +"every time it updates.\n" +"Switch back to the Local scene tree dock to improve performance." +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Local" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Clear Inheritance? (No Undo!)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visible" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Unlock Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Button Group" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "(Connecting From)" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node configuration warning:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has %s connection(s) and %s group(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node has %s connection(s).\n" +"Click to show signals dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is in %s group(s).\n" +"Click to show groups dock." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Open Script:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Node is locked.\n" +"Click to unlock it." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"Children are not selectable.\n" +"Click to make selectable." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Toggle Visibility" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "" +"AnimationPlayer is pinned.\n" +"Click to unpin." +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Invalid node name, the following characters are not allowed:" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Rename Node" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Scene Tree (Nodes):" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Node Configuration Warning!" +msgstr "" + +#: editor/scene_tree_editor.cpp +msgid "Select a Node" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is empty." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Filename is empty." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Path is not local." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid base path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "A directory with the same name exists." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File does not exist." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid extension." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Wrong extension chosen." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading template '%s'" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error - Could not create script in filesystem." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Error loading script from %s" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Overrides" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "N/A" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script / Choose Location" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Open Script" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "File exists, it will be reused." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid class name." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Invalid inherited parent name or path." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script path/name is valid." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Allowed: a-z, A-Z, 0-9, _ and ." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in script (into scene file)." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Will create a new script file." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Will load an existing script file." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Script file already exists." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "" +"Note: Built-in scripts have some limitations and can't be edited using an " +"external editor." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "" +"Warning: Having the script name be the same as a built-in type is usually " +"not desired." +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Class Name:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Template:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Built-in Script:" +msgstr "" + +#: editor/script_create_dialog.cpp +msgid "Attach Node Script" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Remote " +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Bytes:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Warning:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Child process connected." +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Copy Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Open C++ Source on GitHub" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Previous Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Inspect Next Instance" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Frames" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitor" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Value" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Monitors" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "List of Video Memory Usage by Resource:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Total:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Export list to a CSV file" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Resource Path" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Type" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Format" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Usage" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Misc" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Clicked Control Type:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Live Edit Root:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Set From Tree" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Export measures as CSV" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Erase Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Restore Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Change Shortcut" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Editor Settings" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Shortcuts" +msgstr "" + +#: editor/settings_config_dialog.cpp +msgid "Binding" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Light Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change AudioStreamPlayer3D Emission Angle" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera FOV" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Camera Size" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Notifier AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Particles AABB" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Probe Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Sphere Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp +msgid "Change Box Shape Extents" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Capsule Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Cylinder Shape Height" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Change Ray Shape Length" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Room Point Position" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Portal Point Position" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Cylinder Height" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Inner Radius" +msgstr "" + +#: modules/csg/csg_gizmos.cpp +msgid "Change Torus Outer Radius" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select the dynamic library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Select dependencies of the library for this entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Remove current entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Double click to create a new entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform:" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Platform" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Dynamic Library" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "Add an architecture entry" +msgstr "" + +#: modules/gdnative/gdnative_library_editor_plugin.cpp +msgid "GDNativeLibrary" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Enabled GDNative Singleton" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Disabled GDNative Singleton" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Library" +msgstr "" + +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Libraries: " +msgstr "" + +#: modules/gdnative/register_types.cpp +msgid "GDNative" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Step argument is zero!" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not a script with an instance" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a script" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Not based on a resource file" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (missing @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (can't load script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary format (invalid script at @path)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Invalid instance dictionary (invalid subclasses)" +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp +msgid "Object can't provide a length." +msgstr "" + +#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp +msgid "Export Mesh GLTF2" +msgstr "" + +#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp +msgid "Export GLTF..." +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Plane" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Plane:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Next Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Previous Floor" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Floor:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Delete Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Paste Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Paint" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Grid Map" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Snap View" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Disabled" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Above" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clip Below" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit X Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Y Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Edit Z Axis" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate X" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Y" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Back Rotate Z" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Cursor Clear Rotation" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Paste Selects" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Clear Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Fill Selection" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "GridMap Settings" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Pick Distance:" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Begin Bake" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Preparing data structures" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Generate buffers" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Direct lighting" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Indirect lighting" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Post processing" +msgstr "" + +#: modules/lightmapper_cpu/lightmapper_cpu.cpp +msgid "Plotting lightmaps" +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Class name can't be a reserved keyword" +msgstr "" + +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + +#: modules/mono/mono_gd/gd_mono_utils.cpp +msgid "End of inner exception stack trace" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Bake NavMesh" +msgstr "" + +#: modules/recast/navigation_mesh_editor_plugin.cpp +msgid "Clear the navigation mesh." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Setting up Configuration..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Calculating grid size..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Marking walkable triangles..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Constructing compact heightfield..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Eroding walkable area..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Partitioning..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating contours..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Creating polymesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Converting to native navigation mesh..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Navigation Mesh Generator Setup:" +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Parsing Geometry..." +msgstr "" + +#: modules/recast/navigation_mesh_generator.cpp +msgid "Done!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"A node yielded without working memory, please read the docs on how to yield " +"properly!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Node yielded, but did not return a function state in the first working " +"memory." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "" +"Return value must be assigned to first element of node working memory! Fix " +"your node please." +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Node returned an invalid sequence output: " +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Found sequence bit but not the node in the stack, report bug!" +msgstr "" + +#: modules/visual_script/visual_script.cpp +msgid "Stack overflow with stack depth: " +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Signal Arguments" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Argument name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Default Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Set Variable Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Port Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Port Name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Override an existing built-in function." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new function." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Variables:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new variable." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create a new signal." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name is not a valid identifier:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Name already in use by another func/var/signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Rename Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Expression" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Duplicate VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a simple reference to the node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold %s to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Hold Ctrl to drop a Variable Setter." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Preload Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Node(s) From Tree" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Getter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Setter Property" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Move Node(s)" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove VisualScript Node" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Data" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Connect Node Sequence" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Script already has function '%s'" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Input Value" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Resize Comment" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't copy the function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Paste VisualScript Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select at least one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Variable" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Variable:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Signal" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Editing Signal:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Make Tool:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Members:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Change Base Type:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Nodes..." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Function..." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "function_name" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select or create a function to edit its graph." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Delete Selected" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Find Node Type" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Copy Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Cut Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Edit Member" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Input type not iterable: " +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid" +msgstr "" + +#: modules/visual_script/visual_script_flow_control.cpp +msgid "Iterator became invalid: " +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name." +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Base object is not a Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Path does not lead Node!" +msgstr "" + +#: modules/visual_script/visual_script_func_nodes.cpp +msgid "Invalid index property name '%s' in node %s." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid argument of type: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid ": Invalid arguments: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableGet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "VariableSet not found in script: " +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "Custom node has no _step() method, can't process graph." +msgstr "" + +#: modules/visual_script/visual_script_nodes.cpp +msgid "" +"Invalid return value from _step(), must be integer (seq out), or string " +"(error)." +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Search VisualScript" +msgstr "" + +#: modules/visual_script/visual_script_property_selector.cpp +msgid "Get %s" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Package name is missing." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Package segments must be of non-zero length." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "The character '%s' is not allowed in Android application package names." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "A digit cannot be the first character in a package segment." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "The character '%s' cannot be the first character in a package segment." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "The package must have at least one '.' separator." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Running on %s" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Exporting APK..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Uninstalling..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Installing to device, please wait..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not install to device: %s" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Running on device..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not execute on device." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Unable to find the 'apksigner' tool." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Android build template not installed in the project. Install it from the " +"Project menu." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Either Debug Keystore, Debug User AND Debug Password settings must be " +"configured OR none of them." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Debug keystore not configured in the Editor Settings nor in the preset." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Either Release Keystore, Release User AND Release Password settings must be " +"configured OR none of them." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Release keystore incorrectly configured in the export preset." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "A valid Android SDK path is required in Editor Settings." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Invalid Android SDK path in Editor Settings." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Missing 'platform-tools' directory!" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Unable to find Android SDK platform-tools' adb command." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Please check in the Android SDK directory specified in Editor Settings." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Missing 'build-tools' directory!" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Unable to find Android SDK build-tools' apksigner command." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Invalid public key for APK expansion." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Invalid package name:" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " +"project setting (changed in Godot 3.2.2).\n" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Use Custom Build\" must be enabled to use the plugins." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"'apksigner' could not be found.\n" +"Please check the command is available in the Android SDK build-tools " +"directory.\n" +"The resulting %s is unsigned." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Signing debug %s..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Signing release %s..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not find keystore, unable to export." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "'apksigner' returned with error #%d" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Verifying %s..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "'apksigner' verification of %s failed." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Exporting for Android" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Invalid filename! Android App Bundle requires the *.aab extension." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "APK Expansion not compatible with Android App Bundle." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Invalid filename! Android APK requires the *.apk extension." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Unsupported export format!\n" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Trying to build from a custom built template, but no version info for it " +"exists. Please reinstall from the 'Project' menu." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Android build version mismatch:\n" +" Template installed: %s\n" +" Godot Version: %s\n" +"Please reinstall Android build template from 'Project' menu." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Unable to overwrite res://android/build/res/*.xml files with project name" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not export project files to gradle project\n" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not write expansion package file!" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Building Android Project (gradle)" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Building of Android project failed, check output for the error.\n" +"Alternatively visit docs.godotengine.org for Android build documentation." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Moving output" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Unable to copy and rename export file, check gradle project directory for " +"outputs." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Package not found: %s" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Creating APK..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Could not find template APK to export:\n" +"%s" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"Missing libraries in the export template for the selected architectures: " +"%s.\n" +"Please build a template with all required libraries, or uncheck the missing " +"architectures in the export preset." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Adding files..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not export project files" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Aligning APK..." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Could not unzip temporary unaligned APK." +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Identifier is missing." +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "The character '%s' is not allowed in Identifier." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "App Store Team ID not specified - cannot configure the project." +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "Invalid Identifier:" +msgstr "" + +#: platform/iphone/export/export.cpp +msgid "Required icon is not specified in the preset." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Run exported HTML in the system's default browser." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not open template for export:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read file:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not read HTML shell:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not create HTTP server directory:" +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Error starting HTTP server:" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid bundle identifier:" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization: code signing required." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization: hardened runtime required." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization: Apple ID name not specified." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization: Apple ID password not specified." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package short name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package unique name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid package publisher display name." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid product GUID." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid publisher GUID." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid background color." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid Store Logo image dimensions (should be 50x50)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." +msgstr "" + +#: platform/uwp/export/export.cpp +msgid "Invalid splash screen image dimensions (should be 620x300)." +msgstr "" + +#: scene/2d/animated_sprite.cpp +msgid "" +"A SpriteFrames resource must be created or set in the \"Frames\" property in " +"order for AnimatedSprite to display frames." +msgstr "" + +#: scene/2d/canvas_modulate.cpp +msgid "" +"Only one visible CanvasModulate is allowed per scene (or set of instanced " +"scenes). The first created one will work, while the rest will be ignored." +msgstr "" + +#: scene/2d/collision_object_2d.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " +"define its shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "" +"CollisionPolygon2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "An empty CollisionPolygon2D has no effect on collision." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode." +msgstr "" + +#: scene/2d/collision_polygon_2d.cpp +msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"CollisionShape2D only serves to provide a collision shape to a " +"CollisionObject2D derived node. Please only use it as a child of Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"A shape must be provided for CollisionShape2D to function. Please create a " +"shape resource for it!" +msgstr "" + +#: scene/2d/collision_shape_2d.cpp +msgid "" +"Polygon-based shapes are not meant be used nor edited directly through the " +"CollisionShape2D node. Please use the CollisionPolygon2D node instead." +msgstr "" + +#: scene/2d/cpu_particles_2d.cpp +msgid "" +"CPUParticles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node B must be a PhysicsBody2D" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Joint is not connected to two PhysicsBody2Ds" +msgstr "" + +#: scene/2d/joints_2d.cpp +msgid "Node A and Node B must be different PhysicsBody2Ds" +msgstr "" + +#: scene/2d/light_2d.cpp +msgid "" +"A texture with the shape of the light must be supplied to the \"Texture\" " +"property." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "" +"An occluder polygon must be set (or drawn) for this occluder to take effect." +msgstr "" + +#: scene/2d/light_occluder_2d.cpp +msgid "The occluder polygon for this occluder is empty. Please draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"A NavigationPolygon resource must be set or created for this node to work. " +"Please set a property or draw a polygon." +msgstr "" + +#: scene/2d/navigation_polygon.cpp +msgid "" +"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " +"node. It only provides navigation data." +msgstr "" + +#: scene/2d/parallax_layer.cpp +msgid "" +"ParallaxLayer node only works when set as child of a ParallaxBackground node." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "" +"GPU-based particles are not supported by the GLES2 video driver.\n" +"Use the CPUParticles2D node instead. You can use the \"Convert to " +"CPUParticles\" option for this purpose." +msgstr "" + +#: scene/2d/particles_2d.cpp scene/3d/particles.cpp +msgid "" +"A material to process the particles is not assigned, so no behavior is " +"imprinted." +msgstr "" + +#: scene/2d/particles_2d.cpp +msgid "" +"Particles2D animation requires the usage of a CanvasItemMaterial with " +"\"Particles Animation\" enabled." +msgstr "" + +#: scene/2d/path_2d.cpp +msgid "PathFollow2D only works when set as a child of a Path2D node." +msgstr "" + +#: scene/2d/physics_body_2d.cpp +msgid "" +"Size changes to RigidBody2D (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/2d/remote_transform_2d.cpp +msgid "Path property must point to a valid Node2D node to work." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "This Bone2D chain should end at a Skeleton2D node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." +msgstr "" + +#: scene/2d/skeleton_2d.cpp +msgid "" +"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." +msgstr "" + +#: scene/2d/tile_map.cpp +msgid "" +"TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " +"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " +"KinematicBody2D, etc. to give them a shape." +msgstr "" + +#: scene/2d/visibility_notifier_2d.cpp +msgid "" +"VisibilityEnabler2D works best when used with the edited scene root directly " +"as parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRCamera must have an ARVROrigin node as its parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRController must have an ARVROrigin node as its parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The controller ID must not be 0 or this controller won't be bound to an " +"actual controller." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVRAnchor must have an ARVROrigin node as its parent." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "" +"The anchor ID must not be 0 or this anchor won't be bound to an actual " +"anchor." +msgstr "" + +#: scene/3d/arvr_nodes.cpp +msgid "ARVROrigin requires an ARVRCamera child node." +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Finding meshes and lights" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Preparing geometry (%d/%d)" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Preparing environment" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Generating capture" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Saving lightmaps" +msgstr "" + +#: scene/3d/baked_lightmap.cpp +msgid "Done" +msgstr "" + +#: scene/3d/collision_object.cpp +msgid "" +"This node has no shape, so it can't collide or interact with other objects.\n" +"Consider adding a CollisionShape or CollisionPolygon as a child to define " +"its shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "" +"CollisionPolygon only serves to provide a collision shape to a " +"CollisionObject derived node. Please only use it as a child of Area, " +"StaticBody, RigidBody, KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_polygon.cpp +msgid "An empty CollisionPolygon has no effect on collision." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"CollisionShape only serves to provide a collision shape to a CollisionObject " +"derived node. Please only use it as a child of Area, StaticBody, RigidBody, " +"KinematicBody, etc. to give them a shape." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"A shape must be provided for CollisionShape to function. Please create a " +"shape resource for it." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"Plane shapes don't work well and will be removed in future versions. Please " +"don't use them." +msgstr "" + +#: scene/3d/collision_shape.cpp +msgid "" +"ConcavePolygonShape doesn't support RigidBody in another mode than static." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "Nothing is visible because no mesh has been assigned." +msgstr "" + +#: scene/3d/cpu_particles.cpp +msgid "" +"CPUParticles animation requires the usage of a SpatialMaterial whose " +"Billboard Mode is set to \"Particle Billboard\"." +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Plotting Meshes" +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "Finishing Plot" +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "" +"GIProbes are not supported by the GLES2 video driver.\n" +"Use a BakedLightmap instead." +msgstr "" + +#: scene/3d/gi_probe.cpp +msgid "" +"The GIProbe Compress property has been deprecated due to known bugs and no " +"longer has any effect.\n" +"To remove this warning, disable the GIProbe's Compress property." +msgstr "" + +#: scene/3d/light.cpp +msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "A NavigationMesh resource must be set or created for this node to work." +msgstr "" + +#: scene/3d/navigation_mesh.cpp +msgid "" +"NavigationMeshInstance must be a child or grandchild to a Navigation node. " +"It only provides navigation data." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"GPU-based particles are not supported by the GLES2 video driver.\n" +"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" +"\" option for this purpose." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Nothing is visible because meshes have not been assigned to draw passes." +msgstr "" + +#: scene/3d/particles.cpp +msgid "" +"Particles animation requires the usage of a SpatialMaterial whose Billboard " +"Mode is set to \"Particle Billboard\"." +msgstr "" + +#: scene/3d/path.cpp +msgid "PathFollow only works when set as a child of a Path node." +msgstr "" + +#: scene/3d/path.cpp +msgid "" +"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " +"parent Path's Curve resource." +msgstr "" + +#: scene/3d/physics_body.cpp +msgid "" +"Size changes to RigidBody (in character or rigid modes) will be overridden " +"by the physics engine when running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node B must be a PhysicsBody" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Joint is not connected to any PhysicsBodies" +msgstr "" + +#: scene/3d/physics_joint.cpp +msgid "Node A and Node B must be different PhysicsBodies" +msgstr "" + +#: scene/3d/portal.cpp +msgid "The RoomManager should not be a child or grandchild of a Portal." +msgstr "" + +#: scene/3d/portal.cpp +msgid "A Room should not be a child or grandchild of a Portal." +msgstr "" + +#: scene/3d/portal.cpp +msgid "A RoomGroup should not be a child or grandchild of a Portal." +msgstr "" + +#: scene/3d/remote_transform.cpp +msgid "" +"The \"Remote Path\" property must point to a valid Spatial or Spatial-" +"derived node to work." +msgstr "" + +#: scene/3d/room.cpp +msgid "A Room cannot have another Room as a child or grandchild." +msgstr "" + +#: scene/3d/room.cpp +msgid "The RoomManager should not be placed inside a Room." +msgstr "" + +#: scene/3d/room.cpp +msgid "A RoomGroup should not be placed inside a Room." +msgstr "" + +#: scene/3d/room.cpp +msgid "" +"Room convex hull contains a large number of planes.\n" +"Consider simplifying the room bound in order to increase performance." +msgstr "" + +#: scene/3d/room_group.cpp +msgid "The RoomManager should not be placed inside a RoomGroup." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "The RoomList has not been assigned." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "The RoomList node should be a Spatial (or derived from Spatial)." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "" +"Portal Depth Limit is set to Zero.\n" +"Only the Room that the Camera is in will render." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "There should only be one RoomManager in the SceneTree." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "" +"RoomList path is invalid.\n" +"Please check the RoomList branch has been assigned in the RoomManager." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "RoomList contains no Rooms, aborting." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "Misnamed nodes detected, check output log for details. Aborting." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "Portal link room not found, check output log for details." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "" +"Portal autolink failed, check output log for details.\n" +"Check the portal is facing outwards from the source room." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "" +"Room overlap detected, cameras may work incorrectly in overlapping area.\n" +"Check output log for details." +msgstr "" + +#: scene/3d/room_manager.cpp +msgid "" +"Error calculating room bounds.\n" +"Ensure all rooms contain geometry or manual bounds." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "This body will be ignored until you set a mesh." +msgstr "" + +#: scene/3d/soft_body.cpp +msgid "" +"Size changes to SoftBody will be overridden by the physics engine when " +"running.\n" +"Change the size in children collision shapes instead." +msgstr "" + +#: scene/3d/sprite_3d.cpp +msgid "" +"A SpriteFrames resource must be created or set in the \"Frames\" property in " +"order for AnimatedSprite3D to display frames." +msgstr "" + +#: scene/3d/vehicle_body.cpp +msgid "" +"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " +"it as a child of a VehicleBody." +msgstr "" + +#: scene/3d/world_environment.cpp +msgid "" +"WorldEnvironment requires its \"Environment\" property to contain an " +"Environment to have a visible effect." +msgstr "" + +#: scene/3d/world_environment.cpp +msgid "" +"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." +msgstr "" + +#: scene/3d/world_environment.cpp +msgid "" +"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " +"this environment's Background Mode to Canvas (for 2D scenes)." +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "On BlendTree node '%s', animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_blend_tree.cpp +msgid "Animation not found: '%s'" +msgstr "" + +#: scene/animation/animation_player.cpp +msgid "Anim Apply Reset" +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "In node '%s', invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Invalid animation: '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Nothing connected to input '%s' of node '%s'." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "No root AnimationNode for the graph is set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path to an AnimationPlayer node containing animations is not set." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." +msgstr "" + +#: scene/animation/animation_tree.cpp +msgid "The AnimationPlayer root node is not a valid node." +msgstr "" + +#: scene/animation/animation_tree_player.cpp +msgid "This node has been deprecated. Use AnimationTree instead." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "" +"Color: #%s\n" +"LMB: Set color\n" +"RMB: Remove preset" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Pick a color from the editor window." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "HSV" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Raw" +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Switch between hexadecimal and code values." +msgstr "" + +#: scene/gui/color_picker.cpp +msgid "Add current color as a preset." +msgstr "" + +#: scene/gui/container.cpp +msgid "" +"Container by itself serves no purpose unless a script configures its " +"children placement behavior.\n" +"If you don't intend to add a script, use a plain Control node instead." +msgstr "" + +#: scene/gui/control.cpp +msgid "" +"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\"." +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Alert!" +msgstr "" + +#: scene/gui/dialogs.cpp +msgid "Please Confirm..." +msgstr "" + +#: scene/gui/file_dialog.cpp +msgid "Must use a valid extension." +msgstr "" + +#: scene/gui/graph_edit.cpp +msgid "Enable grid minimap." +msgstr "" + +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + +#: scene/gui/popup.cpp +msgid "" +"Popups will hide by default unless you call popup() or any of the popup*() " +"functions. Making them visible for editing is fine, but they will hide upon " +"running." +msgstr "" + +#: scene/gui/range.cpp +msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." +msgstr "" + +#: scene/gui/scroll_container.cpp +msgid "" +"ScrollContainer is intended to work with a single child control.\n" +"Use a container as child (VBox, HBox, etc.), or a Control and set the custom " +"minimum size manually." +msgstr "" + +#: scene/gui/tree.cpp +msgid "(Other)" +msgstr "" + +#: scene/main/scene_tree.cpp +msgid "" +"Default Environment as specified in Project Settings (Rendering -> " +"Environment -> Default Environment) could not be loaded." +msgstr "" + +#: scene/main/timer.cpp +msgid "" +"Very low timer wait times (< 0.05 seconds) may behave in significantly " +"different ways depending on the rendered or physics frame rate.\n" +"Consider using a script's process loop instead of relying on a Timer for " +"very low wait times." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"This viewport is not set as render target. If you intend for it to display " +"its contents directly to the screen, make it a child of a Control so it can " +"obtain a size. Otherwise, make it a RenderTarget and assign its internal " +"texture to some node for display." +msgstr "" + +#: scene/main/viewport.cpp +msgid "" +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." +msgstr "" + +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "" +"The sampler port is connected but not used. Consider changing the source to " +"'SamplerPort'." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for preview." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid source for shader." +msgstr "" + +#: scene/resources/visual_shader_nodes.cpp +msgid "Invalid comparison function for that type." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Varying may not be assigned in the '%s' function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "" +"Varyings which assigned in 'vertex' function may not be reassigned in " +"'fragment' or 'light'." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "" +"Varyings which assigned in 'fragment' function may not be reassigned in " +"'vertex' or 'light'." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Fragment-stage varying could not been accessed in custom function!" +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to function." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Assignment to uniform." +msgstr "" + +#: servers/visual/shader_language.cpp +msgid "Constants cannot be modified." +msgstr "Hindi maaring maibago ang mga Constant." diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 73896955e3..6cab155c7e 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -63,13 +63,15 @@ # kahveciderin <kahveciderin@gmail.com>, 2021. # Lucifer25x <umudyt2006@gmail.com>, 2021. # Kadir Berk YaÄŸar <ykadirberk2@gmail.com>, 2021. +# Aysu Toprak <moonwater99@hotmail.com>, 2021. +# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021. 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-10-01 03:16+0000\n" -"Last-Translator: Kadir Berk YaÄŸar <ykadirberk2@gmail.com>\n" +"PO-Revision-Date: 2021-11-18 13:37+0000\n" +"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -77,7 +79,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -86,7 +88,7 @@ msgstr "convert() için geçersiz türde argüman, TYPE_* sabitlerini kullanın. #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "1 uzunluÄŸunda bir metin (bir karakter) bekleniyor." +msgstr "1 uzunluÄŸunda bir metin bekleniyor (bir karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -96,11 +98,11 @@ msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz for #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "İfade de geçersiz giriÅŸ %i (geçersiz)" +msgstr "İfadede geçersiz giriÅŸ %i (geçersiz)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "\"self\" kullanılamaz çünkü \"null\" deÄŸerini almış(geçersiz)" +msgstr "self kullanılamaz çünkü örnek boÅŸ (geçilmedi)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -128,7 +130,7 @@ msgstr "B" #: core/ustring.cpp msgid "KiB" -msgstr "KB" +msgstr "KiB" #: core/ustring.cpp msgid "MiB" @@ -977,7 +979,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "Sinyaller" +msgstr "sinyaller" #: editor/connections_dialog.cpp msgid "Filter signals" @@ -1321,7 +1323,6 @@ msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "\"%s\" öğesinin içeriÄŸi - %d dosya(lar) projenizle çakışıyor:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "\"%s\" öğesinin içeriÄŸi - Projenizle çakışan dosya yok:" @@ -1334,9 +1335,8 @@ msgid "The following files failed extraction from asset \"%s\":" msgstr "AÅŸağıdaki dosyaların \"%s\" kaynağından ayıklanmasında hata oluÅŸtu:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "Ve %s kadar dosya daha." +msgstr "(ve %s dosya daha)" #: editor/editor_asset_installer.cpp msgid "Asset \"%s\" installed successfully!" @@ -1352,7 +1352,6 @@ msgid "Install" msgstr "Kur" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" msgstr "Paket Yükleyici" @@ -1417,7 +1416,6 @@ msgid "Bypass" msgstr "Baypas" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" msgstr "Bus ayarları" @@ -1806,7 +1804,6 @@ msgid "Allows editing the node hierarchy in the Scene dock." msgstr "Scene dock'ta düğüm hiyerarÅŸisini düzenlemeye izin verir." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." @@ -1836,7 +1833,7 @@ msgstr "(hiç)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "Seçili olan '%s' profili kaldırılsın mı? (Geri alınamaz.)" +msgstr "Seçili olan '%s' profili kaldırılsın mı? Geri alınamaz." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1875,9 +1872,8 @@ msgid "Main Features:" msgstr "Ana Özellikler:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Aktif Sınıflar:" +msgstr "Düğümler ve Sınıflar:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -2167,7 +2163,7 @@ msgstr "varsayılan:" #: editor/editor_help.cpp msgid "Methods" -msgstr "Metotlar" +msgstr "Metodlar" #: editor/editor_help.cpp msgid "Theme Properties" @@ -2464,9 +2460,8 @@ msgstr "" "karşılanamadı." #: editor/editor_node.cpp -#, fuzzy msgid "Could not save one or more scenes!" -msgstr "Dönüştürülmüş doku kaydedilemedi:" +msgstr "Bir veya birden fazla sahne kaydedilemedi!" #: editor/editor_node.cpp msgid "Save All Scenes" @@ -2609,10 +2604,9 @@ msgstr "Kapatmadan önce deÄŸiÅŸklikler buraya '%s' kaydedilsin mi?" #: editor/editor_node.cpp msgid "%s no longer exists! Please specify a new save location." -msgstr "" +msgstr "%s artık mevcut deÄŸil! Lütfen yeni bir kaydetme konumu belirtin." #: editor/editor_node.cpp -#, fuzzy msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." @@ -2621,11 +2615,12 @@ msgstr "" "yine de kaydedildi." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "Sahneyi kaydedilmesi için kök düğüm gerekiyor." +msgstr "" +"Sahneyi kaydedilmesi için kök düğüm gerekiyor. Sahne aÄŸacını kullanarak bir " +"kök düğüm ekleyebilirsin." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -3362,9 +3357,8 @@ msgid "Merge With Existing" msgstr "Var Olanla BirleÅŸtir" #: editor/editor_node.cpp -#, fuzzy msgid "Apply MeshInstance Transforms" -msgstr "Animasyon DeÄŸiÅŸikliÄŸi Dönüşümü" +msgstr "MeshInstance dönüşümlerini uygula" #: editor/editor_node.cpp msgid "Open & Run a Script" @@ -3401,7 +3395,6 @@ msgid "Select" msgstr "Seç" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" msgstr "Geçerli Klasörü Seç" @@ -3728,9 +3721,8 @@ msgid "Uninstall these templates." msgstr "Bu ÅŸablonları kaldırın." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "'%s' dosyası bulunamadı." +msgstr "Hiç mevcut ayna bulunamadı." #: editor/export_template_manager.cpp msgid "Retrieving the mirror list..." @@ -4460,6 +4452,10 @@ msgid "" "Selecting another resource in the FileSystem dock without clicking Reimport " "first will discard changes made in the Import dock." msgstr "" +"Daha uygulanmamış deÄŸiÅŸiklere sahipsiniz. İçe aktarma seçeneklerinde yapılan " +"deÄŸiÅŸiklikleri uygulamak için Yeniden İçe Aktar'a tıklayın.\n" +"Önce Yeniden İçe Aktar'ı tıklatmadan Dosya Sisteminden baÅŸka bir kaynak " +"seçmek, İçe Aktarma yuvasında yapılan deÄŸiÅŸiklikleri yok sayacaktır." #: editor/import_dock.cpp msgid "Import As:" @@ -5595,13 +5591,13 @@ msgstr "" "Sahneyi kaydedip tekrar deneyin." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " "In Baked Light' and 'Generate Lightmap' flags are on." msgstr "" -"PiÅŸirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiÄŸinden ve 'Bake " -"Light' bayrağınının açık olduÄŸundan emin olun." +"PiÅŸirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiÄŸinden, 'PiÅŸirilmiÅŸ " +"Işık Kullan' ve 'Işık Haritası OluÅŸtur' bayrağınının açık olduÄŸundan emin " +"olun." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5937,18 +5933,16 @@ msgstr "Kip Seç" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Seçilen düğüm ya da geçiÅŸi sil." +msgstr "Sürükle: Seçili düğümü pivot etrafında döndürün." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move selected node." msgstr "Alt+Sürükle: Seçili düğümü taşıyın." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Seçilen düğüm ya da geçiÅŸi sil." +msgstr "V: Seçili düğümün pivot konumunu ayarlayın." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6196,14 +6190,12 @@ msgid "Clear Pose" msgstr "DuruÅŸu Temizle" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Düğüm Ekle" +msgstr "Buraya Düğüm Ekle" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Sahne(leri) Örnekle" +msgstr "Buraya Sahne Örnekle" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6218,49 +6210,40 @@ msgid "Pan View" msgstr "Yatay Kaydırma Görünümü" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 3.125%" msgstr "%3.125'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 6.25%" msgstr "%6,25'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 12.5%" msgstr "%12,5'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "UzaklaÅŸtır" +msgstr "%25'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "UzaklaÅŸtır" +msgstr "%50'ye yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "UzaklaÅŸtır" +msgstr "%100'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "UzaklaÅŸtır" +msgstr "%200'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "UzaklaÅŸtır" +msgstr "%400'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "UzaklaÅŸtır" +msgstr "%800'e yakınlaÅŸtır" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" @@ -6394,7 +6377,7 @@ msgstr "Sade 0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 1" -msgstr "Sade 1" +msgstr "Düz 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" @@ -6611,9 +6594,8 @@ msgstr "" "Bu, çarpışma tespiti için en hızlı (ancak en az doÄŸru) seçenektir." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Dışbükey Çarpışma KomÅŸusu OluÅŸtur" +msgstr "BasitleÅŸtirilmiÅŸ Dışbükey Çarpışma KardeÅŸi OluÅŸtur" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6630,14 +6612,14 @@ msgid "Create Multiple Convex Collision Siblings" msgstr "Dışbükey Çarpışma KomÅŸuları OluÅŸtur" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" -"Poligon bazlı bir çarpışma ÅŸekli oluÅŸtur.\n" -"Bu performans açısından üstteki iki seçeneÄŸin arasındadır." +"Poligon tabanlı bir çarpışma ÅŸekli oluÅŸtur.\n" +"Bu, tek bir dışbükey çarpışma ile poligon tabanlı bir çarpışma arasındaki " +"performans orta noktasıdır." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -7283,29 +7265,24 @@ msgid "ResourcePreloader" msgstr "KaynakÖnyükleyici" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Yatay Yansıt" +msgstr "Portalları Çevir" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Üretilen Nokta Sayısı:" +msgstr "Oda Noktalar OluÅŸtur" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Üretilen Nokta Sayısı:" +msgstr "Noktalar OluÅŸtur" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Yatay Yansıt" +msgstr "Portalı Çevir" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Occluder Set Transform" -msgstr "Dönüşümü Temizle" +msgstr "Engelleyici Dönüşümü Ayarla" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Center Node" @@ -7445,12 +7422,10 @@ msgid "Move Down" msgstr "AÅŸağı Taşı" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next Script" msgstr "Sonraki betik" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous Script" msgstr "Önceki betik" @@ -7803,26 +7778,24 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Bu iskelette hiç kemik yok, alt öge olarak Kemik2D düğümleri oluÅŸtur." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Dinlenme duruÅŸunu Kemiklere ata" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "İskelet2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Reset to Rest Pose" -msgstr "Kemikleri Dinlenme DuruÅŸuna ata" +msgstr "Dinlenme DuruÅŸuna Sıfırla" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Overwrite Rest Pose" -msgstr "Üzerine Yaz" +msgstr "Dinlenme DuruÅŸunun Üstüne Yaz" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7849,64 +7822,52 @@ msgid "Perspective" msgstr "Derinlik" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top Orthogonal" -msgstr "Dikey" +msgstr "Üst Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top Perspective" -msgstr "Derinlik" +msgstr "Üst Perspektif" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom Orthogonal" -msgstr "Dikey" +msgstr "Alt Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom Perspective" -msgstr "Derinlik" +msgstr "Alt Perspektif" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left Orthogonal" -msgstr "Dikey" +msgstr "Sol Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left Perspective" -msgstr "Derinlik" +msgstr "Sol Perspektif" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right Orthogonal" -msgstr "Dikey" +msgstr "SaÄŸ Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right Perspective" -msgstr "Derinlik" +msgstr "SaÄŸ Perspektif" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front Orthogonal" -msgstr "Dikey" +msgstr "Ön Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front Perspective" -msgstr "Derinlik" +msgstr "Ön Perspektif" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear Orthogonal" -msgstr "Dikey" +msgstr "Arka Dikaçılı" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear Perspective" -msgstr "Derinlik" +msgstr "Arka Perspektif" #. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. #: editor/plugins/spatial_editor_plugin.cpp @@ -8173,9 +8134,8 @@ msgstr "" "Oyun içi performansın gösteri olarak ele alınamaz." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Åžuna Dönüştür %s" +msgstr "Odaları Dönüştür" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8196,9 +8156,8 @@ msgstr "" "Yarı-açık göz: Gizmo aynı zamanda saydam yüzeylerden görünür (\"x-ray\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" -msgstr "Düğümleri zemine hizala" +msgstr "Düğümleri Zemine Yapıştır" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." @@ -8213,7 +8172,6 @@ msgid "Use Snap" msgstr "Yapışma Kullan" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Converts rooms for portal culling." msgstr "Odaları portal ayıklama için dönüştürür." @@ -8243,24 +8201,23 @@ msgstr "SaÄŸdan Görünüm" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Down" -msgstr "" +msgstr "Yörünge Görünümü Alt" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Left" -msgstr "" +msgstr "Yörünge Görünümü Sol" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View Right" -msgstr "" +msgstr "Yörünge Görünümü SaÄŸ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Orbit View Up" -msgstr "Önden Görünüm" +msgstr "Yörünge Görünümü Yukarı" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orbit View 180" -msgstr "" +msgstr "Yörünge Görünümü 180" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" @@ -8332,14 +8289,12 @@ msgid "View Grid" msgstr "Izgara Görünümü" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Görüntükapısı Ayarları" +msgstr "Portal Ayırmayı Görüntüle" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Occlusion Culling" -msgstr "Görüntükapısı Ayarları" +msgstr "Emilme Ayırmayı Görüntüle" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -11379,14 +11334,12 @@ msgid "Remove Translation" msgstr "Çeviriyi Kaldır" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle" +msgstr "Çeviri Kaynağı Yeniden EÅŸlemesi: %d Yol(lar) Ekle" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle" +msgstr "Çeviri Kaynağı Yeniden EÅŸlemesi: %d Yeniden Haritalama Ekle" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -12522,24 +12475,20 @@ msgid "Change Ray Shape Length" msgstr "Işın Åžeklinin UzunluÄŸunu DeÄŸiÅŸtir" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "EÄŸri Noktası Konumu Ayarla" +msgstr "Oda Noktası Konumunu Ayarla" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "EÄŸri Noktası Konumu Ayarla" +msgstr "Portal Noktası Konumunu Ayarla" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Occluder Sphere Radius" -msgstr "Silindir Åžekli Yarıçapını DeÄŸiÅŸtir" +msgstr "Engelleyici Silindir Yarıçapını Ayarla" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Occluder Sphere Position" -msgstr "EÄŸriyi Konumda Ayarla" +msgstr "Engelleyici Küre Konumunu Ayarla" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12650,14 +12599,12 @@ msgid "Object can't provide a length." msgstr "Nesne bir uzunluk saÄŸlayamaz." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Örüntü Kütüphanesini Dışa Aktar" +msgstr "Örüntüyü GLTF2 Olarak Dışa Aktar" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Dışa Aktar..." +msgstr "GLTF Dışa Aktar..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12700,9 +12647,8 @@ msgid "GridMap Paint" msgstr "IzgaraHaritası Boyama" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "IzgaraHaritası Seçimi Doldur" +msgstr "GridMap Seçimi" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12825,9 +12771,8 @@ msgid "Class name can't be a reserved keyword" msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz" #: modules/mono/csharp_script.cpp -#, fuzzy msgid "Build Solution" -msgstr "Seçimi Doldur" +msgstr "Solüsyonu İnÅŸa Et" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" @@ -12958,14 +12903,12 @@ msgid "Add Output Port" msgstr "Çıkış Portu Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Türü DeÄŸiÅŸtir" +msgstr "BaÄŸlantı Noktası Türünü DeÄŸiÅŸtir" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "GiriÅŸ noktası adını deÄŸiÅŸtir" +msgstr "BaÄŸlantı Noktası Adını DeÄŸiÅŸtir" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -13080,9 +13023,8 @@ msgid "Add Preload Node" msgstr "Önyüklenen Düğüm Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Düğüm Ekle" +msgstr "Düğüm(ler) Ekle" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -13346,33 +13288,28 @@ msgid "Running on %s" msgstr "%s üzerinde çalışıyor" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Exporting APK..." -msgstr "Tümünü Dışa Aktarma" +msgstr "APK dışarı aktarılıyor..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Uninstalling..." -msgstr "Kaldır" +msgstr "Kaldırılıyor..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Installing to device, please wait..." -msgstr "Yükleniyor, lütfen bekleyin..." +msgstr "Cihaza yükleniyor, lütfen bekleyin..." #: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "Cihaza yüklenemedi: %s" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Running on device..." -msgstr "Çalışan Özel Betik..." +msgstr "Cihazda çalışıyor..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not execute on device." -msgstr "Klasör oluÅŸturulamadı." +msgstr "Cihazda yürütülemedi." #: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." @@ -13497,27 +13434,24 @@ msgid "Signing release %s..." msgstr "%s sürümü imzalanıyor..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not find keystore, unable to export." -msgstr "Dışa aktarma için ÅŸablon açılamadı:" +msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." #: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner', #%d hatasıyla döndürüldü" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Verifying %s..." -msgstr "Ekliyor %s..." +msgstr "DoÄŸrulanıyor %s..." #: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "%s için 'apksigner' doÄŸrulaması baÅŸarısız oldu." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Exporting for Android" -msgstr "Tümünü Dışa Aktarma" +msgstr "Android için dışa aktarılıyor" #: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." @@ -13596,14 +13530,12 @@ msgstr "" "için gradle proje dizinini kontrol edin." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Package not found: %s" -msgstr "Animasyon bulunamadı: '%s'" +msgstr "Paket bulunamadı: %s" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Creating APK..." -msgstr "Konturlar oluÅŸturuluyor..." +msgstr "APK oluÅŸturuluyor..." #: platform/android/export/export_plugin.cpp msgid "" @@ -13625,14 +13557,12 @@ msgstr "" "aktarma ön ayarındaki eksik mimarilerin iÅŸaretini kaldırın." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Adding files..." -msgstr "Ekliyor %s..." +msgstr "Dosyalar ekleniyor..." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Could not export project files" -msgstr "Dosya yazılamadı:" +msgstr "Proje dosyaları dışa aktarılamadı" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -13687,29 +13617,24 @@ msgid "Could not write file:" msgstr "Dosya yazılamadı:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Dosya yazılamadı:" +msgstr "Dosya okunamadı:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Özel HTML çekirdeÄŸi okunamadı:" +msgstr "HTML kabuÄŸu okunamadı:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Klasör oluÅŸturulamadı." +msgstr "HTTP sunucu klasörü oluÅŸturulamadı:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Sahne kaydedilirken hata." +msgstr "HTTP sunucusu baÅŸlatılırken hata:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Geçersiz Tanımlayıcı:" +msgstr "Geçersiz paket tanımlayıcısı:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." @@ -14429,9 +14354,8 @@ msgid "Animation not found: '%s'" msgstr "Animasyon bulunamadı: '%s'" #: scene/animation/animation_player.cpp -#, fuzzy msgid "Anim Apply Reset" -msgstr "Animasyonu Sıfırla" +msgstr "Animasyon Sıfırlamayı Uygula" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14588,6 +14512,10 @@ msgid "" "Consider using a script's process loop instead of relying on a Timer for " "very low wait times." msgstr "" +"Çok düşük zamanlayıcı bekleme süreleri (< 0.05 saniye) kare hızına baÄŸlı " +"olarak, olması gerekenden farklı çalışabilir.\n" +"Çok düşük bekleme süreleri için Timer'a güvenmektense, bir betiÄŸin process " +"döngüsünü kullanmayı tercih edin." #: scene/main/viewport.cpp msgid "" @@ -14602,12 +14530,12 @@ msgstr "" "bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata." #: scene/main/viewport.cpp -#, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" -"Herhangi bir ÅŸeyi iÅŸlemek için görüntükapısı boyutu 0'dan büyük olmalıdır." +"Herhangi bir ÅŸeyi iÅŸlemek için her iki boyutta da görüntükapısı boyutu 2 " +"pikselden büyük ya da buna eÅŸit olmalıdır." #: scene/resources/occluder_shape.cpp msgid "OccluderShapeSphere Set Spheres" @@ -14634,9 +14562,8 @@ msgid "Invalid comparison function for that type." msgstr "Bu tür için geçersiz karşılaÅŸtırma iÅŸlevi." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "varyings yalnızca vertex iÅŸlevinde atanabilir." +msgstr "'%s' iÅŸlevinde farklılıklar atanamayabilir." #: servers/visual/shader_language.cpp msgid "" diff --git a/editor/translations/tt.po b/editor/translations/tt.po index 0f92208d1e..b9631ca8b4 100644 --- a/editor/translations/tt.po +++ b/editor/translations/tt.po @@ -7415,11 +7415,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po index 1b9404a393..b75bb26463 100644 --- a/editor/translations/tzm.po +++ b/editor/translations/tzm.po @@ -7413,11 +7413,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 215937ed55..401f0fa006 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -7762,14 +7762,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "У цього каркаÑа немає кіÑток, Ñтворіть хоч ÑкіÑÑŒ дочірні вузли Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Створити вільну позу з кіÑток" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Створити вільну позу Ð´Ð»Ñ ÐºÑ–Ñток" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Створити вільну позу з кіÑток" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "ПлоÑкий каркаÑ" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 7918638d9c..c557fa7dfc 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -7604,11 +7604,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" +msgid "Set Rest Pose to Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" +msgid "Create Rest Pose from Bones" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp diff --git a/editor/translations/vi.po b/editor/translations/vi.po index ceb4d7948e..4e1718101e 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -7716,14 +7716,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "Bá»™ xương không có xương, tạo má»™t số nút Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "Tạo tư thế nghỉ từ Xương" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "Äặt tư thế nghỉ cho Xương" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "Tạo tư thế nghỉ từ Xương" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Skeleton2D" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 6fef2d2f01..51e1b6212b 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -87,7 +87,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: 2021-10-21 10:31+0000\n" +"PO-Revision-Date: 2021-11-11 16:02+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" @@ -96,7 +96,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.9-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -5591,7 +5591,7 @@ msgstr "创建垂直水平å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)" -msgstr "å°† CanvasItem “%sâ€çš„ Pivot Offset 设为 (%d, %d)" +msgstr "å°† CanvasItem“%sâ€çš„ Pivot Offset 设为 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate %d CanvasItems" @@ -5599,19 +5599,19 @@ msgstr "旋转 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate CanvasItem \"%s\" to %d degrees" -msgstr "旋转 CanvasItem “%s†为 %d 度" +msgstr "å°† CanvasItem“%sâ€çš„æ—‹è½¬è®¾ä¸º %d 度" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem \"%s\" Anchor" -msgstr "移动 CanvasItem “%s†的锚点" +msgstr "移动 CanvasItem“%sâ€çš„锚点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "缩放 Node2D “%s†为 (%s, %s)" +msgstr "å°† Node2D“%sâ€ç¼©æ”¾ä¸º (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" -msgstr "缩放 Control “%s†为 (%d, %d)" +msgstr "å°† Control“%sâ€çš„大尿›´æ”¹ä¸º (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale %d CanvasItems" @@ -5619,7 +5619,7 @@ msgstr "缩放 %d 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "缩放 CanvasItem “%s†为 (%s, %s)" +msgstr "å°† CanvasItem“%sâ€ç¼©æ”¾ä¸º (%s, %s)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move %d CanvasItems" @@ -5627,7 +5627,7 @@ msgstr "移动 %s 个 CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem \"%s\" to (%d, %d)" -msgstr "移动 CanvasItem “%s†至 (%d, %d)" +msgstr "移动 CanvasItem“%sâ€è‡³ (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -7647,14 +7647,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "该骨架没有骨骼绑定,请创建一些 Bone2D 骨骼å节点。" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "从骨骼创建放æ¾å§¿åŠ¿" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "将放æ¾å§¿åŠ¿è®¾ç½®åˆ°éª¨éª¼" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "从骨骼创建放æ¾å§¿åŠ¿" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "2D 骨骼节点" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index c04f392c13..a3c6a8fa3d 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -7976,15 +7976,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Set Rest Pose to Bones" +msgstr "" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy msgid "Create Rest Pose from Bones" msgstr "é‹è¡Œå ´æ™¯" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Rest Pose to Bones" -msgstr "" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index c699fc48fb..a251712cb1 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -26,13 +26,14 @@ # BinotaLIU <me@binota.org>, 2020, 2021. # MintSoda <lionlxh@qq.com>, 2020. # meowmeowmeowcat <meowmeowcat1211@gmail.com>, 2021. +# anthonychen <anton1554970211@126.com>, 2021. 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-07-13 06:13+0000\n" -"Last-Translator: meowmeowmeowcat <meowmeowcat1211@gmail.com>\n" +"PO-Revision-Date: 2021-11-11 16:02+0000\n" +"Last-Translator: anthonychen <anton1554970211@126.com>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" "Language: zh_TW\n" @@ -40,7 +41,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.7.2-dev\n" +"X-Generator: Weblate 4.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -388,13 +389,11 @@ msgstr "æ’入動畫" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "無法開啟 \"%s\"。" +msgstr "無法開啟 \"%s\"" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "å‹•ç•«" @@ -404,7 +403,6 @@ msgstr "AnimationPlayer ä¸èƒ½æ’放自己,åªå¯æ’放其他 Player。" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" msgstr "屬性「%sã€ä¸å˜åœ¨ã€‚" @@ -632,7 +630,6 @@ msgid "Use Bezier Curves" msgstr "使用è²èŒ²æ›²ç·š" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" msgstr "貼上關éµç•«æ ¼" @@ -977,7 +974,7 @@ msgstr "找ä¸åˆ°èˆ‡ã€Œ%sã€ç›¸é—œçš„çµæžœã€‚" #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "缺少å°%sçš„å¯ç”¨è§£é‡‹ã€‚" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -7689,14 +7686,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes." msgstr "æ¤éª¨æž¶æœªåŒ…å«éª¨éª¼ï¼Œè«‹å»ºç«‹ä¸€äº›å Bone2D 節點。" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Create Rest Pose from Bones" -msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ¢å§¿å‹¢" - -#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" msgstr "è¨å®šéœæ¢å§¿å‹¢è‡³éª¨éª¼" #: editor/plugins/skeleton_2d_editor_plugin.cpp +msgid "Create Rest Pose from Bones" +msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ¢å§¿å‹¢" + +#: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" msgstr "Sekeleton2D" diff --git a/main/main.cpp b/main/main.cpp index f0f8c01592..ab44149988 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1136,7 +1136,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES); } - if (globals->setup(project_path, main_pack, upwards) == OK) { + if (globals->setup(project_path, main_pack, upwards, editor) == OK) { #ifdef TOOLS_ENABLED found_project = true; #endif @@ -1700,9 +1700,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) { RenderingServer::get_singleton()->set_default_clear_color(clear); if (show_logo) { //boot logo! - String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String()); - bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true); - bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true); + const bool boot_logo_image = GLOBAL_DEF("application/boot_splash/show_image", true); + const String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String()); + const bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true); + const bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true); ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image", PropertyInfo(Variant::STRING, "application/boot_splash/image", @@ -1710,14 +1711,19 @@ Error Main::setup2(Thread::ID p_main_tid_override) { Ref<Image> boot_logo; - boot_logo_path = boot_logo_path.strip_edges(); - - if (boot_logo_path != String()) { - boot_logo.instantiate(); - Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo); - if (load_err) { - ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash."); + if (boot_logo_image) { + if (boot_logo_path != String()) { + boot_logo.instantiate(); + Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo); + if (load_err) { + ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash."); + } } + } else { + // Create a 1×1 transparent image. This will effectively hide the splash image. + boot_logo.instantiate(); + boot_logo->create(1, 1, false, Image::FORMAT_RGBA8); + boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0)); } #if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) diff --git a/methods.py b/methods.py index b2eb7b7c77..3331e159c7 100644 --- a/methods.py +++ b/methods.py @@ -105,6 +105,8 @@ def update_version(module_version_string=""): f.write('#define VERSION_MODULE_CONFIG "' + str(version.module_config) + module_version_string + '"\n') f.write("#define VERSION_YEAR " + str(version.year) + "\n") f.write('#define VERSION_WEBSITE "' + str(version.website) + '"\n') + f.write('#define VERSION_DOCS_BRANCH "' + str(version.docs) + '"\n') + f.write('#define VERSION_DOCS_URL "https://docs.godotengine.org/en/" VERSION_DOCS_BRANCH\n') f.write("#endif // VERSION_GENERATED_GEN_H\n") f.close() diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html index 69e267f665..8b077a5725 100644 --- a/misc/dist/html/editor.html +++ b/misc/dist/html/editor.html @@ -281,8 +281,7 @@ <label for="videoMode" style="margin-right: 1rem">Video driver:</label> <select id="videoMode"> <option value="" selected="selected">Auto</option> - <option value="GLES2">WebGL</option> - <option value="GLES3">WebGL 2</option> + <option value="opengl3">WebGL 2</option> </select> <br /> <br /> @@ -562,8 +561,9 @@ const is_project_manager = args.filter(function(v) { return v == '--project-manager' }).length != 0; const is_game = !is_editor && !is_project_manager; if (video_driver) { - args.push('--video-driver', video_driver); + args.push('--rendering-driver', video_driver); } + if (is_game) { if (game) { console.error("A game is already running. Close it first"); @@ -651,9 +651,9 @@ selectVideoMode(); showTab('editor'); setLoaderEnabled(false); - const args = ['--project-manager']; + const args = ['--project-manager', '--single-window']; if (video_driver) { - args.push('--video-driver', video_driver); + args.push('--rendering-driver', video_driver); } editor.start({'args': args, 'persistentDrops': true}).then(function() { setStatusMode('hidden'); diff --git a/misc/hooks/README.md b/misc/hooks/README.md index e420c6cb5c..8732237244 100644 --- a/misc/hooks/README.md +++ b/misc/hooks/README.md @@ -28,7 +28,7 @@ so they should work out of the box on Linux/macOS. #### Windows ##### clang-format -- Download LLVM for Windows (version 8 or later) from +- Download LLVM for Windows (version 13 or later) from <https://releases.llvm.org/download.html> - Make sure LLVM is added to the `PATH` during installation diff --git a/misc/hooks/pre-commit-black b/misc/hooks/pre-commit-black index 76d97294da..8e22e6068e 100755 --- a/misc/hooks/pre-commit-black +++ b/misc/hooks/pre-commit-black @@ -14,7 +14,7 @@ DELETE_OLD_PATCHES=false # File types to parse. FILE_NAMES="SConstruct SCsub" -FILE_EXTS="py" +FILE_EXTS=".py" # Use pygmentize instead of cat to parse diff with highlighting. # Install it with `pip install pygments` (Linux) or `easy_install Pygments` (Mac) diff --git a/modules/bullet/area_bullet.cpp b/modules/bullet/area_bullet.cpp index b5a7da0c38..435069e25c 100644 --- a/modules/bullet/area_bullet.cpp +++ b/modules/bullet/area_bullet.cpp @@ -59,8 +59,8 @@ AreaBullet::AreaBullet() : AreaBullet::~AreaBullet() { // signal are handled by godot, so just clear without notify - for (int i = overlappingObjects.size() - 1; 0 <= i; --i) { - overlappingObjects[i].object->on_exit_area(this); + for (int i = 0; i < overlapping_shapes.size(); i++) { + overlapping_shapes[i].other_object->on_exit_area(this); } } @@ -70,30 +70,42 @@ void AreaBullet::dispatch_callbacks() { } isScratched = false; - // Reverse order because I've to remove EXIT objects - for (int i = overlappingObjects.size() - 1; 0 <= i; --i) { - OverlappingObjectData &otherObj = overlappingObjects.write[i]; + // Reverse order so items can be removed. + for (int i = overlapping_shapes.size() - 1; i >= 0; i--) { + OverlappingShapeData &overlapping_shape = overlapping_shapes.write[i]; - switch (otherObj.state) { + switch (overlapping_shape.state) { case OVERLAP_STATE_ENTER: - otherObj.state = OVERLAP_STATE_INSIDE; - call_event(otherObj.object, PhysicsServer3D::AREA_BODY_ADDED); - otherObj.object->on_enter_area(this); + overlapping_shape.state = OVERLAP_STATE_INSIDE; + call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_ADDED); + if (_overlapping_shape_count(overlapping_shape.other_object) == 1) { + // This object's first shape being added. + overlapping_shape.other_object->on_enter_area(this); + } break; case OVERLAP_STATE_EXIT: - call_event(otherObj.object, PhysicsServer3D::AREA_BODY_REMOVED); - otherObj.object->on_exit_area(this); - overlappingObjects.remove(i); // Remove after callback + call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_REMOVED); + if (_overlapping_shape_count(overlapping_shape.other_object) == 1) { + // This object's last shape being removed. + overlapping_shape.other_object->on_exit_area(this); + } + overlapping_shapes.remove(i); // Remove after callback break; + case OVERLAP_STATE_INSIDE: { + if (overlapping_shape.other_object->getType() == TYPE_RIGID_BODY) { + RigidBodyBullet *body = static_cast<RigidBodyBullet *>(overlapping_shape.other_object); + body->scratch_space_override_modificator(); + } + break; + } case OVERLAP_STATE_DIRTY: - case OVERLAP_STATE_INSIDE: break; } } } -void AreaBullet::call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status) { - InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_otherObject->getType())]; +void AreaBullet::call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status) { + InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_overlapping_shape.other_object->getType())]; if (!event.event_callback.is_valid()) { event.event_callback = Callable(); @@ -101,58 +113,97 @@ void AreaBullet::call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3 } call_event_res[0] = p_status; - call_event_res[1] = p_otherObject->get_self(); // Other body - call_event_res[2] = p_otherObject->get_instance_id(); // instance ID - call_event_res[3] = 0; // other_body_shape ID - call_event_res[4] = 0; // self_shape ID + call_event_res[1] = p_overlapping_shape.other_object->get_self(); // RID + call_event_res[2] = p_overlapping_shape.other_object->get_instance_id(); // Object ID + call_event_res[3] = p_overlapping_shape.other_shape_id; // Other object's shape ID + call_event_res[4] = p_overlapping_shape.our_shape_id; // This area's shape ID Callable::CallError outResp; Variant ret; event.event_callback.call((const Variant **)call_event_res, 5, ret, outResp); } -void AreaBullet::scratch() { - if (isScratched) { - return; +int AreaBullet::_overlapping_shape_count(CollisionObjectBullet *p_other_object) { + int count = 0; + for (int i = 0; i < overlapping_shapes.size(); i++) { + if (overlapping_shapes[i].other_object == p_other_object) { + count++; + } } - isScratched = true; + return count; } -void AreaBullet::clear_overlaps(bool p_notify) { - for (int i = overlappingObjects.size() - 1; 0 <= i; --i) { - if (p_notify) { - call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED); +int AreaBullet::_find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) { + for (int i = 0; i < overlapping_shapes.size(); i++) { + const OverlappingShapeData &overlapping_shape = overlapping_shapes[i]; + if (overlapping_shape.other_object == p_other_object && overlapping_shape.other_shape_id == p_other_shape_id && overlapping_shape.our_shape_id == p_our_shape_id) { + return i; } - overlappingObjects[i].object->on_exit_area(this); } - overlappingObjects.clear(); + return -1; } -void AreaBullet::remove_overlap(CollisionObjectBullet *p_object, bool p_notify) { - for (int i = overlappingObjects.size() - 1; 0 <= i; --i) { - if (overlappingObjects[i].object == p_object) { - if (p_notify) { - call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED); - } - overlappingObjects[i].object->on_exit_area(this); - overlappingObjects.remove(i); - break; +void AreaBullet::mark_all_overlaps_dirty() { + OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw(); + for (int i = 0; i < overlapping_shapes.size(); i++) { + // Don't overwrite OVERLAP_STATE_ENTER state. + if (overlapping_shapes_w[i].state != OVERLAP_STATE_ENTER) { + overlapping_shapes_w[i].state = OVERLAP_STATE_DIRTY; } } } -int AreaBullet::find_overlapping_object(CollisionObjectBullet *p_colObj) { - const int size = overlappingObjects.size(); - for (int i = 0; i < size; ++i) { - if (overlappingObjects[i].object == p_colObj) { - return i; +void AreaBullet::mark_object_overlaps_inside(CollisionObjectBullet *p_other_object) { + OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw(); + for (int i = 0; i < overlapping_shapes.size(); i++) { + if (overlapping_shapes_w[i].other_object == p_other_object && overlapping_shapes_w[i].state == OVERLAP_STATE_DIRTY) { + overlapping_shapes_w[i].state = OVERLAP_STATE_INSIDE; } } - return -1; +} + +void AreaBullet::set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) { + int i = _find_overlapping_shape(p_other_object, p_other_shape_id, p_our_shape_id); + if (i == -1) { // Not found, create new one. + OverlappingShapeData overlapping_shape(p_other_object, OVERLAP_STATE_ENTER, p_other_shape_id, p_our_shape_id); + overlapping_shapes.push_back(overlapping_shape); + p_other_object->notify_new_overlap(this); + isScratched = true; + } else { + overlapping_shapes.ptrw()[i].state = OVERLAP_STATE_INSIDE; + } +} + +void AreaBullet::mark_all_dirty_overlaps_as_exit() { + OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw(); + for (int i = 0; i < overlapping_shapes.size(); i++) { + if (overlapping_shapes[i].state == OVERLAP_STATE_DIRTY) { + overlapping_shapes_w[i].state = OVERLAP_STATE_EXIT; + isScratched = true; + } + } +} + +void AreaBullet::remove_object_overlaps(CollisionObjectBullet *p_object) { + // Reverse order so items can be removed. + for (int i = overlapping_shapes.size() - 1; i >= 0; i--) { + if (overlapping_shapes[i].other_object == p_object) { + overlapping_shapes.remove(i); + } + } +} + +void AreaBullet::clear_overlaps() { + for (int i = 0; i < overlapping_shapes.size(); i++) { + call_event(overlapping_shapes[i], PhysicsServer3D::AREA_BODY_REMOVED); + overlapping_shapes[i].other_object->on_exit_area(this); + } + overlapping_shapes.clear(); } void AreaBullet::set_monitorable(bool p_monitorable) { monitorable = p_monitorable; + updated = true; } bool AreaBullet::is_monitoring() const { @@ -162,6 +213,7 @@ bool AreaBullet::is_monitoring() const { void AreaBullet::main_shape_changed() { CRASH_COND(!get_main_shape()); btGhost->setCollisionShape(get_main_shape()); + updated = true; } void AreaBullet::reload_body() { @@ -174,7 +226,7 @@ void AreaBullet::reload_body() { void AreaBullet::set_space(SpaceBullet *p_space) { // Clear the old space if there is one if (space) { - clear_overlaps(false); + clear_overlaps(); isScratched = false; // Remove this object form the physics world @@ -192,24 +244,7 @@ void AreaBullet::on_collision_filters_change() { if (space) { space->reload_collision_filters(this); } -} - -void AreaBullet::add_overlap(CollisionObjectBullet *p_otherObject) { - scratch(); - overlappingObjects.push_back(OverlappingObjectData(p_otherObject, OVERLAP_STATE_ENTER)); - p_otherObject->notify_new_overlap(this); -} - -void AreaBullet::put_overlap_as_exit(int p_index) { - scratch(); - overlappingObjects.write[p_index].state = OVERLAP_STATE_EXIT; -} - -void AreaBullet::put_overlap_as_inside(int p_index) { - // This check is required to be sure this body was inside - if (OVERLAP_STATE_DIRTY == overlappingObjects[p_index].state) { - overlappingObjects.write[p_index].state = OVERLAP_STATE_INSIDE; - } + updated = true; } void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value) { @@ -241,6 +276,7 @@ void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant default: WARN_PRINT("Area doesn't support this parameter in the Bullet backend: " + itos(p_param)); } + isScratched = true; } Variant AreaBullet::get_param(PhysicsServer3D::AreaParameter p_param) const { @@ -276,6 +312,7 @@ void AreaBullet::set_event_callback(Type p_callbackObjectType, const Callable &p set_godot_object_flags(get_godot_object_flags() | GOF_IS_MONITORING_AREA); } else { set_godot_object_flags(get_godot_object_flags() & (~GOF_IS_MONITORING_AREA)); + clear_overlaps(); } } diff --git a/modules/bullet/area_bullet.h b/modules/bullet/area_bullet.h index d96c550082..3bff364cc1 100644 --- a/modules/bullet/area_bullet.h +++ b/modules/bullet/area_bullet.h @@ -43,8 +43,6 @@ class btGhostObject; class AreaBullet : public RigidCollisionObjectBullet { - friend void SpaceBullet::check_ghost_overlaps(); - public: struct InOutEventCallback { Callable event_callback; @@ -59,21 +57,19 @@ public: OVERLAP_STATE_EXIT // Mark ended overlaps }; - struct OverlappingObjectData { - CollisionObjectBullet *object = nullptr; - OverlapState state = OVERLAP_STATE_ENTER; - - OverlappingObjectData() {} - OverlappingObjectData(CollisionObjectBullet *p_object, OverlapState p_state) : - object(p_object), - state(p_state) {} - OverlappingObjectData(const OverlappingObjectData &other) { - operator=(other); - } - void operator=(const OverlappingObjectData &other) { - object = other.object; - state = other.state; - } + struct OverlappingShapeData { + CollisionObjectBullet *other_object = nullptr; + OverlapState state = OVERLAP_STATE_DIRTY; + uint32_t other_shape_id = 0; + uint32_t our_shape_id = 0; + + OverlappingShapeData() {} + + OverlappingShapeData(CollisionObjectBullet *p_other_object, OverlapState p_state, uint32_t p_other_shape_id, uint32_t p_our_shape_id) : + other_object(p_other_object), + state(p_state), + other_shape_id(p_other_shape_id), + our_shape_id(p_our_shape_id) {} }; private: @@ -82,7 +78,9 @@ private: Variant *call_event_res_ptr[5] = {}; btGhostObject *btGhost = nullptr; - Vector<OverlappingObjectData> overlappingObjects; + Vector<OverlappingShapeData> overlapping_shapes; + int _overlapping_shape_count(CollisionObjectBullet *p_other_object); + int _find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id); bool monitorable = true; PhysicsServer3D::AreaSpaceOverrideMode spOv_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED; @@ -104,7 +102,6 @@ public: ~AreaBullet(); _FORCE_INLINE_ btGhostObject *get_bt_ghost() const { return btGhost; } - int find_overlapping_object(CollisionObjectBullet *p_colObj); void set_monitorable(bool p_monitorable); _FORCE_INLINE_ bool is_monitorable() const { return monitorable; } @@ -143,20 +140,18 @@ public: virtual void set_space(SpaceBullet *p_space); virtual void dispatch_callbacks(); - void call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status); - void scratch(); - - void clear_overlaps(bool p_notify); - // Dispatch the callbacks and removes from overlapping list - void remove_overlap(CollisionObjectBullet *p_object, bool p_notify); + void call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status); virtual void on_collision_filters_change(); virtual void on_collision_checker_start() {} - virtual void on_collision_checker_end() { isTransformChanged = false; } - - void add_overlap(CollisionObjectBullet *p_otherObject); - void put_overlap_as_exit(int p_index); - void put_overlap_as_inside(int p_index); + virtual void on_collision_checker_end() { updated = false; } + + void mark_all_overlaps_dirty(); + void mark_object_overlaps_inside(CollisionObjectBullet *p_other_object); + void set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id); + void mark_all_dirty_overlaps_as_exit(); + void remove_object_overlaps(CollisionObjectBullet *p_object); + void clear_overlaps(); void set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value); Variant get_param(PhysicsServer3D::AreaParameter p_param) const; diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp index c45bd5bbc0..987a45ad5f 100644 --- a/modules/bullet/collision_object_bullet.cpp +++ b/modules/bullet/collision_object_bullet.cpp @@ -93,11 +93,9 @@ CollisionObjectBullet::CollisionObjectBullet(Type p_type) : type(p_type) {} CollisionObjectBullet::~CollisionObjectBullet() { - // Remove all overlapping, notify is not required since godot take care of it - for (int i = areasOverlapped.size() - 1; 0 <= i; --i) { - areasOverlapped[i]->remove_overlap(this, /*Notify*/ false); + for (int i = 0; i < areasOverlapped.size(); i++) { + areasOverlapped[i]->remove_object_overlaps(this); } - destroyBulletCollisionObject(); } @@ -178,7 +176,9 @@ bool CollisionObjectBullet::is_collisions_response_enabled() { } void CollisionObjectBullet::notify_new_overlap(AreaBullet *p_area) { - areasOverlapped.push_back(p_area); + if (areasOverlapped.find(p_area) == -1) { + areasOverlapped.push_back(p_area); + } } void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) { @@ -187,6 +187,7 @@ void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) { void CollisionObjectBullet::set_godot_object_flags(int flags) { bt_collision_object->setUserIndex2(flags); + updated = true; } int CollisionObjectBullet::get_godot_object_flags() const { @@ -220,7 +221,7 @@ const btTransform &CollisionObjectBullet::get_transform__bullet() const { } void CollisionObjectBullet::notify_transform_changed() { - isTransformChanged = true; + updated = true; } RigidCollisionObjectBullet::~RigidCollisionObjectBullet() { diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h index 944ab89b87..6d2c564e44 100644 --- a/modules/bullet/collision_object_bullet.h +++ b/modules/bullet/collision_object_bullet.h @@ -128,7 +128,7 @@ protected: /// New area is added when overlap with new area (AreaBullet::addOverlap), then is removed when it exit (CollisionObjectBullet::onExitArea) /// This array is used mainly to know which area hold the pointer of this object Vector<AreaBullet *> areasOverlapped; - bool isTransformChanged = false; + bool updated = false; public: CollisionObjectBullet(Type p_type); @@ -206,9 +206,9 @@ public: Transform3D get_transform() const; virtual void set_transform__bullet(const btTransform &p_global_transform); virtual const btTransform &get_transform__bullet() const; - - bool is_transform_changed() const { return isTransformChanged; } virtual void notify_transform_changed(); + + bool is_updated() const { return updated; } }; class RigidCollisionObjectBullet : public CollisionObjectBullet, public ShapeOwnerBullet { diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp index 7b20fad28c..4faab19539 100644 --- a/modules/bullet/rigid_body_bullet.cpp +++ b/modules/bullet/rigid_body_bullet.cpp @@ -420,7 +420,7 @@ void RigidBodyBullet::on_collision_checker_start() { void RigidBodyBullet::on_collision_checker_end() { // Always true if active and not a static or kinematic body - isTransformChanged = btBody->isActive() && !btBody->isStaticOrKinematicObject(); + updated = btBody->isActive() && !btBody->isStaticOrKinematicObject(); } bool RigidBodyBullet::add_collision_object(RigidBodyBullet *p_otherObject, const Vector3 &p_hitWorldLocation, const Vector3 &p_hitLocalLocation, const Vector3 &p_hitNormal, const real_t &p_appliedImpulse, int p_other_shape_index, int p_local_shape_index) { diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp index 66d7370bd7..7aa3815c94 100644 --- a/modules/bullet/space_bullet.cpp +++ b/modules/bullet/space_bullet.cpp @@ -662,101 +662,77 @@ void SpaceBullet::destroy_world() { } void SpaceBullet::check_ghost_overlaps() { - /// Algorithm support variables - btCollisionShape *other_body_shape; - btConvexShape *area_shape; - btGjkPairDetector::ClosestPointInput gjk_input; - AreaBullet *area; - int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1); - - /// For each areas - for (x = areas.size() - 1; 0 <= x; --x) { - area = areas[x]; - - btVector3 area_scale(area->get_bt_body_scale()); - + // For each area + for (int area_idx = 0; area_idx < areas.size(); area_idx++) { + AreaBullet *area = areas[area_idx]; if (!area->is_monitoring()) { continue; } - /// 1. Reset all states - for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) { - AreaBullet::OverlappingObjectData &otherObj = area->overlappingObjects.write[i]; - // This check prevent the overwrite of ENTER state - // if this function is called more times before dispatchCallbacks - if (otherObj.state != AreaBullet::OVERLAP_STATE_ENTER) { - otherObj.state = AreaBullet::OVERLAP_STATE_DIRTY; - } - } + btGhostObject *bt_ghost = area->get_bt_ghost(); + const btTransform &area_transform = area->get_transform__bullet(); + const btVector3 &area_scale(area->get_bt_body_scale()); - /// 2. Check all overlapping objects using GJK + // Mark all current overlapping shapes dirty. + area->mark_all_overlaps_dirty(); - const btAlignedObjectArray<btCollisionObject *> ghostOverlaps = area->get_bt_ghost()->getOverlappingPairs(); + // Broadphase + const btAlignedObjectArray<btCollisionObject *> overlapping_pairs = bt_ghost->getOverlappingPairs(); + // Narrowphase + for (int pair_idx = 0; pair_idx < overlapping_pairs.size(); pair_idx++) { + btCollisionObject *other_bt_collision_object = overlapping_pairs[pair_idx]; + RigidCollisionObjectBullet *other_object = static_cast<RigidCollisionObjectBullet *>(other_bt_collision_object->getUserPointer()); + const btTransform &other_transform = other_object->get_transform__bullet(); + const btVector3 &other_scale(other_object->get_bt_body_scale()); - // For each overlapping - for (i = ghostOverlaps.size() - 1; 0 <= i; --i) { - bool hasOverlap = false; - btCollisionObject *overlapped_bt_co = ghostOverlaps[i]; - RigidCollisionObjectBullet *otherObject = static_cast<RigidCollisionObjectBullet *>(overlapped_bt_co->getUserPointer()); - btVector3 other_body_scale(otherObject->get_bt_body_scale()); - - if (!area->is_transform_changed() && !otherObject->is_transform_changed()) { - hasOverlap = -1 != area->find_overlapping_object(otherObject); - goto collision_found; + if (!area->is_updated() && !other_object->is_updated()) { + area->mark_object_overlaps_inside(other_object); + continue; } - if (overlapped_bt_co->getUserIndex() == CollisionObjectBullet::TYPE_AREA) { - if (!static_cast<AreaBullet *>(overlapped_bt_co->getUserPointer())->is_monitorable()) { + if (other_bt_collision_object->getUserIndex() == CollisionObjectBullet::TYPE_AREA) { + if (!static_cast<AreaBullet *>(other_bt_collision_object->getUserPointer())->is_monitorable()) { continue; } - } else if (overlapped_bt_co->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) { + } else if (other_bt_collision_object->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) { continue; } // For each area shape - for (y = area->get_shape_count() - 1; 0 <= y; --y) { - if (!area->get_bt_shape(y)->isConvex()) { + for (int our_shape_id = 0; our_shape_id < area->get_shape_count(); our_shape_id++) { + btCollisionShape *area_shape = area->get_bt_shape(our_shape_id); + if (!area_shape->isConvex()) { continue; } + btConvexShape *area_convex_shape = static_cast<btConvexShape *>(area_shape); - btTransform area_shape_treansform(area->get_bt_shape_transform(y)); - area_shape_treansform.getOrigin() *= area_scale; - - gjk_input.m_transformA = - area->get_transform__bullet() * - area_shape_treansform; - - area_shape = static_cast<btConvexShape *>(area->get_bt_shape(y)); + btTransform area_shape_transform(area->get_bt_shape_transform(our_shape_id)); + area_shape_transform.getOrigin() *= area_scale; + btGjkPairDetector::ClosestPointInput gjk_input; + gjk_input.m_transformA = area_transform * area_shape_transform; // For each other object shape - for (z = otherObject->get_shape_count() - 1; 0 <= z; --z) { - other_body_shape = static_cast<btCollisionShape *>(otherObject->get_bt_shape(z)); - - btTransform other_shape_transform(otherObject->get_bt_shape_transform(z)); - other_shape_transform.getOrigin() *= other_body_scale; - - gjk_input.m_transformB = - otherObject->get_transform__bullet() * - other_shape_transform; + for (int other_shape_id = 0; other_shape_id < other_object->get_shape_count(); other_shape_id++) { + btCollisionShape *other_shape = other_object->get_bt_shape(other_shape_id); + btTransform other_shape_transform(other_object->get_bt_shape_transform(other_shape_id)); + other_shape_transform.getOrigin() *= other_scale; + gjk_input.m_transformB = other_transform * other_shape_transform; - if (other_body_shape->isConvex()) { + if (other_shape->isConvex()) { btPointCollector result; btGjkPairDetector gjk_pair_detector( - area_shape, - static_cast<btConvexShape *>(other_body_shape), + area_convex_shape, + static_cast<btConvexShape *>(other_shape), gjk_simplex_solver, gjk_epa_pen_solver); - gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr); - if (0 >= result.m_distance) { - hasOverlap = true; - goto collision_found; + gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr); + if (result.m_distance <= 0) { + area->set_overlap(other_object, other_shape_id, our_shape_id); } - - } else { - btCollisionObjectWrapper obA(nullptr, area_shape, area->get_bt_ghost(), gjk_input.m_transformA, -1, y); - btCollisionObjectWrapper obB(nullptr, other_body_shape, otherObject->get_bt_collision_object(), gjk_input.m_transformB, -1, z); - + } else { // Other shape is not convex. + btCollisionObjectWrapper obA(nullptr, area_convex_shape, bt_ghost, gjk_input.m_transformA, -1, our_shape_id); + btCollisionObjectWrapper obB(nullptr, other_shape, other_bt_collision_object, gjk_input.m_transformB, -1, other_shape_id); btCollisionAlgorithm *algorithm = dispatcher->findAlgorithm(&obA, &obB, nullptr, BT_CONTACT_POINT_ALGORITHMS); if (!algorithm) { @@ -765,42 +741,20 @@ void SpaceBullet::check_ghost_overlaps() { GodotDeepPenetrationContactResultCallback contactPointResult(&obA, &obB); algorithm->processCollision(&obA, &obB, dynamicsWorld->getDispatchInfo(), &contactPointResult); - algorithm->~btCollisionAlgorithm(); dispatcher->freeCollisionAlgorithm(algorithm); if (contactPointResult.hasHit()) { - hasOverlap = true; - goto collision_found; + area->set_overlap(other_object, our_shape_id, other_shape_id); } } + } // End for each other object shape + } // End for each area shape + } // End for each overlapping pair - } // ~For each other object shape - } // ~For each area shape - - collision_found: - if (!hasOverlap) { - continue; - } - - indexOverlap = area->find_overlapping_object(otherObject); - if (-1 == indexOverlap) { - // Not found - area->add_overlap(otherObject); - } else { - // Found - area->put_overlap_as_inside(indexOverlap); - } - } - - /// 3. Remove not overlapping - for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) { - // If the overlap has DIRTY state it means that it's no more overlapping - if (area->overlappingObjects[i].state == AreaBullet::OVERLAP_STATE_DIRTY) { - area->put_overlap_as_exit(i); - } - } - } + // All overlapping shapes still marked dirty must have exited. + area->mark_all_dirty_overlaps_as_exit(); + } // End for each area } void SpaceBullet::check_body_collision() { @@ -835,7 +789,7 @@ void SpaceBullet::check_body_collision() { btManifoldPoint &pt = contactManifold->getContactPoint(0); #endif if ( - pt.getDistance() <= 0.0 || + pt.getDistance() < 0.0 || bodyA->was_colliding(bodyB) || bodyB->was_colliding(bodyA)) { Vector3 collisionWorldPosition; diff --git a/modules/csg/doc_classes/CSGShape3D.xml b/modules/csg/doc_classes/CSGShape3D.xml index 446269f3f0..f5031064d6 100644 --- a/modules/csg/doc_classes/CSGShape3D.xml +++ b/modules/csg/doc_classes/CSGShape3D.xml @@ -59,10 +59,10 @@ <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1"> The physics layers this area is in. Collidable objects can exist in any of 32 different layers. These layers work like a tagging system, and are not visual. A collidable can use these layers to select with which objects it can collide, using the collision_mask property. - A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The physics layers this CSG shape scans for collisions. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers this CSG shape scans for collisions. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="operation" type="int" setter="set_operation" getter="get_operation" enum="CSGShape3D.Operation" default="0"> The operation that is performed on this shape. This is ignored for the first CSG child node as the operation is between this node and the previous child of this nodes parent. diff --git a/modules/enet/doc_classes/ENetMultiplayerPeer.xml b/modules/enet/doc_classes/ENetMultiplayerPeer.xml index 22136c3944..d2456d3360 100644 --- a/modules/enet/doc_classes/ENetMultiplayerPeer.xml +++ b/modules/enet/doc_classes/ENetMultiplayerPeer.xml @@ -8,7 +8,7 @@ [b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to make your server accessible on the public Internet, you only need to forward the server port in UDP. You can use the [UPNP] class to try to forward the server port automatically when starting the server. </description> <tutorials> - <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link> + <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link> <link title="API documentation on the ENet website">http://enet.bespin.org/usergroup0.html</link> </tutorials> <methods> diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml index 6b3bd714b9..21df640ebc 100644 --- a/modules/gdnative/doc_classes/GDNativeLibrary.xml +++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml @@ -7,8 +7,8 @@ A GDNative library can implement [NativeScript]s, global functions to call with the [GDNative] class, or low-level engine extensions through interfaces such as XRInterfaceGDNative. The library must be compiled for each platform and architecture that the project will run on. </description> <tutorials> - <link title="GDNative C example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_c_example.html</link> - <link title="GDNative C++ example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_cpp_example.html</link> + <link title="GDNative C example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_c_example.html</link> + <link title="GDNative C++ example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_cpp_example.html</link> </tutorials> <methods> <method name="get_current_dependencies" qualifiers="const"> diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml index 5b476cda01..9c8adb4cf1 100644 --- a/modules/gdscript/doc_classes/@GDScript.xml +++ b/modules/gdscript/doc_classes/@GDScript.xml @@ -7,7 +7,7 @@ List of core built-in GDScript functions. Math functions and other utilities. Everything else is provided by objects. (Keywords: builtin, built in, global functions.) </description> <tutorials> - <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link> + <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link> </tutorials> <methods> <method name="Color8"> diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml index 0a448ed88c..5acb29e748 100644 --- a/modules/gdscript/doc_classes/GDScript.xml +++ b/modules/gdscript/doc_classes/GDScript.xml @@ -8,7 +8,7 @@ [method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> - <link title="GDScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/index.html</link> + <link title="GDScript documentation index">$DOCS_URL/tutorials/scripting/gdscript/index.html</link> </tutorials> <methods> <method name="get_as_byte_code" qualifiers="const"> diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index cd8fd361c5..1ecde53dd0 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -3001,7 +3001,7 @@ void GDScriptAnalyzer::reduce_preload(GDScriptParser::PreloadNode *p_preload) { // TODO: Don't load if validating: use completion cache. p_preload->resource = ResourceLoader::load(p_preload->resolved_path); if (p_preload->resource.is_null()) { - push_error(vformat(R"(Could not p_preload resource file "%s".)", p_preload->resolved_path), p_preload->path); + push_error(vformat(R"(Could not preload resource file "%s".)", p_preload->resolved_path), p_preload->path); } } } diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index fac1e61b18..f3317aeada 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -6115,7 +6115,10 @@ void GLTFDocument::_convert_mesh_instances(Ref<GLTFState> state) { int bone_cnt = skeleton->get_bone_count(); ERR_FAIL_COND(bone_cnt != gltf_skeleton->joints.size()); - ObjectID gltf_skin_key = skin->get_instance_id(); + ObjectID gltf_skin_key; + if (skin.is_valid()) { + gltf_skin_key = skin->get_instance_id(); + } ObjectID gltf_skel_key = godot_skeleton->get_instance_id(); GLTFSkinIndex skin_gltf_i = -1; GLTFNodeIndex root_gltf_i = -1; diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index c1dbe63628..73315350ff 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -11,7 +11,7 @@ [b]Note:[/b] GridMap doesn't extend [VisualInstance3D] and therefore can't be hidden or cull masked based on [member VisualInstance3D.layers]. If you make a light not affect the first layer, the whole GridMap won't be lit by the light in question. </description> <tutorials> - <link title="Using gridmaps">https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html</link> + <link title="Using gridmaps">$DOCS_URL/tutorials/3d/using_gridmaps.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link> </tutorials> @@ -173,7 +173,7 @@ GridMaps act as static bodies, meaning they aren't affected by gravity or other forces. They only affect other physics bodies that collide with them. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The physics layers this GridMap detects collisions in. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. + The physics layers this GridMap detects collisions in. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information. </member> <member name="mesh_library" type="MeshLibrary" setter="set_mesh_library" getter="get_mesh_library"> The assigned [MeshLibrary]. diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index ccd2b0d473..d827ce2fb0 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -759,7 +759,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D accumulated_floor_delta += delta; int step = 0; if (ABS(accumulated_floor_delta) > 1.0) { - step = SGN(accumulated_floor_delta); + step = SIGN(accumulated_floor_delta); accumulated_floor_delta -= step; } if (step) { diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl index 158cd960c4..7bb8346c47 100644 --- a/modules/lightmapper_rd/lm_compute.glsl +++ b/modules/lightmapper_rd/lm_compute.glsl @@ -235,19 +235,39 @@ uint trace_ray(vec3 p_from, vec3 p_to return RAY_MISS; } +// https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering/ +uint hash(uint value) { + uint state = value * 747796405u + 2891336453u; + uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (word >> 22u) ^ word; +} + +uint random_seed(ivec3 seed) { + return hash(seed.x ^ hash(seed.y ^ hash(seed.z))); +} + +// generates a random value in range [0.0, 1.0) +float randomize(inout uint value) { + value = hash(value); + return float(value / 4294967296.0); +} + const float PI = 3.14159265f; -const float GOLDEN_ANGLE = PI * (3.0 - sqrt(5.0)); - -vec3 vogel_hemisphere(uint p_index, uint p_count, float p_offset) { - float r = sqrt(float(p_index) + 0.5f) / sqrt(float(p_count)); - float theta = float(p_index) * GOLDEN_ANGLE + p_offset; - float y = cos(r * PI * 0.5); - float l = sin(r * PI * 0.5); - return vec3(l * cos(theta), l * sin(theta), y); + +// http://www.realtimerendering.com/raytracinggems/unofficial_RayTracingGems_v1.4.pdf (chapter 15) +vec3 generate_hemisphere_uniform_direction(inout uint noise) { + float noise1 = randomize(noise); + float noise2 = randomize(noise) * 2.0 * PI; + + float factor = sqrt(1 - (noise1 * noise1)); + return vec3(factor * cos(noise2), factor * sin(noise2), noise1); } -float quick_hash(vec2 pos) { - return fract(sin(dot(pos * 19.19, vec2(49.5791, 97.413))) * 49831.189237); +vec3 generate_hemisphere_cosine_weighted_direction(inout uint noise) { + float noise1 = randomize(noise); + float noise2 = randomize(noise) * 2.0 * PI; + + return vec3(sqrt(noise1) * cos(noise2), sqrt(noise1) * sin(noise2), sqrt(1.0 - noise1)); } float get_omni_attenuation(float distance, float inv_range, float decay) { @@ -404,8 +424,9 @@ void main() { #endif vec3 light_average = vec3(0.0); float active_rays = 0.0; + uint noise = random_seed(ivec3(params.ray_from, atlas_pos)); for (uint i = params.ray_from; i < params.ray_to; i++) { - vec3 ray_dir = normal_mat * vogel_hemisphere(i, params.ray_count, quick_hash(vec2(atlas_pos))); + vec3 ray_dir = normal_mat * generate_hemisphere_cosine_weighted_direction(noise); uint tidx; vec3 barycentric; @@ -550,8 +571,9 @@ void main() { vec4(0.0), vec4(0.0)); + uint noise = random_seed(ivec3(params.ray_from, probe_index, 49502741 /* some prime */)); for (uint i = params.ray_from; i < params.ray_to; i++) { - vec3 ray_dir = vogel_hemisphere(i, params.ray_count, quick_hash(vec2(float(probe_index), 0.0))); + vec3 ray_dir = generate_hemisphere_uniform_direction(noise); if (bool(i & 1)) { //throw to both sides, so alternate them ray_dir.z *= -1.0; diff --git a/modules/minimp3/resource_importer_mp3.cpp b/modules/minimp3/resource_importer_mp3.cpp index dc360c12ba..b2a755e23b 100644 --- a/modules/minimp3/resource_importer_mp3.cpp +++ b/modules/minimp3/resource_importer_mp3.cpp @@ -54,7 +54,7 @@ String ResourceImporterMP3::get_resource_type() const { return "AudioStreamMP3"; } -bool ResourceImporterMP3::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterMP3::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -66,7 +66,7 @@ String ResourceImporterMP3::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterMP3::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterMP3::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0)); } diff --git a/modules/minimp3/resource_importer_mp3.h b/modules/minimp3/resource_importer_mp3.h index 71b51887a2..356ec77d22 100644 --- a/modules/minimp3/resource_importer_mp3.h +++ b/modules/minimp3/resource_importer_mp3.h @@ -47,8 +47,8 @@ public: virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml index 2bca8bc24e..14c62b4bb0 100644 --- a/modules/mono/doc_classes/CSharpScript.xml +++ b/modules/mono/doc_classes/CSharpScript.xml @@ -8,7 +8,7 @@ See also [GodotSharp]. </description> <tutorials> - <link title="C# documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html</link> + <link title="C# documentation index">$DOCS_URL/tutorials/scripting/c_sharp/index.html</link> </tutorials> <methods> <method name="new" qualifiers="vararg"> diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs index 70a2cf5695..850ae7fc3b 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs @@ -666,21 +666,40 @@ namespace Godot _size = new Vector3(width, height, depth); } + /// <summary> + /// Returns <see langword="true"/> if the AABBs are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left AABB.</param> + /// <param name="right">The right AABB.</param> + /// <returns>Whether or not the AABBs are exactly equal.</returns> public static bool operator ==(AABB left, AABB right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the AABBs are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left AABB.</param> + /// <param name="right">The right AABB.</param> + /// <returns>Whether or not the AABBs are not equal.</returns> public static bool operator !=(AABB left, AABB right) { return !left.Equals(right); } /// <summary> - /// Returns <see langword="true"/> if this AABB and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the AABB is exactly equal + /// to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the AABB structure and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the AABB and the object are equal.</returns> public override bool Equals(object obj) { if (obj is AABB) @@ -692,10 +711,12 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this AABB and <paramref name="other"/> are equal + /// Returns <see langword="true"/> if the AABBs are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="other">The other AABB to compare.</param> - /// <returns>Whether or not the AABBs are equal.</returns> + /// <param name="other">The other AABB.</param> + /// <returns>Whether or not the AABBs are exactly equal.</returns> public bool Equals(AABB other) { return _position == other._position && _size == other._size; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs index 0fb1df6c2f..bfbf1a097e 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs @@ -827,6 +827,14 @@ namespace Godot Row2 = new Vector3(xz, yz, zz); } + /// <summary> + /// Composes these two basis matrices by multiplying them + /// together. This has the effect of transforming the second basis + /// (the child) by the first basis (the parent). + /// </summary> + /// <param name="left">The parent basis.</param> + /// <param name="right">The child basis.</param> + /// <returns>The composed basis.</returns> public static Basis operator *(Basis left, Basis right) { return new Basis @@ -837,21 +845,40 @@ namespace Godot ); } + /// <summary> + /// Returns <see langword="true"/> if the basis matrices are exactly + /// equal. Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left basis.</param> + /// <param name="right">The right basis.</param> + /// <returns>Whether or not the basis matrices are exactly equal.</returns> public static bool operator ==(Basis left, Basis right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the basis matrices are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left basis.</param> + /// <param name="right">The right basis.</param> + /// <returns>Whether or not the basis matrices are not equal.</returns> public static bool operator !=(Basis left, Basis right) { return !left.Equals(right); } /// <summary> - /// Returns <see langword="true"/> if this basis and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the <see cref="Basis"/> is + /// exactly equal to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the basis and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the basis matrix and the object are exactly equal.</returns> public override bool Equals(object obj) { if (obj is Basis) @@ -863,10 +890,12 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this basis and <paramref name="other"/> are equal + /// Returns <see langword="true"/> if the basis matrices are exactly + /// equal. Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="other">The other basis to compare.</param> - /// <returns>Whether or not the bases are equal.</returns> + /// <param name="other">The other basis.</param> + /// <returns>Whether or not the basis matrices are exactly equal.</returns> public bool Equals(Basis other) { return Row0.Equals(other.Row0) && Row1.Equals(other.Row1) && Row2.Equals(other.Row2); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs index 2a869bc335..fc9d40ca48 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs @@ -878,6 +878,13 @@ namespace Godot return true; } + /// <summary> + /// Adds each component of the <see cref="Color"/> + /// with the components of the given <see cref="Color"/>. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>The added color.</returns> public static Color operator +(Color left, Color right) { left.r += right.r; @@ -887,6 +894,13 @@ namespace Godot return left; } + /// <summary> + /// Subtracts each component of the <see cref="Color"/> + /// by the components of the given <see cref="Color"/>. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>The subtracted color.</returns> public static Color operator -(Color left, Color right) { left.r -= right.r; @@ -896,11 +910,25 @@ namespace Godot return left; } + /// <summary> + /// Inverts the given color. This is equivalent to + /// <c>Colors.White - c</c> or + /// <c>new Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)</c>. + /// </summary> + /// <param name="color">The color to invert.</param> + /// <returns>The inverted color</returns> public static Color operator -(Color color) { return Colors.White - color; } + /// <summary> + /// Multiplies each component of the <see cref="Color"/> + /// by the given <see langword="float"/>. + /// </summary> + /// <param name="color">The color to multiply.</param> + /// <param name="scale">The value to multiply by.</param> + /// <returns>The multiplied color.</returns> public static Color operator *(Color color, float scale) { color.r *= scale; @@ -910,6 +938,13 @@ namespace Godot return color; } + /// <summary> + /// Multiplies each component of the <see cref="Color"/> + /// by the given <see langword="float"/>. + /// </summary> + /// <param name="scale">The value to multiply by.</param> + /// <param name="color">The color to multiply.</param> + /// <returns>The multiplied color.</returns> public static Color operator *(float scale, Color color) { color.r *= scale; @@ -919,6 +954,13 @@ namespace Godot return color; } + /// <summary> + /// Multiplies each component of the <see cref="Color"/> + /// by the components of the given <see cref="Color"/>. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>The multiplied color.</returns> public static Color operator *(Color left, Color right) { left.r *= right.r; @@ -928,6 +970,13 @@ namespace Godot return left; } + /// <summary> + /// Divides each component of the <see cref="Color"/> + /// by the given <see langword="float"/>. + /// </summary> + /// <param name="color">The dividend vector.</param> + /// <param name="scale">The divisor value.</param> + /// <returns>The divided color.</returns> public static Color operator /(Color color, float scale) { color.r /= scale; @@ -937,6 +986,13 @@ namespace Godot return color; } + /// <summary> + /// Divides each component of the <see cref="Color"/> + /// by the components of the given <see cref="Color"/>. + /// </summary> + /// <param name="left">The dividend color.</param> + /// <param name="right">The divisor color.</param> + /// <returns>The divided color.</returns> public static Color operator /(Color left, Color right) { left.r /= right.r; @@ -946,23 +1002,51 @@ namespace Godot return left; } + /// <summary> + /// Returns <see langword="true"/> if the colors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the colors are equal.</returns> public static bool operator ==(Color left, Color right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the colors are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the colors are equal.</returns> public static bool operator !=(Color left, Color right) { return !left.Equals(right); } + /// <summary> + /// Compares two <see cref="Color"/>s by first checking if + /// the red value of the <paramref name="left"/> color is less than + /// the red value of the <paramref name="right"/> color. + /// If the red values are exactly equal, then it repeats this check + /// with the green values of the two colors, then with the blue values, + /// and then with the alpha value. + /// This operator is useful for sorting colors. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Color left, Color right) { - if (Mathf.IsEqualApprox(left.r, right.r)) + if (left.r == right.r) { - if (Mathf.IsEqualApprox(left.g, right.g)) + if (left.g == right.g) { - if (Mathf.IsEqualApprox(left.b, right.b)) + if (left.b == right.b) { return left.a < right.a; } @@ -973,13 +1057,25 @@ namespace Godot return left.r < right.r; } + /// <summary> + /// Compares two <see cref="Color"/>s by first checking if + /// the red value of the <paramref name="left"/> color is greater than + /// the red value of the <paramref name="right"/> color. + /// If the red values are exactly equal, then it repeats this check + /// with the green values of the two colors, then with the blue values, + /// and then with the alpha value. + /// This operator is useful for sorting colors. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Color left, Color right) { - if (Mathf.IsEqualApprox(left.r, right.r)) + if (left.r == right.r) { - if (Mathf.IsEqualApprox(left.g, right.g)) + if (left.g == right.g) { - if (Mathf.IsEqualApprox(left.b, right.b)) + if (left.b == right.b) { return left.a > right.a; } @@ -991,6 +1087,64 @@ namespace Godot } /// <summary> + /// Compares two <see cref="Color"/>s by first checking if + /// the red value of the <paramref name="left"/> color is less than + /// or equal to the red value of the <paramref name="right"/> color. + /// If the red values are exactly equal, then it repeats this check + /// with the green values of the two colors, then with the blue values, + /// and then with the alpha value. + /// This operator is useful for sorting colors. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the left is less than or equal to the right.</returns> + public static bool operator <=(Color left, Color right) + { + if (left.r == right.r) + { + if (left.g == right.g) + { + if (left.b == right.b) + { + return left.a <= right.a; + } + return left.b < right.b; + } + return left.g < right.g; + } + return left.r < right.r; + } + + /// <summary> + /// Compares two <see cref="Color"/>s by first checking if + /// the red value of the <paramref name="left"/> color is greater than + /// or equal to the red value of the <paramref name="right"/> color. + /// If the red values are exactly equal, then it repeats this check + /// with the green values of the two colors, then with the blue values, + /// and then with the alpha value. + /// This operator is useful for sorting colors. + /// </summary> + /// <param name="left">The left color.</param> + /// <param name="right">The right color.</param> + /// <returns>Whether or not the left is greater than or equal to the right.</returns> + public static bool operator >=(Color left, Color right) + { + if (left.r == right.r) + { + if (left.g == right.g) + { + if (left.b == right.b) + { + return left.a >= right.a; + } + return left.b > right.b; + } + return left.g > right.g; + } + return left.r > right.r; + } + + /// <summary> /// Returns <see langword="true"/> if this color and <paramref name="obj"/> are equal. /// </summary> /// <param name="obj">The other object to compare.</param> @@ -1006,9 +1160,11 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this color and <paramref name="other"/> are equal + /// Returns <see langword="true"/> if the colors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="other">The other color to compare.</param> + /// <param name="other">The other color.</param> /// <returns>Whether or not the colors are equal.</returns> public bool Equals(Color other) { diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs index d64c8b563e..68c821b447 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs @@ -158,6 +158,7 @@ namespace Godot {"YELLOWGREEN", new Color(0.60f, 0.80f, 0.20f)}, }; +#pragma warning disable CS1591 // Disable warning: "Missing XML comment for publicly visible type or member" public static Color AliceBlue { get { return namedColors["ALICEBLUE"]; } } public static Color AntiqueWhite { get { return namedColors["ANTIQUEWHITE"]; } } public static Color Aqua { get { return namedColors["AQUA"]; } } @@ -304,5 +305,6 @@ namespace Godot public static Color WhiteSmoke { get { return namedColors["WHITESMOKE"]; } } public static Color Yellow { get { return namedColors["YELLOW"]; } } public static Color YellowGreen { get { return namedColors["YELLOWGREEN"]; } } +#pragma warning restore CS1591 } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs index 2dfe304aaa..75240b0c09 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs @@ -314,13 +314,13 @@ namespace Godot.Collections internal static extern int godot_icall_Dictionary_Count(IntPtr ptr); [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values); + internal static extern int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values); [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value); + internal static extern void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value); [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value); + internal static extern void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value); [MethodImpl(MethodImplOptions.InternalCall)] internal static extern void godot_icall_Dictionary_Clear(IntPtr ptr); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs index ef42374041..a3afc83222 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs @@ -323,6 +323,16 @@ namespace Godot } /// <summary> + /// Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified <c>mean</c> and a standard <c>deviation</c>. + /// This is also called Gaussian distribution. + /// </summary> + /// <returns>A random normally-distributed <see langword="float"/> number.</returns> + public static double Randfn(double mean, double deviation) + { + return godot_icall_GD_randfn(mean, deviation); + } + + /// <summary> /// Returns a random unsigned 32-bit integer. /// Use remainder to obtain a random value in the interval <c>[0, N - 1]</c> (where N is smaller than 2^32). /// </summary> @@ -564,19 +574,22 @@ namespace Godot internal static extern void godot_icall_GD_printt(object[] what); [MethodImpl(MethodImplOptions.InternalCall)] - internal static extern float godot_icall_GD_randf(); + internal static extern void godot_icall_GD_randomize(); [MethodImpl(MethodImplOptions.InternalCall)] internal static extern uint godot_icall_GD_randi(); [MethodImpl(MethodImplOptions.InternalCall)] - internal static extern void godot_icall_GD_randomize(); + internal static extern float godot_icall_GD_randf(); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern int godot_icall_GD_randi_range(int from, int to); [MethodImpl(MethodImplOptions.InternalCall)] internal static extern double godot_icall_GD_randf_range(double from, double to); [MethodImpl(MethodImplOptions.InternalCall)] - internal static extern int godot_icall_GD_randi_range(int from, int to); + internal static extern double godot_icall_GD_randfn(double mean, double deviation); [MethodImpl(MethodImplOptions.InternalCall)] internal static extern uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs index 66f7b745f7..63af1c5892 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs @@ -309,16 +309,43 @@ namespace Godot D = _normal.Dot(v1); } + /// <summary> + /// Returns the negative value of the <see cref="Plane"/>. + /// This is the same as writing <c>new Plane(-p.Normal, -p.D)</c>. + /// This operation flips the direction of the normal vector and + /// also flips the distance value, resulting in a Plane that is + /// in the same place, but facing the opposite direction. + /// </summary> + /// <param name="plane">The plane to negate/flip.</param> + /// <returns>The negated/flipped plane.</returns> public static Plane operator -(Plane plane) { return new Plane(-plane._normal, -plane.D); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Plane"/>s are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the planes are exactly equal.</returns> public static bool operator ==(Plane left, Plane right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Plane"/>s are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the planes are not equal.</returns> public static bool operator !=(Plane left, Plane right) { return !left.Equals(right); @@ -328,7 +355,7 @@ namespace Godot /// Returns <see langword="true"/> if this plane and <paramref name="obj"/> are equal. /// </summary> /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the plane and the other object are equal.</returns> + /// <returns>Whether or not the plane and the other object are exactly equal.</returns> public override bool Equals(object obj) { if (obj is Plane) @@ -343,7 +370,7 @@ namespace Godot /// Returns <see langword="true"/> if this plane and <paramref name="other"/> are equal. /// </summary> /// <param name="other">The other plane to compare.</param> - /// <returns>Whether or not the planes are equal.</returns> + /// <returns>Whether or not the planes are exactly equal.</returns> public bool Equals(Plane other) { return _normal == other._normal && D == other.D; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs index c18f818ed2..dfb8e87bce 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs @@ -446,6 +446,14 @@ namespace Godot } } + /// <summary> + /// Composes these two quaternions by multiplying them together. + /// This has the effect of rotating the second quaternion + /// (the child) by the first quaternion (the parent). + /// </summary> + /// <param name="left">The parent quaternion.</param> + /// <param name="right">The child quaternion.</param> + /// <returns>The composed quaternion.</returns> public static Quaternion operator *(Quaternion left, Quaternion right) { return new Quaternion @@ -457,21 +465,55 @@ namespace Godot ); } + /// <summary> + /// Adds each component of the left <see cref="Quaternion"/> + /// to the right <see cref="Quaternion"/>. This operation is not + /// meaningful on its own, but it can be used as a part of a + /// larger expression, such as approximating an intermediate + /// rotation between two nearby rotations. + /// </summary> + /// <param name="left">The left quaternion to add.</param> + /// <param name="right">The right quaternion to add.</param> + /// <returns>The added quaternion.</returns> public static Quaternion operator +(Quaternion left, Quaternion right) { return new Quaternion(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); } + /// <summary> + /// Subtracts each component of the left <see cref="Quaternion"/> + /// by the right <see cref="Quaternion"/>. This operation is not + /// meaningful on its own, but it can be used as a part of a + /// larger expression. + /// </summary> + /// <param name="left">The left quaternion to subtract.</param> + /// <param name="right">The right quaternion to subtract.</param> + /// <returns>The subtracted quaternion.</returns> public static Quaternion operator -(Quaternion left, Quaternion right) { return new Quaternion(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); } - public static Quaternion operator -(Quaternion left) + /// <summary> + /// Returns the negative value of the <see cref="Quaternion"/>. + /// This is the same as writing + /// <c>new Quaternion(-q.x, -q.y, -q.z, -q.w)</c>. This operation + /// results in a quaternion that represents the same rotation. + /// </summary> + /// <param name="quat">The quaternion to negate.</param> + /// <returns>The negated quaternion.</returns> + public static Quaternion operator -(Quaternion quat) { - return new Quaternion(-left.x, -left.y, -left.z, -left.w); + return new Quaternion(-quat.x, -quat.y, -quat.z, -quat.w); } + /// <summary> + /// Rotates (multiplies) the <see cref="Vector3"/> + /// by the given <see cref="Quaternion"/>. + /// </summary> + /// <param name="quat">The quaternion to rotate by.</param> + /// <param name="vec">The vector to rotate.</param> + /// <returns>The rotated vector.</returns> public static Vector3 operator *(Quaternion quat, Vector3 vec) { #if DEBUG @@ -485,31 +527,81 @@ namespace Godot return vec + (((uv * quat.w) + u.Cross(uv)) * 2); } + /// <summary> + /// Inversely rotates (multiplies) the <see cref="Vector3"/> + /// by the given <see cref="Quaternion"/>. + /// </summary> + /// <param name="vec">The vector to rotate.</param> + /// <param name="quat">The quaternion to rotate by.</param> + /// <returns>The inversely rotated vector.</returns> public static Vector3 operator *(Vector3 vec, Quaternion quat) { return quat.Inverse() * vec; } + /// <summary> + /// Multiplies each component of the <see cref="Quaternion"/> + /// by the given <see cref="real_t"/>. This operation is not + /// meaningful on its own, but it can be used as a part of a + /// larger expression. + /// </summary> + /// <param name="left">The quaternion to multiply.</param> + /// <param name="right">The value to multiply by.</param> + /// <returns>The multiplied quaternion.</returns> public static Quaternion operator *(Quaternion left, real_t right) { return new Quaternion(left.x * right, left.y * right, left.z * right, left.w * right); } + /// <summary> + /// Multiplies each component of the <see cref="Quaternion"/> + /// by the given <see cref="real_t"/>. This operation is not + /// meaningful on its own, but it can be used as a part of a + /// larger expression. + /// </summary> + /// <param name="left">The value to multiply by.</param> + /// <param name="right">The quaternion to multiply.</param> + /// <returns>The multiplied quaternion.</returns> public static Quaternion operator *(real_t left, Quaternion right) { return new Quaternion(right.x * left, right.y * left, right.z * left, right.w * left); } + /// <summary> + /// Divides each component of the <see cref="Quaternion"/> + /// by the given <see cref="real_t"/>. This operation is not + /// meaningful on its own, but it can be used as a part of a + /// larger expression. + /// </summary> + /// <param name="left">The quaternion to divide.</param> + /// <param name="right">The value to divide by.</param> + /// <returns>The divided quaternion.</returns> public static Quaternion operator /(Quaternion left, real_t right) { return left * (1.0f / right); } + /// <summary> + /// Returns <see langword="true"/> if the quaternions are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left quaternion.</param> + /// <param name="right">The right quaternion.</param> + /// <returns>Whether or not the quaternions are exactly equal.</returns> public static bool operator ==(Quaternion left, Quaternion right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the quaternions are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left quaternion.</param> + /// <param name="right">The right quaternion.</param> + /// <returns>Whether or not the quaternions are not equal.</returns> public static bool operator !=(Quaternion left, Quaternion right) { return !left.Equals(right); @@ -519,7 +611,7 @@ namespace Godot /// Returns <see langword="true"/> if this quaternion and <paramref name="obj"/> are equal. /// </summary> /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the quaternion and the other object are equal.</returns> + /// <returns>Whether or not the quaternion and the other object are exactly equal.</returns> public override bool Equals(object obj) { if (obj is Quaternion) @@ -534,7 +626,7 @@ namespace Godot /// Returns <see langword="true"/> if this quaternion and <paramref name="other"/> are equal. /// </summary> /// <param name="other">The other quaternion to compare.</param> - /// <returns>Whether or not the quaternions are equal.</returns> + /// <returns>Whether or not the quaternions are exactly equal.</returns> public bool Equals(Quaternion other) { return x == other.x && y == other.y && z == other.z && w == other.w; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs index af94484577..ec16920fed 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs @@ -396,11 +396,29 @@ namespace Godot _size = new Vector2(width, height); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Rect2"/>s are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the rects are exactly equal.</returns> public static bool operator ==(Rect2 left, Rect2 right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Rect2"/>s are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the rects are not equal.</returns> public static bool operator !=(Rect2 left, Rect2 right) { return !left.Equals(right); @@ -410,7 +428,7 @@ namespace Godot /// Returns <see langword="true"/> if this rect and <paramref name="obj"/> are equal. /// </summary> /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the rect and the other object are equal.</returns> + /// <returns>Whether or not the rect and the other object are exactly equal.</returns> public override bool Equals(object obj) { if (obj is Rect2) @@ -425,7 +443,7 @@ namespace Godot /// Returns <see langword="true"/> if this rect and <paramref name="other"/> are equal. /// </summary> /// <param name="other">The other rect to compare.</param> - /// <returns>Whether or not the rects are equal.</returns> + /// <returns>Whether or not the rects are exactly equal.</returns> public bool Equals(Rect2 other) { return _position.Equals(other._position) && _size.Equals(other._size); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs index 03f406a910..5d53b8330e 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs @@ -377,11 +377,25 @@ namespace Godot _size = new Vector2i(width, height); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Rect2i"/>s are exactly equal. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the rects are equal.</returns> public static bool operator ==(Rect2i left, Rect2i right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the + /// <see cref="Rect2i"/>s are not equal. + /// </summary> + /// <param name="left">The left rect.</param> + /// <param name="right">The right rect.</param> + /// <returns>Whether or not the rects are not equal.</returns> public static bool operator !=(Rect2i left, Rect2i right) { return !left.Equals(right); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs index 6b3eb09581..d9ee684c5b 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs @@ -1345,7 +1345,7 @@ namespace Godot } [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_String_simplify_path(string str); + internal static extern string godot_icall_String_simplify_path(string str); /// <summary> /// Split the string by a divisor string, return an array of the substrings. diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs index c82c5f4588..6f1d9574a8 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs @@ -447,6 +447,14 @@ namespace Godot this.origin = origin; } + /// <summary> + /// Composes these two transformation matrices by multiplying them + /// together. This has the effect of transforming the second transform + /// (the child) by the first transform (the parent). + /// </summary> + /// <param name="left">The parent transform.</param> + /// <param name="right">The child transform.</param> + /// <returns>The composed transform.</returns> public static Transform2D operator *(Transform2D left, Transform2D right) { left.origin = left * right.origin; @@ -554,31 +562,52 @@ namespace Godot return newArray; } + /// <summary> + /// Returns <see langword="true"/> if the transforms are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left transform.</param> + /// <param name="right">The right transform.</param> + /// <returns>Whether or not the transforms are exactly equal.</returns> public static bool operator ==(Transform2D left, Transform2D right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the transforms are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left transform.</param> + /// <param name="right">The right transform.</param> + /// <returns>Whether or not the transforms are not equal.</returns> public static bool operator !=(Transform2D left, Transform2D right) { return !left.Equals(right); } /// <summary> - /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the transform is exactly equal + /// to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the transform and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the transform and the object are exactly equal.</returns> public override bool Equals(object obj) { return obj is Transform2D transform2D && Equals(transform2D); } /// <summary> - /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal. + /// Returns <see langword="true"/> if the transforms are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> /// <param name="other">The other transform to compare.</param> - /// <returns>Whether or not the matrices are equal.</returns> + /// <returns>Whether or not the matrices are exactly equal.</returns> public bool Equals(Transform2D other) { return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs index 7176cd60dc..4bb8308c12 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs @@ -352,6 +352,14 @@ namespace Godot this.origin = origin; } + /// <summary> + /// Composes these two transformation matrices by multiplying them + /// together. This has the effect of transforming the second transform + /// (the child) by the first transform (the parent). + /// </summary> + /// <param name="left">The parent transform.</param> + /// <param name="right">The child transform.</param> + /// <returns>The composed transform.</returns> public static Transform3D operator *(Transform3D left, Transform3D right) { left.origin = left.Xform(right.origin); @@ -359,21 +367,40 @@ namespace Godot return left; } + /// <summary> + /// Returns <see langword="true"/> if the transforms are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left transform.</param> + /// <param name="right">The right transform.</param> + /// <returns>Whether or not the transforms are exactly equal.</returns> public static bool operator ==(Transform3D left, Transform3D right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the transforms are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left transform.</param> + /// <param name="right">The right transform.</param> + /// <returns>Whether or not the transforms are not equal.</returns> public static bool operator !=(Transform3D left, Transform3D right) { return !left.Equals(right); } /// <summary> - /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the transform is exactly equal + /// to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the transform and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the transform and the object are exactly equal.</returns> public override bool Equals(object obj) { if (obj is Transform3D) @@ -385,10 +412,12 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal. + /// Returns <see langword="true"/> if the transforms are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> /// <param name="other">The other transform to compare.</param> - /// <returns>Whether or not the matrices are equal.</returns> + /// <returns>Whether or not the matrices are exactly equal.</returns> public bool Equals(Transform3D other) { return basis.Equals(other.basis) && origin.Equals(other.origin); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs index fe70d71cce..0c3331900a 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs @@ -642,6 +642,13 @@ namespace Godot return new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); } + /// <summary> + /// Adds each component of the <see cref="Vector2"/> + /// with the components of the given <see cref="Vector2"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The added vector.</returns> public static Vector2 operator +(Vector2 left, Vector2 right) { left.x += right.x; @@ -649,6 +656,13 @@ namespace Godot return left; } + /// <summary> + /// Subtracts each component of the <see cref="Vector2"/> + /// by the components of the given <see cref="Vector2"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The subtracted vector.</returns> public static Vector2 operator -(Vector2 left, Vector2 right) { left.x -= right.x; @@ -656,6 +670,15 @@ namespace Godot return left; } + /// <summary> + /// Returns the negative value of the <see cref="Vector2"/>. + /// This is the same as writing <c>new Vector2(-v.x, -v.y)</c>. + /// This operation flips the direction of the vector while + /// keeping the same magnitude. + /// With floats, the number zero can be either positive or negative. + /// </summary> + /// <param name="vec">The vector to negate/flip.</param> + /// <returns>The negated/flipped vector.</returns> public static Vector2 operator -(Vector2 vec) { vec.x = -vec.x; @@ -663,6 +686,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="vec">The vector to multiply.</param> + /// <param name="scale">The scale to multiply by.</param> + /// <returns>The multiplied vector.</returns> public static Vector2 operator *(Vector2 vec, real_t scale) { vec.x *= scale; @@ -670,6 +700,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="scale">The scale to multiply by.</param> + /// <param name="vec">The vector to multiply.</param> + /// <returns>The multiplied vector.</returns> public static Vector2 operator *(real_t scale, Vector2 vec) { vec.x *= scale; @@ -677,6 +714,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2"/> + /// by the components of the given <see cref="Vector2"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The multiplied vector.</returns> public static Vector2 operator *(Vector2 left, Vector2 right) { left.x *= right.x; @@ -684,6 +728,13 @@ namespace Godot return left; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The divided vector.</returns> public static Vector2 operator /(Vector2 vec, real_t divisor) { vec.x /= divisor; @@ -691,6 +742,13 @@ namespace Godot return vec; } + /// <summary> + /// Divides each component of the <see cref="Vector2"/> + /// by the components of the given <see cref="Vector2"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The divided vector.</returns> public static Vector2 operator /(Vector2 vec, Vector2 divisorv) { vec.x /= divisorv.x; @@ -698,6 +756,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector2"/> + /// with the components of the given <see cref="real_t"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(real_t)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector2(10, -20) % 7); // Prints "(3, -6)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The remainder vector.</returns> public static Vector2 operator %(Vector2 vec, real_t divisor) { vec.x %= divisor; @@ -705,6 +779,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector2"/> + /// with the components of the given <see cref="Vector2"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(Vector2)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector2(10, -20) % new Vector2(7, 8)); // Prints "(3, -4)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The remainder vector.</returns> public static Vector2 operator %(Vector2 vec, Vector2 divisorv) { vec.x %= divisorv.x; @@ -712,16 +802,43 @@ namespace Godot return vec; } + /// <summary> + /// Returns <see langword="true"/> if the vectors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are exactly equal.</returns> public static bool operator ==(Vector2 left, Vector2 right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the vectors are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are not equal.</returns> public static bool operator !=(Vector2 left, Vector2 right) { return !left.Equals(right); } + /// <summary> + /// Compares two <see cref="Vector2"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector2 left, Vector2 right) { if (left.x == right.x) @@ -731,6 +848,17 @@ namespace Godot return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector2"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector2 left, Vector2 right) { if (left.x == right.x) @@ -740,29 +868,54 @@ namespace Godot return left.x > right.x; } + /// <summary> + /// Compares two <see cref="Vector2"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector2 left, Vector2 right) { if (left.x == right.x) { return left.y <= right.y; } - return left.x <= right.x; + return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector2"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector2 left, Vector2 right) { if (left.x == right.x) { return left.y >= right.y; } - return left.x >= right.x; + return left.x > right.x; } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the vector is exactly equal + /// to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the vector and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the vector and the object are equal.</returns> public override bool Equals(object obj) { if (obj is Vector2) @@ -773,10 +926,12 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal. + /// Returns <see langword="true"/> if the vectors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="other">The other vector to compare.</param> - /// <returns>Whether or not the vectors are equal.</returns> + /// <param name="other">The other vector.</param> + /// <returns>Whether or not the vectors are exactly equal.</returns> public bool Equals(Vector2 other) { return x == other.x && y == other.y; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs index ca4531d885..6cac16d53b 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs @@ -366,6 +366,13 @@ namespace Godot this.y = Mathf.RoundToInt(v.y); } + /// <summary> + /// Adds each component of the <see cref="Vector2i"/> + /// with the components of the given <see cref="Vector2i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The added vector.</returns> public static Vector2i operator +(Vector2i left, Vector2i right) { left.x += right.x; @@ -373,6 +380,13 @@ namespace Godot return left; } + /// <summary> + /// Subtracts each component of the <see cref="Vector2i"/> + /// by the components of the given <see cref="Vector2i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The subtracted vector.</returns> public static Vector2i operator -(Vector2i left, Vector2i right) { left.x -= right.x; @@ -380,6 +394,14 @@ namespace Godot return left; } + /// <summary> + /// Returns the negative value of the <see cref="Vector2i"/>. + /// This is the same as writing <c>new Vector2i(-v.x, -v.y)</c>. + /// This operation flips the direction of the vector while + /// keeping the same magnitude. + /// </summary> + /// <param name="vec">The vector to negate/flip.</param> + /// <returns>The negated/flipped vector.</returns> public static Vector2i operator -(Vector2i vec) { vec.x = -vec.x; @@ -387,6 +409,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The vector to multiply.</param> + /// <param name="scale">The scale to multiply by.</param> + /// <returns>The multiplied vector.</returns> public static Vector2i operator *(Vector2i vec, int scale) { vec.x *= scale; @@ -394,6 +423,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="scale">The scale to multiply by.</param> + /// <param name="vec">The vector to multiply.</param> + /// <returns>The multiplied vector.</returns> public static Vector2i operator *(int scale, Vector2i vec) { vec.x *= scale; @@ -401,6 +437,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2i"/> + /// by the components of the given <see cref="Vector2i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The multiplied vector.</returns> public static Vector2i operator *(Vector2i left, Vector2i right) { left.x *= right.x; @@ -408,6 +451,13 @@ namespace Godot return left; } + /// <summary> + /// Multiplies each component of the <see cref="Vector2i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The divided vector.</returns> public static Vector2i operator /(Vector2i vec, int divisor) { vec.x /= divisor; @@ -415,6 +465,13 @@ namespace Godot return vec; } + /// <summary> + /// Divides each component of the <see cref="Vector2i"/> + /// by the components of the given <see cref="Vector2i"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The divided vector.</returns> public static Vector2i operator /(Vector2i vec, Vector2i divisorv) { vec.x /= divisorv.x; @@ -422,6 +479,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector2i"/> + /// with the components of the given <see langword="int"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(int)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector2i(10, -20) % 7); // Prints "(3, -6)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The remainder vector.</returns> public static Vector2i operator %(Vector2i vec, int divisor) { vec.x %= divisor; @@ -429,6 +502,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector2i"/> + /// with the components of the given <see cref="Vector2i"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(Vector2i)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector2i(10, -20) % new Vector2i(7, 8)); // Prints "(3, -4)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The remainder vector.</returns> public static Vector2i operator %(Vector2i vec, Vector2i divisorv) { vec.x %= divisorv.x; @@ -436,6 +525,13 @@ namespace Godot return vec; } + /// <summary> + /// Performs a bitwise AND operation with this <see cref="Vector2i"/> + /// and the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The vector to AND with.</param> + /// <param name="and">The integer to AND with.</param> + /// <returns>The result of the bitwise AND.</returns> public static Vector2i operator &(Vector2i vec, int and) { vec.x &= and; @@ -443,6 +539,13 @@ namespace Godot return vec; } + /// <summary> + /// Performs a bitwise AND operation with this <see cref="Vector2i"/> + /// and the given <see cref="Vector2i"/>. + /// </summary> + /// <param name="vec">The left vector to AND with.</param> + /// <param name="andv">The right vector to AND with.</param> + /// <returns>The result of the bitwise AND.</returns> public static Vector2i operator &(Vector2i vec, Vector2i andv) { vec.x &= andv.x; @@ -450,50 +553,106 @@ namespace Godot return vec; } + /// <summary> + /// Returns <see langword="true"/> if the vectors are equal. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are equal.</returns> public static bool operator ==(Vector2i left, Vector2i right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the vectors are not equal. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are not equal.</returns> public static bool operator !=(Vector2i left, Vector2i right) { return !left.Equals(right); } + /// <summary> + /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector2i left, Vector2i right) { - if (left.x.Equals(right.x)) + if (left.x == right.x) { return left.y < right.y; } return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector2i left, Vector2i right) { - if (left.x.Equals(right.x)) + if (left.x == right.x) { return left.y > right.y; } return left.x > right.x; } + /// <summary> + /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector2i left, Vector2i right) { - if (left.x.Equals(right.x)) + if (left.x == right.x) { return left.y <= right.y; } - return left.x <= right.x; + return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector2i left, Vector2i right) { - if (left.x.Equals(right.x)) + if (left.x == right.x) { return left.y >= right.y; } - return left.x >= right.x; + return left.x > right.x; } /// <summary> @@ -515,10 +674,11 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the vector is equal + /// to the given object (<see paramref="obj"/>). /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the vector and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the vector and the object are equal.</returns> public override bool Equals(object obj) { if (obj is Vector2i) @@ -530,9 +690,9 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal. + /// Returns <see langword="true"/> if the vectors are equal. /// </summary> - /// <param name="other">The other vector to compare.</param> + /// <param name="other">The other vector.</param> /// <returns>Whether or not the vectors are equal.</returns> public bool Equals(Vector2i other) { diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs index 01e3a71bcb..63d9be0a6d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs @@ -699,6 +699,13 @@ namespace Godot z = v.z; } + /// <summary> + /// Adds each component of the <see cref="Vector3"/> + /// with the components of the given <see cref="Vector3"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The added vector.</returns> public static Vector3 operator +(Vector3 left, Vector3 right) { left.x += right.x; @@ -707,6 +714,13 @@ namespace Godot return left; } + /// <summary> + /// Subtracts each component of the <see cref="Vector3"/> + /// by the components of the given <see cref="Vector3"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The subtracted vector.</returns> public static Vector3 operator -(Vector3 left, Vector3 right) { left.x -= right.x; @@ -715,6 +729,15 @@ namespace Godot return left; } + /// <summary> + /// Returns the negative value of the <see cref="Vector3"/>. + /// This is the same as writing <c>new Vector3(-v.x, -v.y, -v.z)</c>. + /// This operation flips the direction of the vector while + /// keeping the same magnitude. + /// With floats, the number zero can be either positive or negative. + /// </summary> + /// <param name="vec">The vector to negate/flip.</param> + /// <returns>The negated/flipped vector.</returns> public static Vector3 operator -(Vector3 vec) { vec.x = -vec.x; @@ -723,6 +746,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="vec">The vector to multiply.</param> + /// <param name="scale">The scale to multiply by.</param> + /// <returns>The multiplied vector.</returns> public static Vector3 operator *(Vector3 vec, real_t scale) { vec.x *= scale; @@ -731,6 +761,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="scale">The scale to multiply by.</param> + /// <param name="vec">The vector to multiply.</param> + /// <returns>The multiplied vector.</returns> public static Vector3 operator *(real_t scale, Vector3 vec) { vec.x *= scale; @@ -739,6 +776,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3"/> + /// by the components of the given <see cref="Vector3"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The multiplied vector.</returns> public static Vector3 operator *(Vector3 left, Vector3 right) { left.x *= right.x; @@ -747,6 +791,13 @@ namespace Godot return left; } + /// <summary> + /// Divides each component of the <see cref="Vector3"/> + /// by the given <see cref="real_t"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The divided vector.</returns> public static Vector3 operator /(Vector3 vec, real_t divisor) { vec.x /= divisor; @@ -755,6 +806,13 @@ namespace Godot return vec; } + /// <summary> + /// Divides each component of the <see cref="Vector3"/> + /// by the components of the given <see cref="Vector3"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The divided vector.</returns> public static Vector3 operator /(Vector3 vec, Vector3 divisorv) { vec.x /= divisorv.x; @@ -763,6 +821,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector3"/> + /// with the components of the given <see cref="real_t"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(real_t)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector3(10, -20, 30) % 7); // Prints "(3, -6, 2)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The remainder vector.</returns> public static Vector3 operator %(Vector3 vec, real_t divisor) { vec.x %= divisor; @@ -771,6 +845,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector3"/> + /// with the components of the given <see cref="Vector3"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(Vector3)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector3(10, -20, 30) % new Vector3(7, 8, 9)); // Prints "(3, -4, 3)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The remainder vector.</returns> public static Vector3 operator %(Vector3 vec, Vector3 divisorv) { vec.x %= divisorv.x; @@ -779,16 +869,43 @@ namespace Godot return vec; } + /// <summary> + /// Returns <see langword="true"/> if the vectors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are exactly equal.</returns> public static bool operator ==(Vector3 left, Vector3 right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the vectors are not equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are not equal.</returns> public static bool operator !=(Vector3 left, Vector3 right) { return !left.Equals(right); } + /// <summary> + /// Compares two <see cref="Vector3"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector3 left, Vector3 right) { if (left.x == right.x) @@ -802,6 +919,17 @@ namespace Godot return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector3"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector3 left, Vector3 right) { if (left.x == right.x) @@ -815,6 +943,17 @@ namespace Godot return left.x > right.x; } + /// <summary> + /// Compares two <see cref="Vector3"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector3 left, Vector3 right) { if (left.x == right.x) @@ -828,6 +967,17 @@ namespace Godot return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector3"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector3 left, Vector3 right) { if (left.x == right.x) @@ -842,10 +992,13 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the vector is exactly equal + /// to the given object (<see paramref="obj"/>). + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the vector and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the vector and the object are equal.</returns> public override bool Equals(object obj) { if (obj is Vector3) @@ -857,10 +1010,12 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal + /// Returns <see langword="true"/> if the vectors are exactly equal. + /// Note: Due to floating-point precision errors, consider using + /// <see cref="IsEqualApprox"/> instead, which is more reliable. /// </summary> - /// <param name="other">The other vector to compare.</param> - /// <returns>Whether or not the vectors are equal.</returns> + /// <param name="other">The other vector.</param> + /// <returns>Whether or not the vectors are exactly equal.</returns> public bool Equals(Vector3 other) { return x == other.x && y == other.y && z == other.z; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs index 2a7771cdfc..474876fc91 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs @@ -347,6 +347,13 @@ namespace Godot this.z = Mathf.RoundToInt(v.z); } + /// <summary> + /// Adds each component of the <see cref="Vector3i"/> + /// with the components of the given <see cref="Vector3i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The added vector.</returns> public static Vector3i operator +(Vector3i left, Vector3i right) { left.x += right.x; @@ -355,6 +362,13 @@ namespace Godot return left; } + /// <summary> + /// Subtracts each component of the <see cref="Vector3i"/> + /// by the components of the given <see cref="Vector3i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The subtracted vector.</returns> public static Vector3i operator -(Vector3i left, Vector3i right) { left.x -= right.x; @@ -363,6 +377,14 @@ namespace Godot return left; } + /// <summary> + /// Returns the negative value of the <see cref="Vector3i"/>. + /// This is the same as writing <c>new Vector3i(-v.x, -v.y, -v.z)</c>. + /// This operation flips the direction of the vector while + /// keeping the same magnitude. + /// </summary> + /// <param name="vec">The vector to negate/flip.</param> + /// <returns>The negated/flipped vector.</returns> public static Vector3i operator -(Vector3i vec) { vec.x = -vec.x; @@ -371,6 +393,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The vector to multiply.</param> + /// <param name="scale">The scale to multiply by.</param> + /// <returns>The multiplied vector.</returns> public static Vector3i operator *(Vector3i vec, int scale) { vec.x *= scale; @@ -379,6 +408,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="scale">The scale to multiply by.</param> + /// <param name="vec">The vector to multiply.</param> + /// <returns>The multiplied vector.</returns> public static Vector3i operator *(int scale, Vector3i vec) { vec.x *= scale; @@ -387,6 +423,13 @@ namespace Godot return vec; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3i"/> + /// by the components of the given <see cref="Vector3i"/>. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>The multiplied vector.</returns> public static Vector3i operator *(Vector3i left, Vector3i right) { left.x *= right.x; @@ -395,6 +438,13 @@ namespace Godot return left; } + /// <summary> + /// Multiplies each component of the <see cref="Vector3i"/> + /// by the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The divided vector.</returns> public static Vector3i operator /(Vector3i vec, int divisor) { vec.x /= divisor; @@ -403,6 +453,13 @@ namespace Godot return vec; } + /// <summary> + /// Divides each component of the <see cref="Vector3i"/> + /// by the components of the given <see cref="Vector3i"/>. + /// </summary> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The divided vector.</returns> public static Vector3i operator /(Vector3i vec, Vector3i divisorv) { vec.x /= divisorv.x; @@ -411,6 +468,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector3i"/> + /// with the components of the given <see langword="int"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(int)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector3i(10, -20, 30) % 7); // Prints "(3, -6, 2)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisor">The divisor value.</param> + /// <returns>The remainder vector.</returns> public static Vector3i operator %(Vector3i vec, int divisor) { vec.x %= divisor; @@ -419,6 +492,22 @@ namespace Godot return vec; } + /// <summary> + /// Gets the remainder of each component of the <see cref="Vector3i"/> + /// with the components of the given <see cref="Vector3i"/>. + /// This operation uses truncated division, which is often not desired + /// as it does not work well with negative numbers. + /// Consider using <see cref="PosMod(Vector3i)"/> instead + /// if you want to handle negative numbers. + /// </summary> + /// <example> + /// <code> + /// GD.Print(new Vector3i(10, -20, 30) % new Vector3i(7, 8, 9)); // Prints "(3, -4, 3)" + /// </code> + /// </example> + /// <param name="vec">The dividend vector.</param> + /// <param name="divisorv">The divisor vector.</param> + /// <returns>The remainder vector.</returns> public static Vector3i operator %(Vector3i vec, Vector3i divisorv) { vec.x %= divisorv.x; @@ -427,6 +516,13 @@ namespace Godot return vec; } + /// <summary> + /// Performs a bitwise AND operation with this <see cref="Vector3i"/> + /// and the given <see langword="int"/>. + /// </summary> + /// <param name="vec">The vector to AND with.</param> + /// <param name="and">The integer to AND with.</param> + /// <returns>The result of the bitwise AND.</returns> public static Vector3i operator &(Vector3i vec, int and) { vec.x &= and; @@ -435,6 +531,13 @@ namespace Godot return vec; } + /// <summary> + /// Performs a bitwise AND operation with this <see cref="Vector3i"/> + /// and the given <see cref="Vector3i"/>. + /// </summary> + /// <param name="vec">The left vector to AND with.</param> + /// <param name="andv">The right vector to AND with.</param> + /// <returns>The result of the bitwise AND.</returns> public static Vector3i operator &(Vector3i vec, Vector3i andv) { vec.x &= andv.x; @@ -443,65 +546,121 @@ namespace Godot return vec; } + /// <summary> + /// Returns <see langword="true"/> if the vectors are equal. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are equal.</returns> public static bool operator ==(Vector3i left, Vector3i right) { return left.Equals(right); } + /// <summary> + /// Returns <see langword="true"/> if the vectors are not equal. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the vectors are not equal.</returns> public static bool operator !=(Vector3i left, Vector3i right) { return !left.Equals(right); } + /// <summary> + /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector3i left, Vector3i right) { if (left.x == right.x) { if (left.y == right.y) + { return left.z < right.z; - else - return left.y < right.y; + } + return left.y < right.y; } - return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector3i left, Vector3i right) { if (left.x == right.x) { if (left.y == right.y) + { return left.z > right.z; - else - return left.y > right.y; + } + return left.y > right.y; } - return left.x > right.x; } + /// <summary> + /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is less than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector3i left, Vector3i right) { if (left.x == right.x) { if (left.y == right.y) + { return left.z <= right.z; - else - return left.y < right.y; + } + return left.y < right.y; } - return left.x < right.x; } + /// <summary> + /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// the X value of the <paramref name="left"/> vector is greater than + /// or equal to the X value of the <paramref name="right"/> vector. + /// If the X values are exactly equal, then it repeats this check + /// with the Y values of the two vectors, and then with the Z values. + /// This operator is useful for sorting vectors. + /// </summary> + /// <param name="left">The left vector.</param> + /// <param name="right">The right vector.</param> + /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector3i left, Vector3i right) { if (left.x == right.x) { if (left.y == right.y) + { return left.z >= right.z; - else - return left.y > right.y; + } + return left.y > right.y; } - return left.x > right.x; } @@ -524,10 +683,11 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal. + /// Returns <see langword="true"/> if the vector is equal + /// to the given object (<see paramref="obj"/>). /// </summary> - /// <param name="obj">The other object to compare.</param> - /// <returns>Whether or not the vector and the other object are equal.</returns> + /// <param name="obj">The object to compare with.</param> + /// <returns>Whether or not the vector and the object are equal.</returns> public override bool Equals(object obj) { if (obj is Vector3i) @@ -539,9 +699,9 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal + /// Returns <see langword="true"/> if the vectors are equal. /// </summary> - /// <param name="other">The other vector to compare.</param> + /// <param name="other">The other vector.</param> /// <returns>Whether or not the vectors are equal.</returns> public bool Equals(Vector3i other) { diff --git a/modules/mono/glue/gd_glue.cpp b/modules/mono/glue/gd_glue.cpp index a2ff868f65..07ddf5d945 100644 --- a/modules/mono/glue/gd_glue.cpp +++ b/modules/mono/glue/gd_glue.cpp @@ -182,26 +182,30 @@ void godot_icall_GD_printt(MonoArray *p_what) { print_line(str); } -float godot_icall_GD_randf() { - return Math::randf(); +void godot_icall_GD_randomize() { + Math::randomize(); } uint32_t godot_icall_GD_randi() { return Math::rand(); } -void godot_icall_GD_randomize() { - Math::randomize(); +float godot_icall_GD_randf() { + return Math::randf(); } -double godot_icall_GD_randf_range(double from, double to) { +int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) { return Math::random(from, to); } -int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) { +double godot_icall_GD_randf_range(double from, double to) { return Math::random(from, to); } +double godot_icall_GD_randfn(double mean, double deviation) { + return Math::randfn(mean, deviation); +} + uint32_t godot_icall_GD_rand_seed(uint64_t seed, uint64_t *newSeed) { uint32_t ret = Math::rand_from_seed(&seed); *newSeed = seed; @@ -300,11 +304,12 @@ void godot_register_gd_icalls() { GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printraw", godot_icall_GD_printraw); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_prints", godot_icall_GD_prints); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printt", godot_icall_GD_printt); - GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf); - GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randomize", godot_icall_GD_randomize); - GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range); + GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi); + GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi_range", godot_icall_GD_randi_range); + GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range); + GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randfn", godot_icall_GD_randfn); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_rand_seed", godot_icall_GD_rand_seed); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_seed", godot_icall_GD_seed); GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_str", godot_icall_GD_str); diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp index c80a80c7bd..d0a27b27c1 100644 --- a/modules/mono/utils/mono_reg_utils.cpp +++ b/modules/mono/utils/mono_reg_utils.cpp @@ -58,10 +58,10 @@ REGSAM _get_bitness_sam() { } LONG _RegOpenKey(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult) { - LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, Key::READ, phkResult); + LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ, phkResult); if (res != ERROR_SUCCESS) - res = RegOpenKeyExW(hKey, lpSubKey, 0, Key::READ | _get_bitness_sam(), phkResult); + res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ | _get_bitness_sam(), phkResult); return res; } diff --git a/modules/tinyexr/SCsub b/modules/tinyexr/SCsub index 30bde96fb4..bf9242cc16 100644 --- a/modules/tinyexr/SCsub +++ b/modules/tinyexr/SCsub @@ -20,6 +20,9 @@ env_tinyexr.Prepend(CPPPATH=[thirdparty_dir]) # Enable threaded loading with C++11. env_tinyexr.Append(CPPDEFINES=["TINYEXR_USE_THREAD"]) +# miniz is an external dependency, we could add it but we can instead rely +# on our existing bundled zlib. +env_tinyexr.Append(CPPDEFINES=[("TINYEXR_USE_MINIZ", 0)]) env_thirdparty = env_tinyexr.Clone() env_thirdparty.disable_warnings() diff --git a/modules/tinyexr/image_loader_tinyexr.cpp b/modules/tinyexr/image_loader_tinyexr.cpp index eb7a8597e6..6c4c06aab0 100644 --- a/modules/tinyexr/image_loader_tinyexr.cpp +++ b/modules/tinyexr/image_loader_tinyexr.cpp @@ -33,6 +33,8 @@ #include "core/os/os.h" #include "core/string/print_string.h" +#include <zlib.h> // Should come before including tinyexr. + #include "thirdparty/tinyexr/tinyexr.h" Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear, float p_scale) { diff --git a/modules/tinyexr/image_saver_tinyexr.cpp b/modules/tinyexr/image_saver_tinyexr.cpp index 6a2fb0f666..f64acf8395 100644 --- a/modules/tinyexr/image_saver_tinyexr.cpp +++ b/modules/tinyexr/image_saver_tinyexr.cpp @@ -31,6 +31,8 @@ #include "image_saver_tinyexr.h" #include "core/math/math_funcs.h" +#include <zlib.h> // Should come before including tinyexr. + #include "thirdparty/tinyexr/tinyexr.h" static bool is_supported_format(Image::Format p_format) { diff --git a/modules/upnp/SCsub b/modules/upnp/SCsub index b2fed0cb23..4b385b820d 100644 --- a/modules/upnp/SCsub +++ b/modules/upnp/SCsub @@ -26,9 +26,9 @@ if env["builtin_miniupnpc"]: "receivedata.c", "addr_is_reserved.c", ] - thirdparty_sources = [thirdparty_dir + "miniupnpc/" + file for file in thirdparty_sources] + thirdparty_sources = [thirdparty_dir + "src/" + file for file in thirdparty_sources] - env_upnp.Prepend(CPPPATH=[thirdparty_dir]) + env_upnp.Prepend(CPPPATH=[thirdparty_dir + "include"]) env_upnp.Append(CPPDEFINES=["MINIUPNP_STATICLIB"]) env_upnp.Append(CPPDEFINES=["MINIUPNPC_SET_SOCKET_TIMEOUT"]) diff --git a/modules/upnp/upnp.cpp b/modules/upnp/upnp.cpp index 0e51822b01..88d92b0083 100644 --- a/modules/upnp/upnp.cpp +++ b/modules/upnp/upnp.cpp @@ -30,8 +30,8 @@ #include "upnp.h" -#include <miniupnpc/miniwget.h> -#include <miniupnpc/upnpcommands.h> +#include <miniwget.h> +#include <upnpcommands.h> #include <stdlib.h> diff --git a/modules/upnp/upnp.h b/modules/upnp/upnp.h index b961a9667f..67df187f8c 100644 --- a/modules/upnp/upnp.h +++ b/modules/upnp/upnp.h @@ -35,7 +35,7 @@ #include "upnp_device.h" -#include <miniupnpc/miniupnpc.h> +#include <miniupnpc.h> class UPNP : public RefCounted { GDCLASS(UPNP, RefCounted); diff --git a/modules/upnp/upnp_device.cpp b/modules/upnp/upnp_device.cpp index ddc66d593c..692a0f3509 100644 --- a/modules/upnp/upnp_device.cpp +++ b/modules/upnp/upnp_device.cpp @@ -32,7 +32,7 @@ #include "upnp.h" -#include <miniupnpc/upnpcommands.h> +#include <upnpcommands.h> String UPNPDevice::query_external_address() const { ERR_FAIL_COND_V_MSG(!is_valid_gateway(), "", "The Internet Gateway Device must be valid."); diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index be6bf00e50..a452974014 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -9,7 +9,7 @@ You are most likely to use this class via the Visual Script editor or when writing plugins for it. </description> <tutorials> - <link title="VisualScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/visual_script/index.html</link> + <link title="VisualScript documentation index">$DOCS_URL/tutorials/scripting/visual_script/index.html</link> </tutorials> <methods> <method name="add_custom_signal"> diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml index f4abb3c122..b3fd678379 100644 --- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml +++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml @@ -112,104 +112,107 @@ <constant name="MATH_RANDF" value="32" enum="BuiltinFunc"> Return a random floating-point value between 0 and 1. To obtain a random value between 0 to N, you can use it with multiplication. </constant> - <constant name="MATH_RANDF_RANGE" value="33" enum="BuiltinFunc"> + <constant name="MATH_RANDI_RANGE" value="33" enum="BuiltinFunc"> + Return a random 32-bit integer value between the two inputs. + </constant> + <constant name="MATH_RANDF_RANGE" value="34" enum="BuiltinFunc"> Return a random floating-point value between the two inputs. </constant> - <constant name="MATH_RANDI_RANGE" value="34" enum="BuiltinFunc"> - Return a random 32-bit integer value between the two inputs. + <constant name="MATH_RANDFN" value="35" enum="BuiltinFunc"> + Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified mean and a standard deviation. This is also called Gaussian distribution. </constant> - <constant name="MATH_SEED" value="35" enum="BuiltinFunc"> + <constant name="MATH_SEED" value="36" enum="BuiltinFunc"> Set the seed for the random number generator. </constant> - <constant name="MATH_RANDSEED" value="36" enum="BuiltinFunc"> + <constant name="MATH_RANDSEED" value="37" enum="BuiltinFunc"> Return a random value from the given seed, along with the new seed. </constant> - <constant name="MATH_DEG2RAD" value="37" enum="BuiltinFunc"> + <constant name="MATH_DEG2RAD" value="38" enum="BuiltinFunc"> Convert the input from degrees to radians. </constant> - <constant name="MATH_RAD2DEG" value="38" enum="BuiltinFunc"> + <constant name="MATH_RAD2DEG" value="39" enum="BuiltinFunc"> Convert the input from radians to degrees. </constant> - <constant name="MATH_LINEAR2DB" value="39" enum="BuiltinFunc"> + <constant name="MATH_LINEAR2DB" value="40" enum="BuiltinFunc"> Convert the input from linear volume to decibel volume. </constant> - <constant name="MATH_DB2LINEAR" value="40" enum="BuiltinFunc"> + <constant name="MATH_DB2LINEAR" value="41" enum="BuiltinFunc"> Convert the input from decibel volume to linear volume. </constant> - <constant name="MATH_WRAP" value="41" enum="BuiltinFunc"> + <constant name="MATH_WRAP" value="42" enum="BuiltinFunc"> </constant> - <constant name="MATH_WRAPF" value="42" enum="BuiltinFunc"> + <constant name="MATH_WRAPF" value="43" enum="BuiltinFunc"> </constant> - <constant name="MATH_PINGPONG" value="43" enum="BuiltinFunc"> + <constant name="MATH_PINGPONG" value="44" enum="BuiltinFunc"> Return the [code]value[/code] wrapped between [code]0[/code] and the [code]length[/code]. If the limit is reached, the next value the function returned is decreased to the [code]0[/code] side or increased to the [code]length[/code] side (like a triangle wave). If [code]length[/code] is less than zero, it becomes positive. </constant> - <constant name="LOGIC_MAX" value="44" enum="BuiltinFunc"> + <constant name="LOGIC_MAX" value="45" enum="BuiltinFunc"> Return the greater of the two numbers, also known as their maximum. </constant> - <constant name="LOGIC_MIN" value="45" enum="BuiltinFunc"> + <constant name="LOGIC_MIN" value="46" enum="BuiltinFunc"> Return the lesser of the two numbers, also known as their minimum. </constant> - <constant name="LOGIC_CLAMP" value="46" enum="BuiltinFunc"> + <constant name="LOGIC_CLAMP" value="47" enum="BuiltinFunc"> Return the input clamped inside the given range, ensuring the result is never outside it. Equivalent to [code]min(max(input, range_low), range_high)[/code]. </constant> - <constant name="LOGIC_NEAREST_PO2" value="47" enum="BuiltinFunc"> + <constant name="LOGIC_NEAREST_PO2" value="48" enum="BuiltinFunc"> Return the nearest power of 2 to the input. </constant> - <constant name="OBJ_WEAKREF" value="48" enum="BuiltinFunc"> + <constant name="OBJ_WEAKREF" value="49" enum="BuiltinFunc"> Create a [WeakRef] from the input. </constant> - <constant name="TYPE_CONVERT" value="49" enum="BuiltinFunc"> + <constant name="TYPE_CONVERT" value="50" enum="BuiltinFunc"> Convert between types. </constant> - <constant name="TYPE_OF" value="50" enum="BuiltinFunc"> + <constant name="TYPE_OF" value="51" enum="BuiltinFunc"> Return the type of the input as an integer. Check [enum Variant.Type] for the integers that might be returned. </constant> - <constant name="TYPE_EXISTS" value="51" enum="BuiltinFunc"> + <constant name="TYPE_EXISTS" value="52" enum="BuiltinFunc"> Checks if a type is registered in the [ClassDB]. </constant> - <constant name="TEXT_CHAR" value="52" enum="BuiltinFunc"> + <constant name="TEXT_CHAR" value="53" enum="BuiltinFunc"> Return a character with the given ascii value. </constant> - <constant name="TEXT_STR" value="53" enum="BuiltinFunc"> + <constant name="TEXT_STR" value="54" enum="BuiltinFunc"> Convert the input to a string. </constant> - <constant name="TEXT_PRINT" value="54" enum="BuiltinFunc"> + <constant name="TEXT_PRINT" value="55" enum="BuiltinFunc"> Print the given string to the output window. </constant> - <constant name="TEXT_PRINTERR" value="55" enum="BuiltinFunc"> + <constant name="TEXT_PRINTERR" value="56" enum="BuiltinFunc"> Print the given string to the standard error output. </constant> - <constant name="TEXT_PRINTRAW" value="56" enum="BuiltinFunc"> + <constant name="TEXT_PRINTRAW" value="57" enum="BuiltinFunc"> Print the given string to the standard output, without adding a newline. </constant> - <constant name="TEXT_PRINT_VERBOSE" value="57" enum="BuiltinFunc"> + <constant name="TEXT_PRINT_VERBOSE" value="58" enum="BuiltinFunc"> </constant> - <constant name="VAR_TO_STR" value="58" enum="BuiltinFunc"> + <constant name="VAR_TO_STR" value="59" enum="BuiltinFunc"> Serialize a [Variant] to a string. </constant> - <constant name="STR_TO_VAR" value="59" enum="BuiltinFunc"> + <constant name="STR_TO_VAR" value="60" enum="BuiltinFunc"> Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR]. </constant> - <constant name="VAR_TO_BYTES" value="60" enum="BuiltinFunc"> + <constant name="VAR_TO_BYTES" value="61" enum="BuiltinFunc"> Serialize a [Variant] to a [PackedByteArray]. </constant> - <constant name="BYTES_TO_VAR" value="61" enum="BuiltinFunc"> + <constant name="BYTES_TO_VAR" value="62" enum="BuiltinFunc"> Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES]. </constant> - <constant name="MATH_SMOOTHSTEP" value="62" enum="BuiltinFunc"> + <constant name="MATH_SMOOTHSTEP" value="63" enum="BuiltinFunc"> Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula: [codeblock] var t = clamp((weight - from) / (to - from), 0.0, 1.0) return t * t * (3.0 - 2.0 * t) [/codeblock] </constant> - <constant name="MATH_POSMOD" value="63" enum="BuiltinFunc"> + <constant name="MATH_POSMOD" value="64" enum="BuiltinFunc"> </constant> - <constant name="MATH_LERP_ANGLE" value="64" enum="BuiltinFunc"> + <constant name="MATH_LERP_ANGLE" value="65" enum="BuiltinFunc"> </constant> - <constant name="TEXT_ORD" value="65" enum="BuiltinFunc"> + <constant name="TEXT_ORD" value="66" enum="BuiltinFunc"> </constant> - <constant name="FUNC_MAX" value="66" enum="BuiltinFunc"> + <constant name="FUNC_MAX" value="67" enum="BuiltinFunc"> Represents the size of the [enum BuiltinFunc] enum. </constant> </constants> diff --git a/modules/visual_script/editor/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp index 2096487235..e8b25b58b6 100644 --- a/modules/visual_script/editor/visual_script_editor.cpp +++ b/modules/visual_script/editor/visual_script_editor.cpp @@ -998,7 +998,7 @@ void VisualScriptEditor::_change_port_type(int p_select, int p_id, int p_port, b void VisualScriptEditor::_update_node_size(int p_id) { Node *node = graph->get_node(itos(p_id)); if (Object::cast_to<Control>(node)) { - Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller. + Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller. } } @@ -1616,7 +1616,7 @@ void VisualScriptEditor::_expression_text_changed(const String &p_text, int p_id Node *node = graph->get_node(itos(p_id)); if (Object::cast_to<Control>(node)) { - Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller. + Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller. } updating_graph = false; @@ -3676,7 +3676,7 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i } default_value_edit->set_position(Object::cast_to<Control>(p_button)->get_global_position() + Vector2(0, Object::cast_to<Control>(p_button)->get_size().y)); - default_value_edit->set_size(Size2(1, 1)); + default_value_edit->reset_size(); if (pinfo.type == Variant::NODE_PATH) { Node *edited_scene = get_tree()->get_edited_scene_root(); @@ -3832,7 +3832,7 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_ undo_redo->commit_action(); gn->set_custom_minimum_size(new_size); - gn->set_size(Size2(1, 1)); + gn->reset_size(); graph->set_block_minimum_size_adjust(false); updating_graph = false; } @@ -4132,10 +4132,10 @@ void VisualScriptEditor::_member_rmb_selected(const Vector2 &p_pos) { member_popup->clear(); member_popup->set_position(members->get_global_position() + p_pos); - member_popup->set_size(Vector2()); + member_popup->reset_size(); function_name_edit->set_position(members->get_global_position() + p_pos); - function_name_edit->set_size(Vector2()); + function_name_edit->reset_size(); TreeItem *root = members->get_root(); diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp index 54a5e1449f..7ae85ea415 100644 --- a/modules/visual_script/visual_script_builtin_funcs.cpp +++ b/modules/visual_script/visual_script_builtin_funcs.cpp @@ -71,8 +71,9 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX "randomize", "randi", "randf", - "randf_range", "randi_range", + "randf_range", + "randfn", "seed", "rand_seed", "deg2rad", @@ -195,8 +196,9 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) { case MATH_POW: case MATH_EASE: case MATH_SNAPPED: - case MATH_RANDF_RANGE: case MATH_RANDI_RANGE: + case MATH_RANDF_RANGE: + case MATH_RANDFN: case LOGIC_MAX: case LOGIC_MIN: case TYPE_CONVERT: @@ -353,6 +355,13 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const case MATH_RANDI: case MATH_RANDF: { } break; + case MATH_RANDI_RANGE: { + if (p_idx == 0) { + return PropertyInfo(Variant::INT, "from"); + } else { + return PropertyInfo(Variant::INT, "to"); + } + } break; case MATH_RANDF_RANGE: { if (p_idx == 0) { return PropertyInfo(Variant::FLOAT, "from"); @@ -360,11 +369,11 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const return PropertyInfo(Variant::FLOAT, "to"); } } break; - case MATH_RANDI_RANGE: { + case MATH_RANDFN: { if (p_idx == 0) { - return PropertyInfo(Variant::INT, "from"); + return PropertyInfo(Variant::FLOAT, "mean"); } else { - return PropertyInfo(Variant::INT, "to"); + return PropertyInfo(Variant::FLOAT, "deviation"); } } break; case MATH_SEED: @@ -527,6 +536,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons t = Variant::INT; } break; case MATH_RANDF: + case MATH_RANDFN: case MATH_RANDF_RANGE: { t = Variant::FLOAT; } break; @@ -827,15 +837,20 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in case VisualScriptBuiltinFunc::MATH_RANDF: { *r_return = Math::randf(); } break; + case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: { + VALIDATE_ARG_NUM(0); + VALIDATE_ARG_NUM(1); + *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]); + } break; case VisualScriptBuiltinFunc::MATH_RANDF_RANGE: { VALIDATE_ARG_NUM(0); VALIDATE_ARG_NUM(1); *r_return = Math::random((double)*p_inputs[0], (double)*p_inputs[1]); } break; - case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: { + case VisualScriptBuiltinFunc::MATH_RANDFN: { VALIDATE_ARG_NUM(0); VALIDATE_ARG_NUM(1); - *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]); + *r_return = Math::randfn((double)*p_inputs[0], (double)*p_inputs[1]); } break; case VisualScriptBuiltinFunc::MATH_SEED: { VALIDATE_ARG_NUM(0); @@ -1211,8 +1226,9 @@ void VisualScriptBuiltinFunc::_bind_methods() { BIND_ENUM_CONSTANT(MATH_RANDOMIZE); BIND_ENUM_CONSTANT(MATH_RANDI); BIND_ENUM_CONSTANT(MATH_RANDF); - BIND_ENUM_CONSTANT(MATH_RANDF_RANGE); BIND_ENUM_CONSTANT(MATH_RANDI_RANGE); + BIND_ENUM_CONSTANT(MATH_RANDF_RANGE); + BIND_ENUM_CONSTANT(MATH_RANDFN); BIND_ENUM_CONSTANT(MATH_SEED); BIND_ENUM_CONSTANT(MATH_RANDSEED); BIND_ENUM_CONSTANT(MATH_DEG2RAD); @@ -1301,8 +1317,9 @@ void register_visual_script_builtin_func_node() { VisualScriptLanguage::singleton->add_register_func("functions/built_in/randomize", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOMIZE>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF>); - VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI_RANGE>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/randfn", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDFN>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/seed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SEED>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/randseed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDSEED>); diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h index 30f1f0d417..f71a053f7d 100644 --- a/modules/visual_script/visual_script_builtin_funcs.h +++ b/modules/visual_script/visual_script_builtin_funcs.h @@ -71,8 +71,9 @@ public: MATH_RANDOMIZE, MATH_RANDI, MATH_RANDF, - MATH_RANDF_RANGE, MATH_RANDI_RANGE, + MATH_RANDF_RANGE, + MATH_RANDFN, MATH_SEED, MATH_RANDSEED, MATH_DEG2RAD, diff --git a/modules/vorbis/resource_importer_ogg_vorbis.cpp b/modules/vorbis/resource_importer_ogg_vorbis.cpp index 33ee6cf359..be9f880103 100644 --- a/modules/vorbis/resource_importer_ogg_vorbis.cpp +++ b/modules/vorbis/resource_importer_ogg_vorbis.cpp @@ -57,7 +57,7 @@ String ResourceImporterOGGVorbis::get_resource_type() const { return "AudioStreamOGGVorbis"; } -bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { +bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const { return true; } @@ -69,7 +69,7 @@ String ResourceImporterOGGVorbis::get_preset_name(int p_idx) const { return String(); } -void ResourceImporterOGGVorbis::get_import_options(List<ImportOption> *r_options, int p_preset) const { +void ResourceImporterOGGVorbis::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0)); } diff --git a/modules/vorbis/resource_importer_ogg_vorbis.h b/modules/vorbis/resource_importer_ogg_vorbis.h index acdc1a3d38..8565e0deb8 100644 --- a/modules/vorbis/resource_importer_ogg_vorbis.h +++ b/modules/vorbis/resource_importer_ogg_vorbis.h @@ -51,8 +51,8 @@ public: virtual String get_visible_name() const override; virtual int get_preset_count() const override; virtual String get_preset_name(int p_idx) const override; - virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override; - virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override; + virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override; + virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override; virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; diff --git a/modules/webp/SCsub b/modules/webp/SCsub index 4c0c2f7893..80d62400c8 100644 --- a/modules/webp/SCsub +++ b/modules/webp/SCsub @@ -67,6 +67,7 @@ if env["builtin_libwebp"]: "dsp/lossless_msa.c", "dsp/lossless_neon.c", "dsp/lossless_sse2.c", + "dsp/lossless_sse41.c", "dsp/rescaler.c", "dsp/rescaler_mips32.c", "dsp/rescaler_mips_dsp_r2.c", diff --git a/modules/websocket/SCsub b/modules/websocket/SCsub index 4c022c43cf..63c941c4a8 100644 --- a/modules/websocket/SCsub +++ b/modules/websocket/SCsub @@ -18,12 +18,11 @@ elif env["builtin_wslay"]: "wslay_net.c", "wslay_event.c", "wslay_queue.c", - "wslay_stack.c", "wslay_frame.c", ] thirdparty_sources = [thirdparty_dir + s for s in thirdparty_sources] - env_ws.Prepend(CPPPATH=[thirdparty_dir + "includes/"]) + env_ws.Prepend(CPPPATH=[thirdparty_dir]) env_ws.Append(CPPDEFINES=["HAVE_CONFIG_H"]) if env["platform"] == "windows" or env["platform"] == "uwp": diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp index 34f0064a5e..505e7ac0eb 100644 --- a/platform/android/display_server_android.cpp +++ b/platform/android/display_server_android.cpp @@ -119,7 +119,9 @@ DisplayServer::ScreenOrientation DisplayServerAndroid::screen_get_orientation(in GodotIOJavaWrapper *godot_io_java = OS_Android::get_singleton()->get_godot_io_java(); ERR_FAIL_COND_V(!godot_io_java, SCREEN_LANDSCAPE); - return (ScreenOrientation)godot_io_java->get_screen_orientation(); + const int orientation = godot_io_java->get_screen_orientation(); + ERR_FAIL_INDEX_V_MSG(orientation, 7, SCREEN_LANDSCAPE, "Unrecognized screen orientation"); + return (ScreenOrientation)orientation; } int DisplayServerAndroid::get_screen_count() const { diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index 4c45be5210..05cd63d935 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -751,9 +751,9 @@ void EditorExportPlatformAndroid::_get_permissions(const Ref<EditorExportPreset> } int xr_mode_index = p_preset->get("xr_features/xr_mode"); - if (xr_mode_index == 1 /* XRMode.OVR */) { + if (xr_mode_index == XR_MODE_OPENXR) { int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required - if (hand_tracking_index > 0) { + if (hand_tracking_index > XR_HAND_TRACKING_NONE) { if (r_permissions.find("com.oculus.permission.HAND_TRACKING") == -1) { r_permissions.push_back("com.oculus.permission.HAND_TRACKING"); } @@ -964,6 +964,20 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p } } + if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") { + // Update the meta-data 'android:name' attribute based on the selected XR mode. + if (xr_mode_index == XR_MODE_OPENXR) { + string_table.write[attr_value] = "com.samsung.android.vr.application.mode"; + } + } + + if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") { + // Update the meta-data 'android:value' attribute based on the selected XR mode. + if (xr_mode_index == XR_MODE_OPENXR) { + string_table.write[attr_value] = "vr_only"; + } + } + iofs += 20; } @@ -978,7 +992,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p Vector<bool> feature_required_list; Vector<int> feature_versions; - if (xr_mode_index == 1 /* XRMode.OVR */) { + if (xr_mode_index == XR_MODE_OPENXR) { // Set degrees of freedom feature_names.push_back("android.hardware.vr.headtracking"); feature_required_list.push_back(true); @@ -986,11 +1000,19 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p // Check for hand tracking int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required - if (hand_tracking_index > 0) { + if (hand_tracking_index > XR_HAND_TRACKING_NONE) { feature_names.push_back("oculus.software.handtracking"); - feature_required_list.push_back(hand_tracking_index == 2); + feature_required_list.push_back(hand_tracking_index == XR_HAND_TRACKING_REQUIRED); feature_versions.push_back(-1); // no version attribute should be added. } + + // Check for passthrough + int passthrough_mode = p_preset->get("xr_features/passthrough"); + if (passthrough_mode > XR_PASSTHROUGH_NONE) { + feature_names.push_back("com.oculus.feature.PASSTHROUGH"); + feature_required_list.push_back(passthrough_mode == XR_PASSTHROUGH_REQUIRED); + feature_versions.push_back(-1); + } } if (feature_names.size() > 0) { @@ -1667,11 +1689,11 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_background_option, PROPERTY_HINT_FILE, "*.png"), "")); - r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "graphics/depth_buffer_bits", PROPERTY_HINT_ENUM, "16 bits,24 bits [default],32 bits"), 1)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/opengl_debug"), false)); - r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,Oculus Mobile VR"), 0)); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,OpenXR"), 0)); r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/hand_tracking", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0)); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/passthrough", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_small"), true)); @@ -2138,10 +2160,17 @@ bool EditorExportPlatformAndroid::can_export(const Ref<EditorExportPreset> &p_pr // Validate the Xr features are properly populated int xr_mode_index = p_preset->get("xr_features/xr_mode"); int hand_tracking = p_preset->get("xr_features/hand_tracking"); - if (xr_mode_index != /* XRMode.OVR*/ 1) { - if (hand_tracking > 0) { + int passthrough_mode = p_preset->get("xr_features/passthrough"); + if (xr_mode_index != XR_MODE_OPENXR) { + if (hand_tracking > XR_HAND_TRACKING_NONE) { valid = false; - err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."); + err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"OpenXR\"."); + err += "\n"; + } + + if (passthrough_mode > XR_PASSTHROUGH_NONE) { + valid = false; + err += TTR("\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"."); err += "\n"; } } @@ -2203,18 +2232,12 @@ void EditorExportPlatformAndroid::get_command_line_flags(const Ref<EditorExportP } int xr_mode_index = p_preset->get("xr_features/xr_mode"); - if (xr_mode_index == 1) { - command_line_strings.push_back("--xr_mode_ovr"); + if (xr_mode_index == XR_MODE_OPENXR) { + command_line_strings.push_back("--xr_mode_openxr"); } else { // XRMode.REGULAR is the default. command_line_strings.push_back("--xr_mode_regular"); } - int depth_buffer_bits_index = p_preset->get("graphics/depth_buffer_bits"); - if (depth_buffer_bits_index >= 0 && depth_buffer_bits_index <= 2) { - int depth_buffer_bits = 16 + depth_buffer_bits_index * 8; - command_line_strings.push_back(vformat("--use_depth=%d", depth_buffer_bits)); - } - bool immersive = p_preset->get("screen/immersive_mode"); if (immersive) { command_line_strings.push_back("--use_immersive"); diff --git a/platform/android/export/gradle_export_util.cpp b/platform/android/export/gradle_export_util.cpp index b0d623827e..658c0ecd0a 100644 --- a/platform/android/export/gradle_export_util.cpp +++ b/platform/android/export/gradle_export_util.cpp @@ -211,16 +211,24 @@ String _get_screen_sizes_tag(const Ref<EditorExportPreset> &p_preset) { String _get_xr_features_tag(const Ref<EditorExportPreset> &p_preset) { String manifest_xr_features; - bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1; + int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode")); + bool uses_xr = xr_mode_index == XR_MODE_OPENXR; if (uses_xr) { manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"android.hardware.vr.headtracking\" android:required=\"true\" android:version=\"1\" />\n"; int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required - if (hand_tracking_index == 1) { + if (hand_tracking_index == XR_HAND_TRACKING_OPTIONAL) { manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"false\" />\n"; - } else if (hand_tracking_index == 2) { + } else if (hand_tracking_index == XR_HAND_TRACKING_REQUIRED) { manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"true\" />\n"; } + + int passthrough_mode = p_preset->get("xr_features/passthrough"); + if (passthrough_mode == XR_PASSTHROUGH_OPTIONAL) { + manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"false\" />\n"; + } else if (passthrough_mode == XR_PASSTHROUGH_REQUIRED) { + manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"true\" />\n"; + } } return manifest_xr_features; } @@ -239,7 +247,8 @@ String _get_instrumentation_tag(const Ref<EditorExportPreset> &p_preset) { } String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) { - bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1; + int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode")); + bool uses_xr = xr_mode_index == XR_MODE_OPENXR; String orientation = _get_android_orientation_label(DisplayServer::ScreenOrientation(int(GLOBAL_GET("display/window/handheld/orientation")))); String manifest_activity_text = vformat( " <activity android:name=\"com.godot.game.GodotApp\" " @@ -256,6 +265,8 @@ String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) { } String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_storage_permission) { + int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode")); + bool uses_xr = xr_mode_index == XR_MODE_OPENXR; String manifest_application_text = vformat( " <application android:label=\"@string/godot_project_name_string\"\n" " android:allowBackup=\"%s\"\n" @@ -270,6 +281,9 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_ bool_to_string(p_preset->get("package/retain_data_on_uninstall")), bool_to_string(p_has_storage_permission)); + if (uses_xr) { + manifest_application_text += " <meta-data tools:node=\"replace\" android:name=\"com.samsung.android.vr.application.mode\" android:value=\"vr_only\" />\n"; + } manifest_application_text += _get_activity_tag(p_preset); manifest_application_text += " </application>\n"; return manifest_application_text; diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h index 744022f1f9..db05c7534c 100644 --- a/platform/android/export/gradle_export_util.h +++ b/platform/android/export/gradle_export_util.h @@ -44,6 +44,21 @@ const String godot_project_name_xml_string = R"(<?xml version="1.0" encoding="ut </resources> )"; +// Supported XR modes. +// This should match the entries in 'platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java' +static const int XR_MODE_REGULAR = 0; +static const int XR_MODE_OPENXR = 1; + +// Supported XR hand tracking modes. +static const int XR_HAND_TRACKING_NONE = 0; +static const int XR_HAND_TRACKING_OPTIONAL = 1; +static const int XR_HAND_TRACKING_REQUIRED = 2; + +// Supported XR passthrough modes. +static const int XR_PASSTHROUGH_NONE = 0; +static const int XR_PASSTHROUGH_OPTIONAL = 1; +static const int XR_PASSTHROUGH_REQUIRED = 2; + struct CustomExportData { String assets_directory; bool debug; diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml index d7bf6cef30..9ae6367b42 100644 --- a/platform/android/java/app/AndroidManifest.xml +++ b/platform/android/java/app/AndroidManifest.xml @@ -33,6 +33,11 @@ <!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. --> <!-- Do these changes in the export preset. Adding new ones is fine. --> + <!-- XR mode metadata. This is modified by the exporter based on the selected xr mode. DO NOT CHANGE the values here. --> + <meta-data + android:name="xr_mode_metadata_name" + android:value="xr_mode_metadata_value" /> + <activity android:name=".GodotApp" android:label="@string/godot_project_name_string" diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java index d872d5ed8a..17ff3c75c0 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -119,7 +119,6 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC private Button mWiFiSettingsButton; private XRMode xrMode = XRMode.REGULAR; - private int depth_buffer_bits = 24; private boolean use_immersive = false; private boolean use_debug_opengl = false; private boolean mStatePaused; @@ -266,8 +265,7 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC if (videoDriver.equals("vulkan")) { mRenderView = new GodotVulkanRenderView(activity, this); } else { - mRenderView = new GodotGLRenderView(activity, this, xrMode, depth_buffer_bits, - use_debug_opengl); + mRenderView = new GodotGLRenderView(activity, this, xrMode, use_debug_opengl); } View view = mRenderView.getView(); @@ -504,14 +502,8 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC boolean has_extra = i < command_line.length - 1; if (command_line[i].equals(XRMode.REGULAR.cmdLineArg)) { xrMode = XRMode.REGULAR; - } else if (command_line[i].equals(XRMode.OVR.cmdLineArg)) { - xrMode = XRMode.OVR; - } else if (command_line[i].startsWith("--use_depth=")) { - try { - depth_buffer_bits = Integer.parseInt(command_line[i].split("=")[1]); - } catch (Exception e) { - e.printStackTrace(); - } + } else if (command_line[i].equals(XRMode.OPENXR.cmdLineArg)) { + xrMode = XRMode.OPENXR; } else if (command_line[i].equals("--debug_opengl")) { use_debug_opengl = true; } else if (command_line[i].equals("--use_immersive")) { diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java index 8b77302491..d5b0b67903 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java @@ -78,10 +78,8 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView private final GodotRenderer godotRenderer; private PointerIcon pointerIcon; - public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, int p_depth_buffer_bits, - boolean p_use_debug_opengl) { + public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, boolean p_use_debug_opengl) { super(context); - GLUtils.depth_buffer_bits = p_depth_buffer_bits; GLUtils.use_debug_opengl = p_use_debug_opengl; this.godot = godot; @@ -91,7 +89,7 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { pointerIcon = PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_DEFAULT); } - init(xrMode, false, 16, 0); + init(xrMode, false); } @Override @@ -172,11 +170,11 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView return pointerIcon; } - private void init(XRMode xrMode, boolean translucent, int depth, int stencil) { + private void init(XRMode xrMode, boolean translucent) { setPreserveEGLContextOnPause(true); setFocusableInTouchMode(true); switch (xrMode) { - case OVR: + case OPENXR: // Replace the default egl config chooser. setEGLConfigChooser(new OvrConfigChooser()); @@ -209,16 +207,9 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView * below. */ - RegularConfigChooser configChooser = - new RegularFallbackConfigChooser(8, 8, 8, 8, 16, stencil, - new RegularConfigChooser(5, 6, 5, 0, 16, stencil)); - if (GLUtils.depth_buffer_bits >= 24) { - configChooser = new RegularFallbackConfigChooser(8, 8, 8, 8, 24, stencil, configChooser); - if (GLUtils.depth_buffer_bits >= 32) { - configChooser = new RegularFallbackConfigChooser(8, 8, 8, 8, 32, stencil, configChooser); - } - } - setEGLConfigChooser(configChooser); + setEGLConfigChooser( + new RegularFallbackConfigChooser(8, 8, 8, 8, 24, 0, + new RegularConfigChooser(8, 8, 8, 8, 16, 0))); break; } diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java index d85d88ec6c..5f354b6b4c 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java @@ -288,7 +288,34 @@ public class GodotIO { } public int getScreenOrientation() { - return activity.getRequestedOrientation(); + int orientation = activity.getRequestedOrientation(); + switch (orientation) { + case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE: + return SCREEN_LANDSCAPE; + case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT: + return SCREEN_PORTRAIT; + case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE: + return SCREEN_REVERSE_LANDSCAPE; + case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT: + return SCREEN_REVERSE_PORTRAIT; + case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE: + case ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE: + return SCREEN_SENSOR_LANDSCAPE; + case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT: + case ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT: + return SCREEN_SENSOR_PORTRAIT; + case ActivityInfo.SCREEN_ORIENTATION_SENSOR: + case ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR: + case ActivityInfo.SCREEN_ORIENTATION_FULL_USER: + return SCREEN_SENSOR; + case ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED: + case ActivityInfo.SCREEN_ORIENTATION_USER: + case ActivityInfo.SCREEN_ORIENTATION_BEHIND: + case ActivityInfo.SCREEN_ORIENTATION_NOSENSOR: + case ActivityInfo.SCREEN_ORIENTATION_LOCKED: + default: + return -1; + } } public void setEdit(GodotEditText _edit) { diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java index 0d581785ab..09820fad5f 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java @@ -44,7 +44,6 @@ public class GLUtils { public static final boolean DEBUG = false; - public static int depth_buffer_bits; // No need to reiterate the default here public static boolean use_debug_opengl = false; private static final String[] ATTRIBUTES_NAMES = new String[] { diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java index 0995477baf..58f02b0396 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java @@ -35,7 +35,7 @@ package org.godotengine.godot.xr; */ public enum XRMode { REGULAR(0, "Regular", "--xr_mode_regular", "Default Android Gamepad"), // Regular/flatscreen - OVR(1, "Oculus Mobile VR", "--xr_mode_ovr", ""); + OPENXR(1, "OpenXR", "--xr_mode_openxr", ""); final int index; final String label; diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py index 891ae419bd..b57f3b3f16 100644 --- a/platform/javascript/detect.py +++ b/platform/javascript/detect.py @@ -180,6 +180,13 @@ def configure(env): env.Prepend(CPPPATH=["#platform/javascript"]) env.Append(CPPDEFINES=["JAVASCRIPT_ENABLED", "UNIX_ENABLED"]) + if env["opengl3"]: + env.AppendUnique(CPPDEFINES=["GLES3_ENABLED"]) + # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1. + env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"]) + # Allow use to take control of swapping WebGL buffers. + env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"]) + if env["javascript_eval"]: env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"]) @@ -218,25 +225,11 @@ def configure(env): # us since we don't know requirements at compile-time. env.Append(LINKFLAGS=["-s", "ALLOW_MEMORY_GROWTH=1"]) - # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1. - env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"]) - # Do not call main immediately when the support code is ready. env.Append(LINKFLAGS=["-s", "INVOKE_RUN=0"]) - # Allow use to take control of swapping WebGL buffers. - env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"]) - # callMain for manual start, cwrap for the mono version. env.Append(LINKFLAGS=["-s", "EXPORTED_RUNTIME_METHODS=['callMain','cwrap']"]) # Add code that allow exiting runtime. env.Append(LINKFLAGS=["-s", "EXIT_RUNTIME=1"]) - - # TODO remove once we have GLES support back (temporary fix undefined symbols due to dead code elimination). - env.Append( - LINKFLAGS=[ - "-s", - "EXPORTED_FUNCTIONS=['_main', '_emscripten_webgl_get_current_context']", - ] - ) diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp index d12e1aeee8..7648ddaf43 100644 --- a/platform/javascript/display_server_javascript.cpp +++ b/platform/javascript/display_server_javascript.cpp @@ -30,6 +30,9 @@ #include "platform/javascript/display_server_javascript.h" +#ifdef GLES3_ENABLED +#include "drivers/gles3/rasterizer_gles3.h" +#endif #include "platform/javascript/os_javascript.h" #include "servers/rendering/rasterizer_dummy.h" @@ -50,14 +53,6 @@ DisplayServerJavaScript *DisplayServerJavaScript::get_singleton() { } // Window (canvas) -void DisplayServerJavaScript::focus_canvas() { - godot_js_display_canvas_focus(); -} - -bool DisplayServerJavaScript::is_canvas_focused() { - return godot_js_display_canvas_is_focused() != 0; -} - bool DisplayServerJavaScript::check_size_force_redraw() { return godot_js_display_size_update() != 0; } @@ -141,11 +136,12 @@ void DisplayServerJavaScript::key_callback(int p_pressed, int p_repeat, int p_mo int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers) { DisplayServerJavaScript *ds = get_singleton(); + Point2 pos(p_x, p_y); + Input::get_singleton()->set_mouse_position(pos); Ref<InputEventMouseButton> ev; ev.instantiate(); - ev->set_pressed(p_pressed); - ev->set_position(Point2(p_x, p_y)); - ev->set_global_position(ev->get_position()); + ev->set_position(pos); + ev->set_global_position(pos); ev->set_pressed(p_pressed); dom2godot_mod(ev, p_modifiers); @@ -222,13 +218,15 @@ void DisplayServerJavaScript::mouse_move_callback(double p_x, double p_y, double return; } + Point2 pos(p_x, p_y); + Input::get_singleton()->set_mouse_position(pos); Ref<InputEventMouseMotion> ev; ev.instantiate(); dom2godot_mod(ev, p_modifiers); ev->set_button_mask(input_mask); - ev->set_position(Point2(p_x, p_y)); - ev->set_global_position(ev->get_position()); + ev->set_position(pos); + ev->set_global_position(pos); ev->set_relative(Vector2(p_rel_x, p_rel_y)); Input::get_singleton()->set_mouse_position(ev->get_position()); @@ -397,6 +395,10 @@ DisplayServer::MouseMode DisplayServerJavaScript::mouse_get_mode() const { return MOUSE_MODE_VISIBLE; } +Point2i DisplayServerJavaScript::mouse_get_position() const { + return Input::get_singleton()->get_mouse_position(); +} + // Wheel int DisplayServerJavaScript::mouse_wheel_callback(double p_delta_x, double p_delta_y) { if (!godot_js_display_canvas_is_focused()) { @@ -580,7 +582,9 @@ void DisplayServerJavaScript::process_joypads() { Vector<String> DisplayServerJavaScript::get_rendering_drivers_func() { Vector<String> drivers; - drivers.push_back("dummy"); +#ifdef GLES3_ENABLED + drivers.push_back("opengl3"); +#endif return drivers; } @@ -678,40 +682,34 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive // Expose method for requesting quit. godot_js_os_request_quit_cb(request_quit_callback); - RasterizerDummy::make_current(); // TODO OpenGL in Godot 4.0... or webgpu? -#if 0 - EmscriptenWebGLContextAttributes attributes; - emscripten_webgl_init_context_attributes(&attributes); - attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed"); - attributes.antialias = false; - ERR_FAIL_INDEX_V(p_video_driver, VIDEO_DRIVER_MAX, ERR_INVALID_PARAMETER); - - if (p_desired.layered) { - set_window_per_pixel_transparency_enabled(true); - } - - bool gl_initialization_error = false; - - if (RasterizerGLES3::is_viable() == OK) { - attributes.majorVersion = 1; - RasterizerGLES3::register_config(); - RasterizerGLES3::make_current(); - } else { - gl_initialization_error = true; - } - - EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(canvas_id, &attributes); - if (emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS) { - gl_initialization_error = true; +#ifdef GLES3_ENABLED + // TODO "vulkan" defaults to webgl2 for now. + bool wants_webgl2 = p_rendering_driver == "opengl3" || p_rendering_driver == "vulkan"; + bool webgl2_init_failed = wants_webgl2 && !godot_js_display_has_webgl(2); + if (wants_webgl2 && !webgl2_init_failed) { + EmscriptenWebGLContextAttributes attributes; + emscripten_webgl_init_context_attributes(&attributes); + //attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed"); + attributes.alpha = true; + attributes.antialias = false; + attributes.majorVersion = 2; + + webgl_ctx = emscripten_webgl_create_context(canvas_id, &attributes); + if (emscripten_webgl_make_context_current(webgl_ctx) != EMSCRIPTEN_RESULT_SUCCESS) { + webgl2_init_failed = true; + } else { + RasterizerGLES3::make_current(); + } } - - if (gl_initialization_error) { - OS::get_singleton()->alert("Your browser does not seem to support WebGL. Please update your browser version.", + if (webgl2_init_failed) { + OS::get_singleton()->alert("Your browser does not seem to support WebGL2. Please update your browser version.", "Unable to initialize video driver"); - return ERR_UNAVAILABLE; } - - video_driver_index = p_video_driver; + if (!wants_webgl2 || webgl2_init_failed) { + RasterizerDummy::make_current(); + } +#else + RasterizerDummy::make_current(); #endif // JS Input interface (js/libs/library_godot_input.js) @@ -738,8 +736,12 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive } DisplayServerJavaScript::~DisplayServerJavaScript() { - //emscripten_webgl_commit_frame(); - //emscripten_webgl_destroy_context(webgl_ctx); +#ifdef GLES3_ENABLED + if (webgl_ctx) { + emscripten_webgl_commit_frame(); + emscripten_webgl_destroy_context(webgl_ctx); + } +#endif } bool DisplayServerJavaScript::has_feature(Feature p_feature) const { @@ -968,5 +970,9 @@ bool DisplayServerJavaScript::get_swap_cancel_ok() { } void DisplayServerJavaScript::swap_buffers() { - //emscripten_webgl_commit_frame(); +#ifdef GLES3_ENABLED + if (webgl_ctx) { + emscripten_webgl_commit_frame(); + } +#endif } diff --git a/platform/javascript/display_server_javascript.h b/platform/javascript/display_server_javascript.h index 80ce772a79..843bb61984 100644 --- a/platform/javascript/display_server_javascript.h +++ b/platform/javascript/display_server_javascript.h @@ -51,6 +51,10 @@ private: }; JSKeyEvent key_event; +#ifdef GLES3_ENABLED + EMSCRIPTEN_WEBGL_CONTEXT_HANDLE webgl_ctx = 0; +#endif + WindowMode window_mode = WINDOW_MODE_WINDOWED; ObjectID window_attached_instance_id = {}; @@ -72,8 +76,6 @@ private: bool swap_cancel_ok = false; // utilities - static void focus_canvas(); - static bool is_canvas_focused(); static void dom2godot_mod(Ref<InputEventWithModifiers> ev, int p_mod); static const char *godot2dom_cursor(DisplayServer::CursorShape p_shape); @@ -121,6 +123,7 @@ public: // mouse virtual void mouse_set_mode(MouseMode p_mode) override; virtual MouseMode mouse_get_mode() const override; + virtual Point2i mouse_get_position() const override; // touch virtual bool screen_is_touchscreen(int p_screen = SCREEN_OF_MAIN_WINDOW) const override; diff --git a/platform/javascript/js/libs/library_godot_input.js b/platform/javascript/js/libs/library_godot_input.js index 587c320f35..d85d0d5335 100644 --- a/platform/javascript/js/libs/library_godot_input.js +++ b/platform/javascript/js/libs/library_godot_input.js @@ -104,10 +104,14 @@ const GodotInputGamepads = { } } GodotEventListeners.add(window, 'gamepadconnected', function (evt) { - add(evt.gamepad); + if (evt.gamepad) { + add(evt.gamepad); + } }, false); GodotEventListeners.add(window, 'gamepaddisconnected', function (evt) { - onchange(evt.gamepad.index, 0); + if (evt.gamepad) { + onchange(evt.gamepad.index, 0); + } }, false); }, @@ -389,6 +393,9 @@ const GodotInput = { const rect = canvas.getBoundingClientRect(); const pos = GodotInput.computePosition(evt, rect); const modifiers = GodotInput.getModifiers(evt); + if (p_pressed && document.activeElement !== GodotConfig.canvas) { + GodotConfig.canvas.focus(); + } if (func(p_pressed, evt.button, pos[0], pos[1], modifiers)) { evt.preventDefault(); } @@ -405,6 +412,9 @@ const GodotInput = { const func = GodotRuntime.get_func(callback); const canvas = GodotConfig.canvas; function touch_cb(type, evt) { + if (type === 0 && document.activeElement !== GodotConfig.canvas) { + GodotConfig.canvas.focus(); + } const rect = canvas.getBoundingClientRect(); const touches = evt.changedTouches; for (let i = 0; i < touches.length; i++) { diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index d053082d92..fbab95d33b 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -75,6 +75,7 @@ public: Error kill(const ProcessID &p_pid) override; int get_process_id() const override; int get_processor_count() const override; + int get_default_thread_pool_size() const override { return 1; } String get_executable_path() const override; Error shell_open(String p_uri) override; @@ -89,6 +90,7 @@ public: String get_user_data_dir() const override; bool is_userfs_persistent() const override; + bool is_single_window() const override { return true; } void alert(const String &p_alert, const String &p_title = "ALERT!") override; diff --git a/platform/osx/crash_handler_osx.mm b/platform/osx/crash_handler_osx.mm index 2252d5eb4f..57bca7a5b9 100644 --- a/platform/osx/crash_handler_osx.mm +++ b/platform/osx/crash_handler_osx.mm @@ -134,8 +134,13 @@ static void handle_crash(int sig) { args.push_back("-o"); args.push_back(_execpath); +#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__) args.push_back("-arch"); args.push_back("x86_64"); +#elif defined(__aarch64__) + args.push_back("-arch"); + args.push_back("arm64"); +#endif args.push_back("-l"); snprintf(str, 1024, "%p", load_addr); args.push_back(str); diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp index d4ba7879f1..8405ed1da1 100644 --- a/platform/osx/joypad_osx.cpp +++ b/platform/osx/joypad_osx.cpp @@ -58,6 +58,7 @@ void joypad::free() { if (ff_device) { FFDeviceReleaseEffect(ff_device, ff_object); FFReleaseDevice(ff_device); + ff_device = nullptr; memfree(ff_axes); memfree(ff_directions); } @@ -243,7 +244,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) { if (is_joypad(p_device)) { configure_joypad(p_device, &new_joypad); #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - if (IOHIDDeviceGetService != nullptr) { + if (IOHIDDeviceGetService) { #endif const io_service_t ioservice = IOHIDDeviceGetService(p_device); if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) { @@ -348,6 +349,7 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) { { \ if (ret != FF_OK) { \ FFReleaseDevice(ff_device); \ + ff_device = nullptr; \ return false; \ } \ } @@ -367,6 +369,7 @@ bool joypad::config_force_feedback(io_service_t p_service) { return true; } FFReleaseDevice(ff_device); + ff_device = nullptr; return false; } #undef FF_ERR @@ -601,7 +604,7 @@ JoypadOSX::JoypadOSX(Input *in) { if (array) { hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); - if (hid_manager != nullptr) { + if (hid_manager) { config_hid_manager(array); } CFRelease(array); diff --git a/platform/osx/joypad_osx.h b/platform/osx/joypad_osx.h index 3048ecf39e..2ba7f0d950 100644 --- a/platform/osx/joypad_osx.h +++ b/platform/osx/joypad_osx.h @@ -68,8 +68,8 @@ struct joypad { io_service_t ffservice = 0; /* Interface for force feedback, 0 = no ff */ FFCONSTANTFORCE ff_constant_force; - FFDeviceObjectReference ff_device; - FFEffectObjectReference ff_object; + FFDeviceObjectReference ff_device = nullptr; + FFEffectObjectReference ff_object = nullptr; uint64_t ff_timestamp = 0; LONG *ff_directions = nullptr; FFEFFECT ff_effect; diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 20deb35089..aaaa50e729 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -206,6 +206,8 @@ def configure_msvc(env, manual_msvc_config): elif env["target"] == "debug": env.AppendUnique(CCFLAGS=["/Zi", "/FS", "/Od", "/EHsc"]) + # Allow big objects. Only needed for debug, see MinGW branch for rationale. + env.AppendUnique(CCFLAGS=["/bigobj"]) env.Append(LINKFLAGS=["/DEBUG"]) if env["debug_symbols"]: @@ -227,7 +229,6 @@ def configure_msvc(env, manual_msvc_config): env.AppendUnique(CCFLAGS=["/Gd", "/GR", "/nologo"]) env.AppendUnique(CCFLAGS=["/utf-8"]) # Force to use Unicode encoding. - env.AppendUnique(CCFLAGS=["/bigobj"]) # Allow big objects, no drawbacks. env.AppendUnique(CXXFLAGS=["/TP"]) # assume all sources are C++ if manual_msvc_config: # should be automatic if SCons found it @@ -359,6 +360,10 @@ def configure_mingw(env): elif env["target"] == "debug": env.Append(CCFLAGS=["-g3"]) + # Allow big objects. It's supposed not to have drawbacks but seems to break + # GCC LTO, so enabling for debug builds only (which are not built with LTO + # and are the only ones with too big objects). + env.Append(CCFLAGS=["-Wa,-mbig-obj"]) if env["windows_subsystem"] == "gui": env.Append(LINKFLAGS=["-Wl,--subsystem,windows"]) @@ -422,7 +427,6 @@ def configure_mingw(env): ## Compile flags env.Append(CCFLAGS=["-mwindows"]) - env.Append(CCFLAGS=["-Wa,-mbig-obj"]) # Allow big objects, no drawbacks. env.Append(CPPDEFINES=["WINDOWS_ENABLED", "WASAPI_ENABLED", "WINMIDI_ENABLED"]) env.Append(CPPDEFINES=[("WINVER", env["target_win_version"]), ("_WIN32_WINNT", env["target_win_version"])]) diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 2c21390d73..d8d4e92d9d 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -760,7 +760,7 @@ String OS_Windows::get_user_data_dir() const { } } - return ProjectSettings::get_singleton()->get_resource_path(); + return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]"); } String OS_Windows::get_unique_id() const { diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index b4ee85120e..bf5671be19 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -232,6 +232,7 @@ void Camera2D::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { + ERR_FAIL_COND(!is_inside_tree()); if (custom_viewport && ObjectDB::get_instance(custom_viewport_id)) { viewport = custom_viewport; } else { diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp index bdb6cda5af..204ed72878 100644 --- a/scene/2d/navigation_region_2d.cpp +++ b/scene/2d/navigation_region_2d.cpp @@ -464,7 +464,7 @@ void NavigationRegion2D::_notification(int p_what) { draw_line(a, b, doors_color); // Draw a circle to illustrate the margins. - real_t angle = b.angle_to_point(a); + real_t angle = a.angle_to_point(b); draw_arc(a, radius, angle + Math_PI / 2.0, angle - Math_PI / 2.0 + Math_TAU, 10, doors_color); draw_arc(b, radius, angle - Math_PI / 2.0, angle + Math_PI / 2.0, 10, doors_color); } diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 5ec2a81108..f0e51097db 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -1317,6 +1317,17 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo _snap_on_floor(p_was_on_floor, vel_dir_facing_up); + // Scales the horizontal velocity according to the wall slope. + if (is_on_wall_only() && motion_slide_up.dot(motion_results.get(0).collision_normal) < 0) { + Vector2 slide_motion = motion_velocity.slide(motion_results.get(0).collision_normal); + if (motion_slide_up.dot(slide_motion) < 0) { + motion_velocity = up_direction * up_direction.dot(motion_velocity); + } else { + // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection. + motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction); + } + } + // Reset the gravity accumulation when touching the ground. if (on_floor && !vel_dir_facing_up) { motion_velocity = motion_velocity.slide(up_direction); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 96c4164721..a8caebf088 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -1928,7 +1928,7 @@ void TileMap::set_cell(int p_layer, const Vector2i &p_coords, int p_source_id, c if ((source_id == TileSet::INVALID_SOURCE || atlas_coords == TileSetSource::INVALID_ATLAS_COORDS || alternative_tile == TileSetSource::INVALID_TILE_ALTERNATIVE) && (source_id != TileSet::INVALID_SOURCE || atlas_coords != TileSetSource::INVALID_ATLAS_COORDS || alternative_tile != TileSetSource::INVALID_TILE_ALTERNATIVE)) { - WARN_PRINT("Setting a cell a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly."); + WARN_PRINT("Setting a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly."); source_id = TileSet::INVALID_SOURCE; atlas_coords = TileSetSource::INVALID_ATLAS_COORDS; alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE; diff --git a/scene/3d/decal.cpp b/scene/3d/decal.cpp index c9f634a5e5..500bf4d8f5 100644 --- a/scene/3d/decal.cpp +++ b/scene/3d/decal.cpp @@ -175,9 +175,6 @@ TypedArray<String> Decal::get_configuration_warnings() const { } if (cull_mask == 0) { - // NOTE: This warning will not be emitted if none of the 20 checkboxes - // exposed in the editor are checked. This is because there are - // currently 12 unexposed layers in the editor inspector. warnings.push_back(TTR("The decal's Cull Mask has no bits enabled, which means the decal will not paint objects on any layer.\nTo resolve this, enable at least one bit in the Cull Mask property.")); } diff --git a/scene/3d/gpu_particles_collision_3d.cpp b/scene/3d/gpu_particles_collision_3d.cpp index 6ac9364b1a..2235de1599 100644 --- a/scene/3d/gpu_particles_collision_3d.cpp +++ b/scene/3d/gpu_particles_collision_3d.cpp @@ -256,10 +256,10 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons Vector2 pq1 = v1 - e1 * CLAMP(v1.dot(e1) / e1.dot(e1), 0.0, 1.0); Vector2 pq2 = v2 - e2 * CLAMP(v2.dot(e2) / e2.dot(e2), 0.0, 1.0); - float s = SGN(e0.x * e2.y - e0.y * e2.x); + float s = SIGN(e0.x * e2.y - e0.y * e2.x); Vector2 d2 = Vector2(pq0.dot(pq0), s * (v0.x * e0.y - v0.y * e0.x)).min(Vector2(pq1.dot(pq1), s * (v1.x * e1.y - v1.y * e1.x))).min(Vector2(pq2.dot(pq2), s * (v2.x * e2.y - v2.y * e2.x))); - inside_d = -Math::sqrt(d2.x) * SGN(d2.y); + inside_d = -Math::sqrt(d2.x) * SIGN(d2.y); } //make sure distance to planes is not shorter if inside @@ -288,7 +288,7 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons Vector3 nor = ba.cross(ac); inside_d = Math::sqrt( - (SGN(ba.cross(nor).dot(pa)) + SGN(cb.cross(nor).dot(pb)) + SGN(ac.cross(nor).dot(pc)) < 2.0) + (SIGN(ba.cross(nor).dot(pa)) + SIGN(cb.cross(nor).dot(pb)) + SIGN(ac.cross(nor).dot(pc)) < 2.0) ? MIN(MIN( Vector3_dot2(ba * CLAMP(ba.dot(pa) / Vector3_dot2(ba), 0.0, 1.0) - pa), Vector3_dot2(cb * CLAMP(cb.dot(pb) / Vector3_dot2(cb), 0.0, 1.0) - pb)), diff --git a/scene/3d/occluder_instance_3d.cpp b/scene/3d/occluder_instance_3d.cpp index 6c548edc74..aeac430cd9 100644 --- a/scene/3d/occluder_instance_3d.cpp +++ b/scene/3d/occluder_instance_3d.cpp @@ -329,9 +329,6 @@ TypedArray<String> OccluderInstance3D::get_configuration_warnings() const { } if (bake_mask == 0) { - // NOTE: This warning will not be emitted if none of the 20 checkboxes - // exposed in the editor are checked. This is because there are - // currently 12 unexposed layers in the editor inspector. warnings.push_back(TTR("The Bake Mask has no bits enabled, which means baking will not produce any occluder meshes for this OccluderInstance3D.\nTo resolve this, enable at least one bit in the Bake Mask property.")); } diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp index 5cb7f431e3..edaf76bc3e 100644 --- a/scene/3d/physics_body_3d.cpp +++ b/scene/3d/physics_body_3d.cpp @@ -1299,7 +1299,6 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo // in order to avoid blocking lateral motion along a wall. if (motion_angle < .5 * Math_PI) { apply_default_sliding = false; - if (p_was_on_floor && !vel_dir_facing_up) { // Cancel the motion. Transform3D gt = get_global_transform(); @@ -1307,14 +1306,18 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo real_t cancel_dist_max = MIN(0.1, margin * 20); if (travel_total <= margin + CMP_EPSILON) { gt.origin -= result.travel; + result.travel = Vector3(); // Cancel for constant speed computation. } else if (travel_total < cancel_dist_max) { // If the movement is large the body can be prevented from reaching the walls. gt.origin -= result.travel.slide(up_direction); // Keep remaining motion in sync with amount canceled. motion = motion.slide(up_direction); + result.travel = Vector3(); + } else { + // Travel is too high to be safely cancelled, we take it into account. + result.travel = result.travel.slide(up_direction); + motion = motion.normalized() * result.travel.length(); } set_global_transform(gt); - result.travel = Vector3(); // Cancel for constant speed computation. - // Determines if you are on the ground, and limits the possibility of climbing on the walls because of the approximations. _snap_on_floor(true, false); } else { @@ -1584,6 +1587,7 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu Vector3 prev_wall_normal = wall_normal; int wall_collision_count = 0; Vector3 combined_wall_normal; + Vector3 tmp_wall_col; // Avoid duplicate on average calculation. for (int i = p_result.collision_count - 1; i >= 0; i--) { const PhysicsServer3D::MotionCollision &collision = p_result.collisions[i]; @@ -1630,8 +1634,11 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu } // Collect normal for calculating average. - combined_wall_normal += collision.normal; - wall_collision_count++; + if (!collision.normal.is_equal_approx(tmp_wall_col)) { + tmp_wall_col = collision.normal; + combined_wall_normal += collision.normal; + wall_collision_count++; + } } if (r_state.wall) { diff --git a/scene/3d/reflection_probe.cpp b/scene/3d/reflection_probe.cpp index 40d4d822c9..f7f19596a7 100644 --- a/scene/3d/reflection_probe.cpp +++ b/scene/3d/reflection_probe.cpp @@ -94,7 +94,7 @@ void ReflectionProbe::set_extents(const Vector3 &p_extents) { } if (extents[i] - 0.01 < ABS(origin_offset[i])) { - origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01); + origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01); } } @@ -113,7 +113,7 @@ void ReflectionProbe::set_origin_offset(const Vector3 &p_extents) { for (int i = 0; i < 3; i++) { if (extents[i] - 0.01 < ABS(origin_offset[i])) { - origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01); + origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01); } } RS::get_singleton()->reflection_probe_set_extents(probe, extents); diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 324b21c6d0..7fba94da4c 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -296,11 +296,11 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) { mpos.x = get_size().x - mpos.x; } - Point2i pos = get_line_column_at_pos(mpos); + Point2i pos = get_line_column_at_pos(mpos, false); int line = pos.y; int col = pos.x; - if (mb->get_button_index() == MouseButton::LEFT) { + if (line != -1 && mb->get_button_index() == MouseButton::LEFT) { if (is_line_folded(line)) { int wrap_index = get_line_wrap_index_at_column(line, col); if (wrap_index == get_line_wrap_count(line)) { @@ -321,11 +321,13 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) { mpos.x = get_size().x - mpos.x; } - Point2i pos = get_line_column_at_pos(mpos); + Point2i pos = get_line_column_at_pos(mpos, false); int line = pos.y; int col = pos.x; - emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col); + if (line != -1) { + emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col); + } return; } } @@ -536,11 +538,11 @@ Control::CursorShape CodeEdit::get_cursor_shape(const Point2 &p_pos) const { return CURSOR_ARROW; } - Point2i pos = get_line_column_at_pos(p_pos); + Point2i pos = get_line_column_at_pos(p_pos, false); int line = pos.y; int col = pos.x; - if (is_line_folded(line)) { + if (line != -1 && is_line_folded(line)) { int wrap_index = get_line_wrap_index_at_column(line, col); if (wrap_index == get_line_wrap_count(line)) { int eol_icon_width = folded_eol_icon->get_width(); @@ -2016,10 +2018,14 @@ bool CodeEdit::is_symbol_lookup_on_click_enabled() const { String CodeEdit::get_text_for_symbol_lookup() { Point2i mp = get_local_mouse_pos(); - Point2i pos = get_line_column_at_pos(mp); + Point2i pos = get_line_column_at_pos(mp, false); int line = pos.y; int col = pos.x; + if (line == -1) { + return String(); + } + StringBuilder lookup_text; const int text_size = get_line_count(); for (int i = 0; i < text_size; i++) { diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 049cdb5bef..5a378554c9 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -833,7 +833,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) { real_t dist = center.distance_to(bev->get_position()); if (dist <= center.x) { - real_t rad = bev->get_position().angle_to_point(center); + real_t rad = center.angle_to_point(bev->get_position()); h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU; s = CLAMP(dist / center.x, 0, 1); } else { @@ -850,7 +850,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) { real_t dist = center.distance_to(bev->get_position()); if (dist >= center.x * 0.84 && dist <= center.x) { - real_t rad = bev->get_position().angle_to_point(center); + real_t rad = center.angle_to_point(bev->get_position()); h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU; spinning = true; } else { @@ -895,12 +895,12 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) { Vector2 center = c->get_size() / 2.0; if (picker_type == SHAPE_VHS_CIRCLE) { real_t dist = center.distance_to(mev->get_position()); - real_t rad = mev->get_position().angle_to_point(center); + real_t rad = center.angle_to_point(mev->get_position()); h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU; s = CLAMP(dist / center.x, 0, 1); } else { if (spinning) { - real_t rad = mev->get_position().angle_to_point(center); + real_t rad = center.angle_to_point(mev->get_position()); h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU; } else { real_t corner_x = (c == wheel_uv) ? center.x - Math_SQRT12 * c->get_size().width * 0.42 : 0; diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 582c8e5860..9f715be155 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -810,6 +810,10 @@ void Control::set_drag_preview(Control *p_control) { 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()) { @@ -1821,6 +1825,10 @@ Size2 Control::get_size() const { return data.size_cache; } +void Control::reset_size() { + set_size(Size2()); +} + Rect2 Control::get_global_rect() const { return Rect2(get_global_position(), get_size()); } @@ -2841,6 +2849,7 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("set_position", "position", "keep_offsets"), &Control::set_position, DEFVAL(false)); ClassDB::bind_method(D_METHOD("_set_position", "position"), &Control::_set_position); ClassDB::bind_method(D_METHOD("set_size", "size", "keep_offsets"), &Control::set_size, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("reset_size"), &Control::reset_size); ClassDB::bind_method(D_METHOD("_set_size", "size"), &Control::_set_size); ClassDB::bind_method(D_METHOD("set_custom_minimum_size", "size"), &Control::set_custom_minimum_size); ClassDB::bind_method(D_METHOD("set_global_position", "position", "keep_offsets"), &Control::set_global_position, DEFVAL(false)); @@ -2964,6 +2973,7 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("set_drag_forwarding", "target"), &Control::set_drag_forwarding); ClassDB::bind_method(D_METHOD("set_drag_preview", "control"), &Control::set_drag_preview); + ClassDB::bind_method(D_METHOD("is_drag_successful"), &Control::is_drag_successful); ClassDB::bind_method(D_METHOD("warp_mouse", "to_position"), &Control::warp_mouse); diff --git a/scene/gui/control.h b/scene/gui/control.h index 02ab336ef0..1a94cc68a6 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -357,6 +357,7 @@ public: 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; void set_custom_minimum_size(const Size2 &p_custom); Size2 get_custom_minimum_size() const; @@ -400,6 +401,7 @@ public: void set_size(const Size2 &p_size, bool p_keep_offsets = false); Size2 get_size() const; + void reset_size(); Rect2 get_rect() const; Rect2 get_global_rect() const; diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index ba050b652d..e7d98a686f 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -501,6 +501,43 @@ void GraphEdit::_notification(int p_what) { } } +void GraphEdit::_update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes) { + Rect2 comment_node_rect = p_node->get_rect(); + Vector<GraphNode *> enclosed_nodes; + + for (int i = 0; i < get_child_count(); i++) { + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); + if (!gn || gn->is_selected()) { + continue; + } + + Rect2 node_rect = gn->get_rect(); + bool included = comment_node_rect.encloses(node_rect); + if (included) { + enclosed_nodes.push_back(gn); + } + } + + p_comment_enclosed_nodes.set(p_node->get_name(), enclosed_nodes); +} + +void GraphEdit::_set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag) { + for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) { + p_comment_enclosed_nodes[p_node->get_name()][i]->set_drag(p_drag); + } +} + +void GraphEdit::_set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_drag_accum) { + for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) { + Vector2 pos = (p_comment_enclosed_nodes[p_node->get_name()][i]->get_drag_from() * zoom + drag_accum) / zoom; + if (is_using_snap() ^ Input::get_singleton()->is_key_pressed(Key::CTRL)) { + const int snap = get_snap(); + pos = pos.snapped(Vector2(snap, snap)); + } + p_comment_enclosed_nodes[p_node->get_name()][i]->set_position_offset(pos); + } +} + bool GraphEdit::_filter_input(const Point2 &p_point) { Ref<Texture2D> port = get_theme_icon(SNAME("port"), SNAME("GraphNode")); Vector2i port_size = Vector2i(port->get_width(), port->get_height()); @@ -1058,6 +1095,9 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) { } gn->set_position_offset(pos); + if (gn->is_comment()) { + _set_position_of_comment_enclosed_nodes(gn, comment_enclosed_nodes, drag_accum); + } } } } @@ -1153,6 +1193,9 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) { GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn && gn->is_selected()) { gn->set_drag(false); + if (gn->is_comment()) { + _set_drag_comment_enclosed_nodes(gn, comment_enclosed_nodes, false); + } } } } @@ -1220,6 +1263,10 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) { } if (o_gn->is_selected()) { o_gn->set_drag(true); + if (o_gn->is_comment()) { + _update_comment_enclosed_nodes_list(o_gn, comment_enclosed_nodes); + _set_drag_comment_enclosed_nodes(o_gn, comment_enclosed_nodes, true); + } } } diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index 44e50aa3c2..6c11f9df6a 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -217,6 +217,11 @@ private: Set<int> valid_left_disconnect_types; Set<int> valid_right_disconnect_types; + HashMap<StringName, Vector<GraphNode *>> comment_enclosed_nodes; + void _update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes); + void _set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag); + void _set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_pos); + HBoxContainer *zoom_hb; friend class GraphEditFilter; diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 124d5c7821..69b08fda3c 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -228,7 +228,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { if (b->is_pressed() && b->get_button_index() == MouseButton::RIGHT && context_menu_enabled) { _ensure_menu(); menu->set_position(get_screen_transform().xform(get_local_mouse_position())); - menu->set_size(Vector2(1, 1)); + menu->reset_size(); menu->popup(); grab_focus(); accept_event(); @@ -268,7 +268,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { return; } - shift_selection_check_pre(b->is_shift_pressed()); + if (b->is_shift_pressed()) { + shift_selection_check_pre(true); + } set_caret_at_pixel_pos(b->get_position().x); @@ -345,6 +347,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { } selection.creating = false; selection.double_click = false; + if (!drag_action) { + selection.drag_attempt = false; + } show_virtual_keyboard(); } @@ -369,6 +374,11 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { selection_fill_at_caret(); } } + + if (drag_action && can_drop_data(m->get_position(), get_viewport()->gui_get_drag_data())) { + drag_caret_force_displayed = true; + set_caret_at_pixel_pos(m->get_position().x); + } } Ref<InputEventKey> k = p_event; @@ -383,7 +393,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { _ensure_menu(); Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + get_theme_font(SNAME("font"))->get_height(get_theme_font_size(SNAME("font_size")))) / 2); menu->set_position(get_global_transform().xform(pos)); - menu->set_size(Vector2(1, 1)); + menu->reset_size(); menu->popup(); menu->grab_focus(); } @@ -569,21 +579,44 @@ bool LineEdit::can_drop_data(const Point2 &p_point, const Variant &p_data) const return drop_override; } - return p_data.get_type() == Variant::STRING; + return is_editable() && p_data.get_type() == Variant::STRING; } void LineEdit::drop_data(const Point2 &p_point, const Variant &p_data) { Control::drop_data(p_point, p_data); - if (p_data.get_type() == Variant::STRING) { + if (p_data.get_type() == Variant::STRING && is_editable()) { set_caret_at_pixel_pos(p_point.x); + int caret_column_tmp = caret_column; + if (selection.drag_attempt) { + selection.drag_attempt = false; + if (caret_column < selection.begin || caret_column > selection.end) { + if (caret_column_tmp > selection.end) { + caret_column_tmp = caret_column_tmp - (selection.end - selection.begin); + } + selection_delete(); - text = text.left(selection.begin) + text.substr(selection.end); - _shape(); - - insert_text_at_caret(p_data); - selection.begin = caret_column - (selection.end - selection.begin); - selection.end = caret_column; + set_caret_column(caret_column_tmp); + insert_text_at_caret(p_data); + } + } else if (selection.enabled && caret_column >= selection.begin && caret_column <= selection.end) { + caret_column_tmp = selection.begin; + selection_delete(); + set_caret_column(caret_column_tmp); + insert_text_at_caret(p_data); + grab_focus(); + } else { + insert_text_at_caret(p_data); + grab_focus(); + } + select(caret_column_tmp, caret_column); + if (!text_changed_dirty) { + if (is_inside_tree()) { + MessageQueue::get_singleton()->push_call(this, "_text_changed"); + } + text_changed_dirty = true; + } + update(); } } @@ -803,7 +836,7 @@ void LineEdit::_notification(int p_what) { // Draw carets. ofs.x = x_ofs + scroll_offset; - if (draw_caret) { + if (draw_caret || drag_caret_force_displayed) { if (ime_text.length() == 0) { // Normal caret. CaretInfo caret = TS->shaped_text_get_carets(text_rid, caret_column); @@ -921,7 +954,7 @@ void LineEdit::_notification(int p_what) { DisplayServer::get_singleton()->virtual_keyboard_hide(); } - if (deselect_on_focus_loss_enabled) { + if (deselect_on_focus_loss_enabled && !selection.drag_attempt) { deselect(); } } break; @@ -935,6 +968,25 @@ void LineEdit::_notification(int p_what) { update(); } } break; + case Control::NOTIFICATION_DRAG_BEGIN: { + drag_action = true; + } break; + case Control::NOTIFICATION_DRAG_END: { + if (is_drag_successful()) { + if (selection.drag_attempt) { + selection.drag_attempt = false; + if (is_editable()) { + selection_delete(); + } else if (deselect_on_focus_loss_enabled) { + deselect(); + } + } + } else { + selection.drag_attempt = false; + } + drag_action = false; + drag_caret_force_displayed = false; + } break; } } @@ -999,6 +1051,9 @@ void LineEdit::undo() { } else if (undo_stack_pos == undo_stack.front()) { return; } + + deselect(); + undo_stack_pos = undo_stack_pos->prev(); TextOperation op = undo_stack_pos->get(); text = op.text; @@ -1020,6 +1075,9 @@ void LineEdit::redo() { if (undo_stack_pos == undo_stack.back()) { return; } + + deselect(); + undo_stack_pos = undo_stack_pos->next(); TextOperation op = undo_stack_pos->get(); text = op.text; diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 134d5f8f76..221dd9eb2e 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -129,6 +129,9 @@ private: bool middle_mouse_paste_enabled = true; + bool drag_action = false; + bool drag_caret_force_displayed = false; + Ref<Texture2D> right_icon; bool flat = false; diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 92d4261d8d..c4f05a7975 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -61,6 +61,11 @@ void Range::_changed_notify(const char *p_what) { update(); } +void Range::_validate_values() { + shared->max = MAX(shared->max, shared->min); + shared->page = CLAMP(shared->page, 0, shared->max - shared->min); +} + void Range::Shared::emit_changed(const char *p_what) { for (Set<Range *>::Element *E = owners.front(); E; E = E->next()) { Range *r = E->get(); @@ -100,6 +105,7 @@ void Range::set_value(double p_val) { void Range::set_min(double p_min) { shared->min = p_min; set_value(shared->val); + _validate_values(); shared->emit_changed("min"); @@ -109,6 +115,7 @@ void Range::set_min(double p_min) { void Range::set_max(double p_max) { shared->max = p_max; set_value(shared->val); + _validate_values(); shared->emit_changed("max"); } @@ -121,6 +128,7 @@ void Range::set_step(double p_step) { void Range::set_page(double p_page) { shared->page = p_page; set_value(shared->val); + _validate_values(); shared->emit_changed("page"); } @@ -270,6 +278,12 @@ void Range::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rounded"), "set_use_rounded_values", "is_using_rounded_values"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_greater"), "set_allow_greater", "is_greater_allowed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_lesser"), "set_allow_lesser", "is_lesser_allowed"); + + ADD_LINKED_PROPERTY("min_value", "value"); + ADD_LINKED_PROPERTY("min_value", "max_value"); + ADD_LINKED_PROPERTY("min_value", "page"); + ADD_LINKED_PROPERTY("max_value", "value"); + ADD_LINKED_PROPERTY("max_value", "page"); } void Range::set_use_rounded_values(bool p_enable) { diff --git a/scene/gui/range.h b/scene/gui/range.h index 7a129e88d6..0dc702b19c 100644 --- a/scene/gui/range.h +++ b/scene/gui/range.h @@ -59,6 +59,7 @@ class Range : public Control { void _value_changed_notify(); void _changed_notify(const char *p_what = ""); + void _validate_values(); protected: virtual void _value_changed(double) {} diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 013358e75c..7b2ea46e17 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -320,7 +320,9 @@ void ScrollContainer::_notification(int p_what) { }; if (p_what == NOTIFICATION_READY) { - get_viewport()->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed)); + Viewport *viewport = get_viewport(); + ERR_FAIL_COND(!viewport); + viewport->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed)); _update_dimensions(); } diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 4497c20772..f30206c943 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -166,7 +166,7 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) { if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) { if (drag.enabled) { drag.diff_y += mm->get_relative().y; - float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SGN(drag.diff_y); + float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SIGN(drag.diff_y); set_value(CLAMP(drag.base_val + get_step() * diff_y, get_min(), get_max())); } else if (drag.allowed && drag.capture_pos.distance_to(mm->get_position()) > 2) { Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 8ffbe479be..c8f6ecdafd 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -608,7 +608,7 @@ void TextEdit::_notification(int p_what) { int draw_amount = visible_rows + (smooth_scroll_enabled ? 1 : 0); draw_amount += get_line_wrap_count(first_visible_line + 1); - // minimap + // Draw minimap. if (draw_minimap) { int minimap_visible_lines = get_minimap_visible_lines(); int minimap_line_height = (minimap_char_size.y + minimap_line_spacing); @@ -788,8 +788,9 @@ void TextEdit::_notification(int p_what) { bottom_limit_y -= style_normal->get_margin(SIDE_BOTTOM); } - // draw main text + // Draw main text. caret.visible = false; + line_drawing_cache.clear(); int row_height = get_line_height(); int line = first_visible_line; for (int i = 0; i < draw_amount; i++) { @@ -810,6 +811,8 @@ void TextEdit::_notification(int p_what) { continue; } + LineDrawingCache cache_entry; + Dictionary color_map = _get_line_syntax_highlighting(line); // Ensure we at least use the font color. @@ -899,6 +902,8 @@ void TextEdit::_notification(int p_what) { if (line_wrap_index == 0) { // Only do these if we are on the first wrapped part of a line. + cache_entry.y_offset = ofs_y; + int gutter_offset = style_normal->get_margin(SIDE_LEFT); for (int g = 0; g < gutters.size(); g++) { const GutterInfo gutter = gutters[g]; @@ -1076,6 +1081,10 @@ void TextEdit::_notification(int p_what) { int gl_size = TS->shaped_text_get_glyph_count(rid); ofs_y += ldata->get_line_ascent(line_wrap_index); + + int first_visible_char = TS->shaped_text_get_range(rid).y; + int last_visible_char = TS->shaped_text_get_range(rid).x; + int char_ofs = 0; if (outline_size > 0 && outline_color.a > 0) { for (int j = 0; j < gl_size; j++) { @@ -1143,21 +1152,36 @@ void TextEdit::_notification(int p_what) { } } + bool had_glyphs_drawn = false; for (int k = 0; k < glyphs[j].repeat; k++) { if (!clipped && (char_ofs + char_margin) >= xmargin_beg && (char_ofs + glyphs[j].advance + char_margin) <= xmargin_end) { if (glyphs[j].font_rid != RID()) { TS->font_draw_glyph(glyphs[j].font_rid, ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color); + had_glyphs_drawn = true; } else if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) { TS->draw_hex_code_box(ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color); + had_glyphs_drawn = true; } } char_ofs += glyphs[j].advance; } + + if (had_glyphs_drawn) { + if (first_visible_char > glyphs[j].start) { + first_visible_char = glyphs[j].start; + } else if (last_visible_char < glyphs[j].end) { + last_visible_char = glyphs[j].end; + } + } + if ((char_ofs + char_margin) >= xmargin_end) { break; } } + cache_entry.first_visible_chars.push_back(first_visible_char); + cache_entry.last_visible_chars.push_back(last_visible_char); + // is_line_folded if (line_wrap_index == line_wrap_amount && line < text.size() - 1 && _is_line_hidden(line + 1)) { int xofs = char_ofs + char_margin + ofs_x + (folded_eol_icon->get_width() / 2); @@ -1308,6 +1332,8 @@ void TextEdit::_notification(int p_what) { } } } + + line_drawing_cache[line] = cache_entry; } if (has_focus()) { @@ -1569,7 +1595,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) { _generate_context_menu(); menu->set_position(get_screen_transform().xform(mpos)); - menu->set_size(Vector2(1, 1)); + menu->reset_size(); menu->popup(); grab_focus(); } @@ -1802,7 +1828,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) { _generate_context_menu(); adjust_viewport_to_caret(); menu->set_position(get_screen_transform().xform(get_caret_draw_pos())); - menu->set_size(Vector2(1, 1)); + menu->reset_size(); menu->popup(); menu->grab_focus(); } @@ -2878,6 +2904,16 @@ Point2i TextEdit::get_next_visible_line_index_offset_from(int p_line_from, int p } } wrap_index = get_line_wrap_count(MIN(i, text.size() - 1)) - MAX(0, num_visible - p_visible_amount); + + // If we are a hidden line, then we are the last line as we cannot reach "p_visible_amount". + // This means we need to backtrack to get last visible line. + // Currently, line 0 cannot be hidden so this should always be valid. + int line = (p_line_from + num_total) - 1; + if (_is_line_hidden(line)) { + Point2i backtrack = get_next_visible_line_index_offset_from(line, 0, -1); + num_total = num_total - (backtrack.x - 1); + wrap_index = backtrack.y; + } } else { p_visible_amount = ABS(p_visible_amount); int i; @@ -3386,7 +3422,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const { return String(); } -Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const { +Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds) const { float rows = p_pos.y; rows -= style_normal->get_margin(SIDE_TOP); rows /= get_line_height(); @@ -3396,8 +3432,9 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const { int wrap_index = 0; if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) { - Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SGN(rows))); + Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SIGN(rows))); wrap_index = f_ofs.y; + if (rows < 0) { row = first_vis_line - (f_ofs.x - 1); } else { @@ -3409,37 +3446,86 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const { row = 0; } - int col = 0; - if (row >= text.size()) { row = text.size() - 1; - col = text[row].size(); - } else { - int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding); - colx += caret.x_ofs; - col = _get_char_pos_for_line(colx, row, wrap_index); - if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) { - // Move back one if we are at the end of the row. - Vector<String> rows2 = get_line_wrapped_text(row); - int row_end_col = 0; - for (int i = 0; i < wrap_index + 1; i++) { - row_end_col += rows2[i].length(); - } - if (col >= row_end_col) { - col -= 1; - } + } + + int visible_lines = get_visible_line_count_in_range(first_vis_line, row); + if (rows > visible_lines) { + if (!p_allow_out_of_bounds) { + return Point2i(-1, -1); } + return Point2i(text[row].size(), row); + } - RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index); - if (is_layout_rtl()) { - colx = TS->shaped_text_get_size(text_rid).x - colx; + int col = 0; + int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding); + colx += caret.x_ofs; + col = _get_char_pos_for_line(colx, row, wrap_index); + if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) { + // Move back one if we are at the end of the row. + Vector<String> rows2 = get_line_wrapped_text(row); + int row_end_col = 0; + for (int i = 0; i < wrap_index + 1; i++) { + row_end_col += rows2[i].length(); + } + if (col >= row_end_col) { + col -= 1; } - col = TS->shaped_text_hit_test_position(text_rid, colx); } + RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index); + if (is_layout_rtl()) { + colx = TS->shaped_text_get_size(text_rid).x - colx; + } + col = TS->shaped_text_hit_test_position(text_rid, colx); + return Point2i(col, row); } +Point2i TextEdit::get_pos_at_line_column(int p_line, int p_column) const { + Rect2i rect = get_rect_at_line_column(p_line, p_column); + return rect.position + Vector2i(0, get_line_height()); +} + +Rect2i TextEdit::get_rect_at_line_column(int p_line, int p_column) const { + ERR_FAIL_INDEX_V(p_line, text.size(), Rect2i(-1, -1, 0, 0)); + ERR_FAIL_COND_V(p_column < 0, Rect2i(-1, -1, 0, 0)); + ERR_FAIL_COND_V(p_column > text[p_line].length(), Rect2i(-1, -1, 0, 0)); + + if (line_drawing_cache.size() == 0 || !line_drawing_cache.has(p_line)) { + // Line is not in the cache, which means it's outside of the viewing area. + return Rect2i(-1, -1, 0, 0); + } + LineDrawingCache cache_entry = line_drawing_cache[p_line]; + + int wrap_index = get_line_wrap_index_at_column(p_line, p_column); + if (wrap_index >= cache_entry.first_visible_chars.size()) { + // Line seems to be wrapped beyond the viewable area. + return Rect2i(-1, -1, 0, 0); + } + + int first_visible_char = cache_entry.first_visible_chars[wrap_index]; + int last_visible_char = cache_entry.last_visible_chars[wrap_index]; + if (p_column < first_visible_char || p_column > last_visible_char) { + // Character is outside of the viewing area, no point calculating its position. + return Rect2i(-1, -1, 0, 0); + } + + Point2i pos, size; + pos.y = cache_entry.y_offset + get_line_height() * wrap_index; + pos.x = get_total_gutter_width() + style_normal->get_margin(SIDE_LEFT) - get_h_scroll(); + + RID text_rid = text.get_line_data(p_line)->get_line_rid(wrap_index); + Vector2 col_bounds = TS->shaped_text_get_grapheme_bounds(text_rid, p_column); + pos.x += col_bounds.x; + size.x = col_bounds.y - col_bounds.x; + + size.y = get_line_height(); + + return Rect2i(pos, size); +} + int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const { float rows = p_pos.y; rows -= style_normal->get_margin(SIDE_TOP); @@ -3471,7 +3557,7 @@ int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const { int row = minimap_line + Math::floor(rows); if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) { - int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SGN(rows))).x - 1; + int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SIGN(rows))).x - 1; if (rows < 0) { row = minimap_line - f_ofs; } else { @@ -3880,7 +3966,7 @@ void TextEdit::delete_selection() { update(); } -/* line wrapping. */ +/* Line wrapping. */ void TextEdit::set_line_wrapping_mode(LineWrappingMode p_wrapping_mode) { if (line_wrapping_mode != p_wrapping_mode) { line_wrapping_mode = p_wrapping_mode; @@ -4012,15 +4098,7 @@ double TextEdit::get_scroll_pos_for_line(int p_line, int p_wrap_index) const { return p_line; } - // Count the number of visible lines up to this line. - double new_line_scroll_pos = 0.0; - int to = CLAMP(p_line, 0, text.size() - 1); - for (int i = 0; i < to; i++) { - if (!text.is_hidden(i)) { - new_line_scroll_pos++; - new_line_scroll_pos += get_line_wrap_count(i); - } - } + double new_line_scroll_pos = get_visible_line_count_in_range(0, CLAMP(p_line, 0, text.size() - 1)); new_line_scroll_pos += p_wrap_index; return new_line_scroll_pos; } @@ -4077,14 +4155,18 @@ int TextEdit::get_visible_line_count() const { return _get_control_height() / get_line_height(); } -int TextEdit::get_total_visible_line_count() const { +int TextEdit::get_visible_line_count_in_range(int p_from_line, int p_to_line) const { + ERR_FAIL_INDEX_V(p_from_line, text.size(), 0); + ERR_FAIL_INDEX_V(p_to_line, text.size(), 0); + ERR_FAIL_COND_V(p_from_line > p_to_line, 0); + /* Returns the total number of (lines + wrapped - hidden). */ if (!_is_hiding_enabled() && get_line_wrapping_mode() == LineWrappingMode::LINE_WRAPPING_NONE) { - return text.size(); + return p_to_line - p_from_line; } int total_rows = 0; - for (int i = 0; i < text.size(); i++) { + for (int i = p_from_line; i <= p_to_line; i++) { if (!text.is_hidden(i)) { total_rows++; total_rows += get_line_wrap_count(i); @@ -4093,6 +4175,10 @@ int TextEdit::get_total_visible_line_count() const { return total_rows; } +int TextEdit::get_total_visible_line_count() const { + return get_visible_line_count_in_range(0, text.size() - 1); +} + // Auto adjust void TextEdit::adjust_viewport_to_caret() { // Make sure Caret is visible on the screen. @@ -4683,7 +4769,10 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_word_at_pos", "position"), &TextEdit::get_word_at_pos); - ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position"), &TextEdit::get_line_column_at_pos); + ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position", "allow_out_of_bounds"), &TextEdit::get_line_column_at_pos, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("get_pos_at_line_column", "line", "column"), &TextEdit::get_pos_at_line_column); + ClassDB::bind_method(D_METHOD("get_rect_at_line_column", "line", "column"), &TextEdit::get_rect_at_line_column); + ClassDB::bind_method(D_METHOD("get_minimap_line_at_pos", "position"), &TextEdit::get_minimap_line_at_pos); ClassDB::bind_method(D_METHOD("is_dragging_cursor"), &TextEdit::is_dragging_cursor); @@ -4761,7 +4850,7 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("deselect"), &TextEdit::deselect); ClassDB::bind_method(D_METHOD("delete_selection"), &TextEdit::delete_selection); - /* line wrapping. */ + /* Line wrapping. */ BIND_ENUM_CONSTANT(LINE_WRAPPING_NONE); BIND_ENUM_CONSTANT(LINE_WRAPPING_BOUNDARY); @@ -4807,6 +4896,7 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_last_full_visible_line_wrap_index"), &TextEdit::get_last_full_visible_line_wrap_index); ClassDB::bind_method(D_METHOD("get_visible_line_count"), &TextEdit::get_visible_line_count); + ClassDB::bind_method(D_METHOD("get_visible_line_count_in_range", "from_line", "to_line"), &TextEdit::get_visible_line_count_in_range); ClassDB::bind_method(D_METHOD("get_total_visible_line_count"), &TextEdit::get_total_visible_line_count); // Auto adjust @@ -5762,7 +5852,7 @@ double TextEdit::_get_v_scroll_offset() const { } void TextEdit::_scroll_up(real_t p_delta) { - if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(-p_delta)) { + if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(-p_delta)) { scrolling = false; minimap_clicked = false; } @@ -5789,7 +5879,7 @@ void TextEdit::_scroll_up(real_t p_delta) { } void TextEdit::_scroll_down(real_t p_delta) { - if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(p_delta)) { + if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(p_delta)) { scrolling = false; minimap_clicked = false; } diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 1a7dc851b5..b13adb8519 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -271,7 +271,7 @@ private: bool virtual_keyboard_enabled = true; bool middle_mouse_paste_enabled = true; - // Overridable actions + // Overridable actions. String cut_copy_line = ""; // Context menu. @@ -336,6 +336,14 @@ private: Variant tooltip_ud; /* Mouse */ + struct LineDrawingCache { + int y_offset = 0; + Vector<int> first_visible_chars; + Vector<int> last_visible_chars; + }; + + Map<int, LineDrawingCache> line_drawing_cache; + int _get_char_pos_for_line(int p_px, int p_line, int p_wrap_index = 0) const; /* Caret. */ @@ -415,7 +423,7 @@ private: void _pre_shift_selection(); void _post_shift_selection(); - /* line wrapping. */ + /* Line wrapping. */ LineWrappingMode line_wrapping_mode = LineWrappingMode::LINE_WRAPPING_NONE; int wrap_at_column = 0; @@ -455,14 +463,14 @@ private: void _scroll_lines_up(); void _scroll_lines_down(); - // Minimap + // Minimap. bool draw_minimap = false; int minimap_width = 80; Point2 minimap_char_size = Point2(1, 2); int minimap_line_spacing = 1; - // minimap scroll + // Minimap scroll. bool minimap_clicked = false; bool hovering_minimap = false; bool dragging_minimap = false; @@ -716,7 +724,10 @@ public: String get_word_at_pos(const Vector2 &p_pos) const; - Point2i get_line_column_at_pos(const Point2i &p_pos) const; + Point2i get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds = true) const; + Point2i get_pos_at_line_column(int p_line, int p_column) const; + Rect2i get_rect_at_line_column(int p_line, int p_column) const; + int get_minimap_line_at_pos(const Point2i &p_pos) const; bool is_dragging_cursor() const; @@ -782,7 +793,7 @@ public: void deselect(); void delete_selection(); - /* line wrapping. */ + /* Line wrapping. */ void set_line_wrapping_mode(LineWrappingMode p_wrapping_mode); LineWrappingMode get_line_wrapping_mode() const; @@ -822,6 +833,7 @@ public: int get_last_full_visible_line_wrap_index() const; int get_visible_line_count() const; + int get_visible_line_count_in_range(int p_from, int p_to) const; int get_total_visible_line_count() const; // Auto Adjust diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 7c4cdf828b..27e617bdd0 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -3164,7 +3164,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) { } else { const TreeItem::Cell &c = popup_edited_item->cells[popup_edited_item_col]; float diff_y = -mm->get_relative().y; - diff_y = Math::pow(ABS(diff_y), 1.8f) * SGN(diff_y); + diff_y = Math::pow(ABS(diff_y), 1.8f) * SIGN(diff_y); diff_y *= 0.1; range_drag_base = CLAMP(range_drag_base + c.step * diff_y, c.min, c.max); popup_edited_item->set_range(popup_edited_item_col, range_drag_base); diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp index 5065684839..22e3c3bf24 100644 --- a/scene/main/canvas_item.cpp +++ b/scene/main/canvas_item.cpp @@ -274,6 +274,7 @@ void CanvasItem::_exit_canvas() { void CanvasItem::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { + ERR_FAIL_COND(!is_inside_tree()); _update_texture_filter_changed(false); _update_texture_repeat_changed(false); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 1ecc3c762a..48a672b310 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1515,8 +1515,9 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) { // Alternate drop use (when using force_drag(), as proposed by #5342). + gui.drag_successful = false; if (gui.mouse_focus) { - _gui_drop(gui.mouse_focus, pos, false); + gui.drag_successful = _gui_drop(gui.mouse_focus, pos, false); } gui.drag_data = Variant(); @@ -1534,8 +1535,9 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { _gui_cancel_tooltip(); } else { if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) { + gui.drag_successful = false; if (gui.drag_mouse_over) { - _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false); + gui.drag_successful = _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false); } Control *drag_preview = _gui_get_drag_preview(); @@ -2895,6 +2897,10 @@ bool Viewport::gui_is_dragging() const { return gui.dragging; } +bool Viewport::gui_is_drag_successful() const { + return gui.drag_successful; +} + void Viewport::set_input_as_handled() { _drop_physics_mouseover(); @@ -3534,6 +3540,7 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("gui_get_drag_data"), &Viewport::gui_get_drag_data); ClassDB::bind_method(D_METHOD("gui_is_dragging"), &Viewport::gui_is_dragging); + ClassDB::bind_method(D_METHOD("gui_is_drag_successful"), &Viewport::gui_is_drag_successful); ClassDB::bind_method(D_METHOD("set_disable_input", "disable"), &Viewport::set_disable_input); ClassDB::bind_method(D_METHOD("is_input_disabled"), &Viewport::is_input_disabled); diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 5320aea02a..11b76b32eb 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -348,6 +348,7 @@ private: List<Control *> roots; int canvas_sort_index = 0; //for sorting items with canvas as root bool dragging = false; + bool drag_successful = false; bool embed_subwindows_hint = false; bool embedding_subwindows = false; @@ -556,6 +557,7 @@ public: bool is_handling_input_locally() const; bool gui_is_dragging() const; + bool gui_is_drag_successful() const; Control *gui_find_control(const Point2 &p_global); diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 5da5a183f7..20f8b30dc6 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -88,6 +88,10 @@ Size2i Window::get_size() const { return size; } +void Window::reset_size() { + set_size(Size2i()); +} + Size2i Window::get_real_size() const { if (window_id != DisplayServer::INVALID_WINDOW_ID) { return DisplayServer::get_singleton()->window_get_real_size(window_id); @@ -1410,6 +1414,7 @@ void Window::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &Window::set_size); ClassDB::bind_method(D_METHOD("get_size"), &Window::get_size); + ClassDB::bind_method(D_METHOD("reset_size"), &Window::reset_size); ClassDB::bind_method(D_METHOD("get_real_size"), &Window::get_real_size); diff --git a/scene/main/window.h b/scene/main/window.h index def6eab7b8..0b1075ff76 100644 --- a/scene/main/window.h +++ b/scene/main/window.h @@ -178,6 +178,7 @@ public: void set_size(const Size2i &p_size); Size2i get_size() const; + void reset_size(); Size2i get_real_size() const; diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 3700e87839..d31771e71a 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -317,7 +317,7 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) { Vector<real_t> times = d["times"]; Vector<real_t> values = d["points"]; - ERR_FAIL_COND_V(times.size() * 5 != values.size(), false); + ERR_FAIL_COND_V(times.size() * 6 != values.size(), false); if (times.size()) { int valcount = times.size(); @@ -330,11 +330,12 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) { for (int i = 0; i < valcount; i++) { bt->values.write[i].time = rt[i]; bt->values.write[i].transition = 0; //unused in bezier - bt->values.write[i].value.value = rv[i * 5 + 0]; - bt->values.write[i].value.in_handle.x = rv[i * 5 + 1]; - bt->values.write[i].value.in_handle.y = rv[i * 5 + 2]; - bt->values.write[i].value.out_handle.x = rv[i * 5 + 3]; - bt->values.write[i].value.out_handle.y = rv[i * 5 + 4]; + bt->values.write[i].value.value = rv[i * 6 + 0]; + bt->values.write[i].value.in_handle.x = rv[i * 6 + 1]; + bt->values.write[i].value.in_handle.y = rv[i * 6 + 2]; + bt->values.write[i].value.out_handle.x = rv[i * 6 + 3]; + bt->values.write[i].value.out_handle.y = rv[i * 6 + 4]; + bt->values.write[i].value.handle_mode = static_cast<HandleMode>((int)rv[i * 6 + 5]); } } @@ -698,7 +699,7 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const { int kk = bt->values.size(); key_times.resize(kk); - key_points.resize(kk * 5); + key_points.resize(kk * 6); real_t *wti = key_times.ptrw(); real_t *wpo = key_points.ptrw(); @@ -709,11 +710,12 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const { for (int i = 0; i < kk; i++) { wti[idx] = vls[i].time; - wpo[idx * 5 + 0] = vls[i].value.value; - wpo[idx * 5 + 1] = vls[i].value.in_handle.x; - wpo[idx * 5 + 2] = vls[i].value.in_handle.y; - wpo[idx * 5 + 3] = vls[i].value.out_handle.x; - wpo[idx * 5 + 4] = vls[i].value.out_handle.y; + wpo[idx * 6 + 0] = vls[i].value.value; + wpo[idx * 6 + 1] = vls[i].value.in_handle.x; + wpo[idx * 6 + 2] = vls[i].value.in_handle.y; + wpo[idx * 6 + 3] = vls[i].value.out_handle.x; + wpo[idx * 6 + 4] = vls[i].value.out_handle.y; + wpo[idx * 6 + 5] = (double)vls[i].value.handle_mode; idx++; } @@ -1623,7 +1625,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke BezierTrack *bt = static_cast<BezierTrack *>(t); Array arr = p_key; - ERR_FAIL_COND(arr.size() != 5); + ERR_FAIL_COND(arr.size() != 6); TKey<BezierKey> k; k.time = p_time; @@ -1632,6 +1634,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke k.value.in_handle.y = arr[2]; k.value.out_handle.x = arr[3]; k.value.out_handle.y = arr[4]; + k.value.handle_mode = static_cast<HandleMode>((int)arr[5]); _insert(p_time, bt->values, k); } break; @@ -1770,12 +1773,13 @@ Variant Animation::track_get_key_value(int p_track, int p_key_idx) const { ERR_FAIL_INDEX_V(p_key_idx, bt->values.size(), Variant()); Array arr; - arr.resize(5); + arr.resize(6); arr[0] = bt->values[p_key_idx].value.value; arr[1] = bt->values[p_key_idx].value.in_handle.x; arr[2] = bt->values[p_key_idx].value.in_handle.y; arr[3] = bt->values[p_key_idx].value.out_handle.x; arr[4] = bt->values[p_key_idx].value.out_handle.y; + arr[5] = (double)bt->values[p_key_idx].value.handle_mode; return arr; } break; @@ -2144,13 +2148,14 @@ void Animation::track_set_key_value(int p_track, int p_key_idx, const Variant &p ERR_FAIL_INDEX(p_key_idx, bt->values.size()); Array arr = p_value; - ERR_FAIL_COND(arr.size() != 5); + ERR_FAIL_COND(arr.size() != 6); bt->values.write[p_key_idx].value.value = arr[0]; bt->values.write[p_key_idx].value.in_handle.x = arr[1]; bt->values.write[p_key_idx].value.in_handle.y = arr[2]; bt->values.write[p_key_idx].value.out_handle.x = arr[3]; bt->values.write[p_key_idx].value.out_handle.y = arr[4]; + bt->values.write[p_key_idx].value.handle_mode = static_cast<HandleMode>((int)arr[5]); } break; case TYPE_AUDIO: { @@ -3203,7 +3208,7 @@ StringName Animation::method_track_get_name(int p_track, int p_key_idx) const { return pm->methods[p_key_idx].method; } -int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle) { +int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode) { ERR_FAIL_INDEX_V(p_track, tracks.size(), -1); Track *t = tracks[p_track]; ERR_FAIL_COND_V(t->type != TYPE_BEZIER, -1); @@ -3221,6 +3226,7 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu if (k.value.out_handle.x < 0) { k.value.out_handle.x = 0; } + k.value.handle_mode = p_handle_mode; int key = _insert(p_time, bt->values, k); @@ -3229,6 +3235,30 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu return key; } +void Animation::bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio) { + ERR_FAIL_INDEX(p_track, tracks.size()); + Track *t = tracks[p_track]; + ERR_FAIL_COND(t->type != TYPE_BEZIER); + + BezierTrack *bt = static_cast<BezierTrack *>(t); + + ERR_FAIL_INDEX(p_index, bt->values.size()); + + bt->values.write[p_index].value.handle_mode = p_mode; + + if (p_mode == HANDLE_MODE_BALANCED) { + Transform2D xform; + xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio)); + + Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle); + Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle); + + bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length()); + } + + emit_changed(); +} + void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_value) { ERR_FAIL_INDEX(p_track, tracks.size()); Track *t = tracks[p_track]; @@ -3242,7 +3272,7 @@ void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_va emit_changed(); } -void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle) { +void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) { ERR_FAIL_INDEX(p_track, tracks.size()); Track *t = tracks[p_track]; ERR_FAIL_COND(t->type != TYPE_BEZIER); @@ -3251,14 +3281,26 @@ void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const V ERR_FAIL_INDEX(p_index, bt->values.size()); - bt->values.write[p_index].value.in_handle = p_handle; - if (bt->values[p_index].value.in_handle.x > 0) { - bt->values.write[p_index].value.in_handle.x = 0; + Vector2 in_handle = p_handle; + if (in_handle.x > 0) { + in_handle.x = 0; + } + bt->values.write[p_index].value.in_handle = in_handle; + + if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) { + Transform2D xform; + xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio)); + + Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle); + Vector2 vec_in = xform.xform(in_handle); + + bt->values.write[p_index].value.out_handle = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length()); } + emit_changed(); } -void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle) { +void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) { ERR_FAIL_INDEX(p_track, tracks.size()); Track *t = tracks[p_track]; ERR_FAIL_COND(t->type != TYPE_BEZIER); @@ -3267,10 +3309,22 @@ void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const ERR_FAIL_INDEX(p_index, bt->values.size()); - bt->values.write[p_index].value.out_handle = p_handle; - if (bt->values[p_index].value.out_handle.x < 0) { - bt->values.write[p_index].value.out_handle.x = 0; + Vector2 out_handle = p_handle; + if (out_handle.x < 0) { + out_handle.x = 0; + } + bt->values.write[p_index].value.out_handle = out_handle; + + if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) { + Transform2D xform; + xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio)); + + Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle); + Vector2 vec_out = xform.xform(out_handle); + + bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length()); } + emit_changed(); } @@ -3286,6 +3340,18 @@ real_t Animation::bezier_track_get_key_value(int p_track, int p_index) const { return bt->values[p_index].value.value; } +int Animation::bezier_track_get_key_handle_mode(int p_track, int p_index) const { + ERR_FAIL_INDEX_V(p_track, tracks.size(), 0); + Track *t = tracks[p_track]; + ERR_FAIL_COND_V(t->type != TYPE_BEZIER, 0); + + BezierTrack *bt = static_cast<BezierTrack *>(t); + + ERR_FAIL_INDEX_V(p_index, bt->values.size(), 0); + + return bt->values[p_index].value.handle_mode; +} + Vector2 Animation::bezier_track_get_key_in_handle(int p_track, int p_index) const { ERR_FAIL_INDEX_V(p_track, tracks.size(), Vector2()); Track *t = tracks[p_track]; @@ -3718,11 +3784,11 @@ void Animation::_bind_methods() { ClassDB::bind_method(D_METHOD("method_track_get_name", "track_idx", "key_idx"), &Animation::method_track_get_name); ClassDB::bind_method(D_METHOD("method_track_get_params", "track_idx", "key_idx"), &Animation::method_track_get_params); - ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2())); + ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle", "handle_mode"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(Animation::HandleMode::HANDLE_MODE_BALANCED)); ClassDB::bind_method(D_METHOD("bezier_track_set_key_value", "track_idx", "key_idx", "value"), &Animation::bezier_track_set_key_value); - ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle"), &Animation::bezier_track_set_key_in_handle); - ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle"), &Animation::bezier_track_set_key_out_handle); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_in_handle, DEFVAL(1.0)); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_out_handle, DEFVAL(1.0)); ClassDB::bind_method(D_METHOD("bezier_track_get_key_value", "track_idx", "key_idx"), &Animation::bezier_track_get_key_value); ClassDB::bind_method(D_METHOD("bezier_track_get_key_in_handle", "track_idx", "key_idx"), &Animation::bezier_track_get_key_in_handle); @@ -3738,6 +3804,9 @@ void Animation::_bind_methods() { ClassDB::bind_method(D_METHOD("audio_track_get_key_start_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_start_offset); ClassDB::bind_method(D_METHOD("audio_track_get_key_end_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_end_offset); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_handle_mode", "track_idx", "key_idx", "key_handle_mode", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_handle_mode, DEFVAL(1.0)); + ClassDB::bind_method(D_METHOD("bezier_track_get_key_handle_mode", "track_idx", "key_idx"), &Animation::bezier_track_get_key_handle_mode); + ClassDB::bind_method(D_METHOD("animation_track_insert_key", "track_idx", "time", "animation"), &Animation::animation_track_insert_key); ClassDB::bind_method(D_METHOD("animation_track_set_key_animation", "track_idx", "key_idx", "animation"), &Animation::animation_track_set_key_animation); ClassDB::bind_method(D_METHOD("animation_track_get_key_animation", "track_idx", "key_idx"), &Animation::animation_track_get_key_animation); @@ -3784,6 +3853,9 @@ void Animation::_bind_methods() { BIND_ENUM_CONSTANT(LOOP_NONE); BIND_ENUM_CONSTANT(LOOP_LINEAR); BIND_ENUM_CONSTANT(LOOP_PINGPONG); + + BIND_ENUM_CONSTANT(HANDLE_MODE_FREE); + BIND_ENUM_CONSTANT(HANDLE_MODE_BALANCED); } void Animation::clear() { diff --git a/scene/resources/animation.h b/scene/resources/animation.h index 510d6c8323..8e4287e4fb 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -72,6 +72,11 @@ public: LOOP_PINGPONG, }; + enum HandleMode { + HANDLE_MODE_FREE, + HANDLE_MODE_BALANCED, + }; + private: struct Track { TrackType type = TrackType::TYPE_ANIMATION; @@ -157,10 +162,10 @@ private: }; /* BEZIER TRACK */ - struct BezierKey { Vector2 in_handle; //relative (x always <0) Vector2 out_handle; //relative (x always >0) + HandleMode handle_mode = HANDLE_MODE_BALANCED; real_t value = 0.0; }; @@ -419,11 +424,13 @@ public: void track_set_interpolation_type(int p_track, InterpolationType p_interp); InterpolationType track_get_interpolation_type(int p_track) const; - int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle); + int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode = HandleMode::HANDLE_MODE_BALANCED); + void bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio = 1.0); void bezier_track_set_key_value(int p_track, int p_index, real_t p_value); - void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle); - void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle); + void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0); + void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0); real_t bezier_track_get_key_value(int p_track, int p_index) const; + int bezier_track_get_key_handle_mode(int p_track, int p_index) const; Vector2 bezier_track_get_key_in_handle(int p_track, int p_index) const; Vector2 bezier_track_get_key_out_handle(int p_track, int p_index) const; @@ -478,6 +485,7 @@ public: VARIANT_ENUM_CAST(Animation::TrackType); VARIANT_ENUM_CAST(Animation::InterpolationType); VARIANT_ENUM_CAST(Animation::UpdateMode); +VARIANT_ENUM_CAST(Animation::HandleMode); VARIANT_ENUM_CAST(Animation::LoopMode); #endif diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index d9de47afc7..6cd42e1456 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -88,6 +88,9 @@ void FontData::_bind_methods() { ClassDB::bind_method(D_METHOD("set_msdf_size", "msdf_size"), &FontData::set_msdf_size); ClassDB::bind_method(D_METHOD("get_msdf_size"), &FontData::get_msdf_size); + ClassDB::bind_method(D_METHOD("set_fixed_size", "fixed_size"), &FontData::set_fixed_size); + ClassDB::bind_method(D_METHOD("get_fixed_size"), &FontData::get_fixed_size); + ClassDB::bind_method(D_METHOD("set_force_autohinter", "force_autohinter"), &FontData::set_force_autohinter); ClassDB::bind_method(D_METHOD("is_force_autohinter"), &FontData::is_force_autohinter); diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index f43715a463..3f4765d20f 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -315,13 +315,13 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const { node->_set_owner_nocheck(owner); } } - } - // we only want to deal with pinned flag if instancing as pure main (no instance, no inheriting) - if (p_edit_state == GEN_EDIT_STATE_MAIN) { - _sanitize_node_pinned_properties(node); - } else { - node->remove_meta("_edit_pinned_properties_"); + // we only want to deal with pinned flag if instancing as pure main (no instance, no inheriting) + if (p_edit_state == GEN_EDIT_STATE_MAIN) { + _sanitize_node_pinned_properties(node); + } else { + node->remove_meta("_edit_pinned_properties_"); + } } ret_nodes[i] = node; diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp index ea3b72af1b..cead42b4e2 100644 --- a/scene/resources/resource_format_text.cpp +++ b/scene/resources/resource_format_text.cpp @@ -350,7 +350,7 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars } else if (next_tag.name == "editable") { if (!next_tag.fields.has("path")) { error = ERR_FILE_CORRUPT; - error_text = "missing 'path' field from connection tag"; + error_text = "missing 'path' field from editable tag"; _printerr(); return Ref<PackedScene>(); } diff --git a/scene/resources/skeleton_modification_2d_ccdik.cpp b/scene/resources/skeleton_modification_2d_ccdik.cpp index 6eab8d4afe..bea42109cb 100644 --- a/scene/resources/skeleton_modification_2d_ccdik.cpp +++ b/scene/resources/skeleton_modification_2d_ccdik.cpp @@ -205,8 +205,8 @@ void SkeletonModification2DCCDIK::_execute_ccdik_joint(int p_joint_idx, Node2D * } else { // How to rotate from the tip: get the difference of rotation needed from the tip to the target, from the perspective of the joint. // Because we are only using the offset, we do not need to account for the bone angle of the Bone2D node. - float joint_to_tip = operation_transform.get_origin().angle_to_point(p_tip->get_global_position()); - float joint_to_target = operation_transform.get_origin().angle_to_point(p_target->get_global_position()); + float joint_to_tip = p_tip->get_global_position().angle_to_point(operation_transform.get_origin()); + float joint_to_target = p_target->get_global_position().angle_to_point(operation_transform.get_origin()); operation_transform.set_rotation( operation_transform.get_rotation() + (joint_to_target - joint_to_tip)); } diff --git a/scene/resources/skeleton_modification_stack_2d.cpp b/scene/resources/skeleton_modification_stack_2d.cpp index db9fe62b4d..25c3e9d2ef 100644 --- a/scene/resources/skeleton_modification_stack_2d.cpp +++ b/scene/resources/skeleton_modification_stack_2d.cpp @@ -195,6 +195,7 @@ void SkeletonModificationStack2D::set_modification(int p_mod_idx, Ref<SkeletonMo } void SkeletonModificationStack2D::set_modification_count(int p_count) { + ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero."); modifications.resize(p_count); notify_property_list_changed(); diff --git a/scene/resources/skeleton_modification_stack_3d.cpp b/scene/resources/skeleton_modification_stack_3d.cpp index c03210cf48..301811f0b6 100644 --- a/scene/resources/skeleton_modification_stack_3d.cpp +++ b/scene/resources/skeleton_modification_stack_3d.cpp @@ -149,6 +149,7 @@ void SkeletonModificationStack3D::set_modification(int p_mod_idx, Ref<SkeletonMo } void SkeletonModificationStack3D::set_modification_count(int p_count) { + ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero."); modifications.resize(p_count); notify_property_list_changed(); } diff --git a/scene/resources/sky_material.cpp b/scene/resources/sky_material.cpp index de94c92cac..ff388e288c 100644 --- a/scene/resources/sky_material.cpp +++ b/scene/resources/sky_material.cpp @@ -37,7 +37,7 @@ RID ProceduralSkyMaterial::shader; void ProceduralSkyMaterial::set_sky_top_color(const Color &p_sky_top) { sky_top_color = p_sky_top; - RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color.to_linear()); + RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color); } Color ProceduralSkyMaterial::get_sky_top_color() const { @@ -46,7 +46,7 @@ Color ProceduralSkyMaterial::get_sky_top_color() const { void ProceduralSkyMaterial::set_sky_horizon_color(const Color &p_sky_horizon) { sky_horizon_color = p_sky_horizon; - RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color.to_linear()); + RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color); } Color ProceduralSkyMaterial::get_sky_horizon_color() const { @@ -73,7 +73,7 @@ float ProceduralSkyMaterial::get_sky_energy() const { void ProceduralSkyMaterial::set_ground_bottom_color(const Color &p_ground_bottom) { ground_bottom_color = p_ground_bottom; - RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color.to_linear()); + RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color); } Color ProceduralSkyMaterial::get_ground_bottom_color() const { @@ -82,7 +82,7 @@ Color ProceduralSkyMaterial::get_ground_bottom_color() const { void ProceduralSkyMaterial::set_ground_horizon_color(const Color &p_ground_horizon) { ground_horizon_color = p_ground_horizon; - RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color.to_linear()); + RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color); } Color ProceduralSkyMaterial::get_ground_horizon_color() const { @@ -564,10 +564,10 @@ void PhysicalSkyMaterial::_update_shader() { shader_type sky; uniform float rayleigh : hint_range(0, 64) = 2.0; -uniform vec4 rayleigh_color : hint_color = vec4(0.056, 0.14, 0.3, 1.0); +uniform vec4 rayleigh_color : hint_color = vec4(0.26, 0.41, 0.58, 1.0); uniform float mie : hint_range(0, 1) = 0.005; uniform float mie_eccentricity : hint_range(-1, 1) = 0.8; -uniform vec4 mie_color : hint_color = vec4(0.36, 0.56, 0.82, 1.0); +uniform vec4 mie_color : hint_color = vec4(0.63, 0.77, 0.92, 1.0); uniform float turbidity : hint_range(0, 1000) = 10.0; uniform float sun_disk_scale : hint_range(0, 360) = 1.0; @@ -661,10 +661,10 @@ void sky() { PhysicalSkyMaterial::PhysicalSkyMaterial() { set_rayleigh_coefficient(2.0); - set_rayleigh_color(Color(0.056, 0.14, 0.3)); + set_rayleigh_color(Color(0.26, 0.41, 0.58)); set_mie_coefficient(0.005); set_mie_eccentricity(0.8); - set_mie_color(Color(0.36, 0.56, 0.82)); + set_mie_color(Color(0.63, 0.77, 0.92)); set_turbidity(10.0); set_sun_disk_scale(1.0); set_ground_color(Color(1.0, 1.0, 1.0)); diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 0bdc81330e..87ff225de9 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -1835,6 +1835,7 @@ void VisualShader::_update_shader() const { code += " float __scalar_buff1;\n"; code += " float __scalar_buff2;\n"; code += " int __scalar_ibuff;\n"; + code += " vec4 __vec4_buff;\n"; code += " vec3 __ndiff = normalize(__diff);\n\n"; } if (has_start) { diff --git a/scene/resources/visual_shader_particle_nodes.cpp b/scene/resources/visual_shader_particle_nodes.cpp index 7dd4eed15b..1a829968e3 100644 --- a/scene/resources/visual_shader_particle_nodes.cpp +++ b/scene/resources/visual_shader_particle_nodes.cpp @@ -264,7 +264,7 @@ String VisualShaderNodeParticleMeshEmitter::get_caption() const { } int VisualShaderNodeParticleMeshEmitter::get_output_port_count() const { - return 2; + return 6; } VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter::get_output_port_type(int p_port) const { @@ -273,6 +273,14 @@ VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter return PORT_TYPE_VECTOR; // position case 1: return PORT_TYPE_VECTOR; // normal + case 2: + return PORT_TYPE_VECTOR; // color + case 3: + return PORT_TYPE_SCALAR; // alpha + case 4: + return PORT_TYPE_VECTOR; // uv + case 5: + return PORT_TYPE_VECTOR; // uv2 } return PORT_TYPE_SCALAR; } @@ -283,6 +291,14 @@ String VisualShaderNodeParticleMeshEmitter::get_output_port_name(int p_port) con return "position"; case 1: return "normal"; + case 2: + return "color"; + case 3: + return "alpha"; + case 4: + return "uv"; + case 5: + return "uv2"; } return String(); } @@ -299,135 +315,263 @@ String VisualShaderNodeParticleMeshEmitter::get_input_port_name(int p_port) cons return String(); } -String VisualShaderNodeParticleMeshEmitter::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { +String VisualShaderNodeParticleMeshEmitter::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { String code; if (mesh.is_valid()) { - code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_vx") + ";\n"; - code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_nm") + ";\n"; + if (is_output_port_connected(0)) { // position + code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_vx") + ";\n"; + } + + if (is_output_port_connected(1)) { // normal + code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_nm") + ";\n"; + } + + if (is_output_port_connected(2) || is_output_port_connected(3)) { // color & alpha + code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_col") + ";\n"; + } + + if (is_output_port_connected(4)) { // uv + code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv") + ";\n"; + } + + if (is_output_port_connected(5)) { // uv2 + code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv2") + ";\n"; + } } return code; } -String VisualShaderNodeParticleMeshEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { +String VisualShaderNodeParticleMeshEmitter::_generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d) const { String code; - - code += " __scalar_ibuff = int(__rand_from_seed(__seed) * 65535.0) % " + itos(position_texture->get_width()) + ";\n"; - - if (position_texture->get_width() == 0) { - code += " " + p_output_vars[0] + " = vec3(0.0);\n"; - } else { - if (mode_2d) { - code += " " + p_output_vars[0] + " = vec3("; + if (is_output_port_connected(p_index)) { + if (mode_2d && !p_ignore_mode2d) { + code += " " + p_output_vars[p_index] + " = vec3("; code += "texelFetch("; - code += make_unique_id(p_type, p_id, "mesh_vx") + ", "; + code += make_unique_id(p_type, p_id, p_texture_name) + ", "; code += "ivec2(__scalar_ibuff, 0), 0).xy, 0.0);\n"; } else { - code += " " + p_output_vars[0] + " = texelFetch("; - code += make_unique_id(p_type, p_id, "mesh_vx") + ", "; + code += " " + p_output_vars[p_index] + " = texelFetch("; + code += make_unique_id(p_type, p_id, p_texture_name) + ", "; code += "ivec2(__scalar_ibuff, 0), 0).xyz;\n"; } } + return code; +} - if (normal_texture->get_width() == 0) { - code += " " + p_output_vars[1] + " = vec3(0.0);\n"; - } else { - if (mode_2d) { - code += " " + p_output_vars[1] + " = vec3("; - code += "texelFetch("; - code += make_unique_id(p_type, p_id, "mesh_nm") + ", "; - code += "ivec2(__scalar_ibuff, 0), 0).xy, 0.0);\n"; +String VisualShaderNodeParticleMeshEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { + String code; + code += " __scalar_ibuff = int(__rand_from_seed(__seed) * 65535.0) % " + itos(position_texture->get_width()) + ";\n"; + + code += _generate_code(p_type, p_id, p_output_vars, 0, "mesh_vx"); + code += _generate_code(p_type, p_id, p_output_vars, 1, "mesh_nm"); + + if (is_output_port_connected(2) || is_output_port_connected(3)) { + code += " __vec4_buff = texelFetch("; + code += make_unique_id(p_type, p_id, "mesh_col") + ", "; + code += "ivec2(__scalar_ibuff, 0), 0);\n"; + if (is_output_port_connected(2)) { + code += " " + p_output_vars[2] + " = __vec4_buff.rgb;\n"; } else { - code += " " + p_output_vars[1] + " = texelFetch("; - code += make_unique_id(p_type, p_id, "mesh_nm") + ", "; - code += "ivec2(__scalar_ibuff, 0), 0).xyz;\n"; + code += " " + p_output_vars[2] + " = vec3(0.0);\n"; + } + if (is_output_port_connected(3)) { + code += " " + p_output_vars[3] + " = __vec4_buff.a;\n"; + } else { + code += " " + p_output_vars[3] + " = 0.0;\n"; } } + code += _generate_code(p_type, p_id, p_output_vars, 4, "mesh_uv", true); + code += _generate_code(p_type, p_id, p_output_vars, 5, "mesh_uv2", true); + return code; } Vector<VisualShader::DefaultTextureParam> VisualShaderNodeParticleMeshEmitter::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const { - VisualShader::DefaultTextureParam dtp_vx; - dtp_vx.name = make_unique_id(p_type, p_id, "mesh_vx"); - dtp_vx.params.push_back(position_texture); + Vector<VisualShader::DefaultTextureParam> ret; - VisualShader::DefaultTextureParam dtp_nm; - dtp_nm.name = make_unique_id(p_type, p_id, "mesh_nm"); - dtp_nm.params.push_back(normal_texture); + if (is_output_port_connected(0)) { + VisualShader::DefaultTextureParam dtp; + dtp.name = make_unique_id(p_type, p_id, "mesh_vx"); + dtp.params.push_back(position_texture); + ret.push_back(dtp); + } + + if (is_output_port_connected(1)) { + VisualShader::DefaultTextureParam dtp; + dtp.name = make_unique_id(p_type, p_id, "mesh_nm"); + dtp.params.push_back(normal_texture); + ret.push_back(dtp); + } + + if (is_output_port_connected(2) || is_output_port_connected(3)) { + VisualShader::DefaultTextureParam dtp; + dtp.name = make_unique_id(p_type, p_id, "mesh_col"); + dtp.params.push_back(color_texture); + ret.push_back(dtp); + } + + if (is_output_port_connected(4)) { + VisualShader::DefaultTextureParam dtp; + dtp.name = make_unique_id(p_type, p_id, "mesh_uv"); + dtp.params.push_back(uv_texture); + ret.push_back(dtp); + } + + if (is_output_port_connected(5)) { + VisualShader::DefaultTextureParam dtp; + dtp.name = make_unique_id(p_type, p_id, "mesh_uv2"); + dtp.params.push_back(uv2_texture); + ret.push_back(dtp); + } - Vector<VisualShader::DefaultTextureParam> ret; - ret.push_back(dtp_vx); - ret.push_back(dtp_nm); return ret; } -void VisualShaderNodeParticleMeshEmitter::update_texture() { +void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture) { + Ref<Image> image; + image.instantiate(); + + if (p_array.size() == 0) { + image->create(1, 1, false, Image::Format::FORMAT_RGBF); + } else { + image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF); + } + + for (int i = 0; i < p_array.size(); i++) { + Vector2 v = p_array[i]; + image->set_pixel(i, 0, Color(v.x, v.y, 0)); + } + if (r_texture->get_width() != p_array.size() || p_array.size() == 0) { + r_texture->create_from_image(image); + } else { + r_texture->update(image); + } +} + +void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture) { + Ref<Image> image; + image.instantiate(); + + if (p_array.size() == 0) { + image->create(1, 1, false, Image::Format::FORMAT_RGBF); + } else { + image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF); + } + + for (int i = 0; i < p_array.size(); i++) { + Vector3 v = p_array[i]; + image->set_pixel(i, 0, Color(v.x, v.y, v.z)); + } + if (r_texture->get_width() != p_array.size() || p_array.size() == 0) { + r_texture->create_from_image(image); + } else { + r_texture->update(image); + } +} + +void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture) { + Ref<Image> image; + image.instantiate(); + + if (p_array.size() == 0) { + image->create(1, 1, false, Image::Format::FORMAT_RGBA8); + } else { + image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBA8); + } + + for (int i = 0; i < p_array.size(); i++) { + image->set_pixel(i, 0, p_array[i]); + } + if (r_texture->get_width() != p_array.size() || p_array.size() == 0) { + r_texture->create_from_image(image); + } else { + r_texture->update(image); + } +} + +void VisualShaderNodeParticleMeshEmitter::_update_textures() { if (!mesh.is_valid()) { return; } Vector<Vector3> vertices; Vector<Vector3> normals; + Vector<Color> colors; + Vector<Vector2> uvs; + Vector<Vector2> uvs2; if (use_all_surfaces) { for (int i = 0; i < max_surface_index; i++) { + // position Array vertex_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_VERTEX]; for (int j = 0; j < vertex_array.size(); j++) { vertices.push_back((Vector3)vertex_array[j]); } + // normal Array normal_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_NORMAL]; - for (int j = 0; j < vertex_array.size(); j++) { - normals.push_back((Vector3)vertex_array[j]); + for (int j = 0; j < normal_array.size(); j++) { + normals.push_back((Vector3)normal_array[j]); + } + + // color + Array color_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_COLOR]; + for (int j = 0; j < color_array.size(); j++) { + colors.push_back((Color)color_array[j]); + } + + // uv + Array uv_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV]; + for (int j = 0; j < uv_array.size(); j++) { + uvs.push_back((Vector2)uv_array[j]); + } + + // uv2 + Array uv2_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV2]; + for (int j = 0; j < uv2_array.size(); j++) { + uvs2.push_back((Vector2)uv2_array[j]); } } } else { + // position Array vertex_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_VERTEX]; for (int i = 0; i < vertex_array.size(); i++) { vertices.push_back((Vector3)vertex_array[i]); } + // normal Array normal_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_NORMAL]; for (int i = 0; i < normal_array.size(); i++) { normals.push_back((Vector3)normal_array[i]); } - } - // vertices - { - Ref<Image> image; - image.instantiate(); - image->create(vertices.size(), 1, false, Image::Format::FORMAT_RGBF); - - for (int i = 0; i < vertices.size(); i++) { - Vector3 v = vertices[i]; - image->set_pixel(i, 0, Color(v.x, v.y, v.z)); - } - if (position_texture->get_width() != vertices.size()) { - position_texture->create_from_image(image); - } else { - position_texture->update(image); + // color + Array color_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_COLOR]; + for (int i = 0; i < color_array.size(); i++) { + colors.push_back((Color)color_array[i]); } - } - - // normals - { - Ref<Image> image; - image.instantiate(); - image->create(normals.size(), 1, false, Image::Format::FORMAT_RGBF); - for (int i = 0; i < normals.size(); i++) { - Vector3 v = normals[i]; - image->set_pixel(i, 0, Color(v.x, v.y, v.z)); + // uv + Array uv_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV]; + for (int j = 0; j < uv_array.size(); j++) { + uvs.push_back((Vector2)uv_array[j]); } - if (normal_texture->get_width() != normals.size()) { - normal_texture->create_from_image(image); - } else { - normal_texture->update(image); + + // uv2 + Array uv2_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV2]; + for (int j = 0; j < uv2_array.size(); j++) { + uvs2.push_back((Vector2)uv2_array[j]); } } + + _update_texture(vertices, position_texture); + _update_texture(normals, normal_texture); + _update_texture(colors, color_texture); + _update_texture(uvs, uv_texture); + _update_texture(uvs2, uv2_texture); } void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) { @@ -442,7 +586,7 @@ void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) { } if (mesh.is_valid()) { - Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture); + Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures); if (mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) { mesh->disconnect(CoreStringNames::get_singleton()->changed, callable); @@ -452,7 +596,7 @@ void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) { mesh = p_mesh; if (mesh.is_valid()) { - Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture); + Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures); if (!mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) { mesh->connect(CoreStringNames::get_singleton()->changed, callable); @@ -528,10 +672,13 @@ void VisualShaderNodeParticleMeshEmitter::_bind_methods() { } VisualShaderNodeParticleMeshEmitter::VisualShaderNodeParticleMeshEmitter() { - connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture)); + connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures)); position_texture.instantiate(); normal_texture.instantiate(); + color_texture.instantiate(); + uv_texture.instantiate(); + uv2_texture.instantiate(); } // VisualShaderNodeParticleMultiplyByAxisAngle diff --git a/scene/resources/visual_shader_particle_nodes.h b/scene/resources/visual_shader_particle_nodes.h index 0d0f21e4bf..79459432f1 100644 --- a/scene/resources/visual_shader_particle_nodes.h +++ b/scene/resources/visual_shader_particle_nodes.h @@ -115,6 +115,16 @@ class VisualShaderNodeParticleMeshEmitter : public VisualShaderNodeParticleEmitt Ref<ImageTexture> position_texture; Ref<ImageTexture> normal_texture; + Ref<ImageTexture> color_texture; + Ref<ImageTexture> uv_texture; + Ref<ImageTexture> uv2_texture; + + String _generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d = false) const; + + void _update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture); + void _update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture); + void _update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture); + void _update_textures(); protected: static void _bind_methods(); @@ -130,11 +140,9 @@ public: virtual PortType get_input_port_type(int p_port) const override; virtual String get_input_port_name(int p_port) const override; - virtual String generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override; + virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override; - void update_texture(); - void set_mesh(Ref<Mesh> p_mesh); Ref<Mesh> get_mesh() const; diff --git a/servers/physics_2d/godot_area_2d.cpp b/servers/physics_2d/godot_area_2d.cpp index fb9d38e7ea..c4060615c9 100644 --- a/servers/physics_2d/godot_area_2d.cpp +++ b/servers/physics_2d/godot_area_2d.cpp @@ -213,6 +213,7 @@ void GodotArea2D::set_monitorable(bool p_monitorable) { monitorable = p_monitorable; _set_static(!monitorable); + _shapes_changed(); } void GodotArea2D::call_queries() { diff --git a/servers/physics_2d/godot_area_pair_2d.cpp b/servers/physics_2d/godot_area_pair_2d.cpp index a98513004d..bde22aab11 100644 --- a/servers/physics_2d/godot_area_pair_2d.cpp +++ b/servers/physics_2d/godot_area_pair_2d.cpp @@ -128,7 +128,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) { process_collision_a = false; if (result_a != colliding_a) { - if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) { + if (area_a->has_area_monitor_callback() && area_b_monitorable) { process_collision_a = true; process_collision = true; } @@ -137,7 +137,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) { process_collision_b = false; if (result_b != colliding_b) { - if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) { + if (area_b->has_area_monitor_callback() && area_a_monitorable) { process_collision_b = true; process_collision = true; } @@ -176,19 +176,21 @@ GodotArea2Pair2D::GodotArea2Pair2D(GodotArea2D *p_area_a, int p_shape_a, GodotAr area_b = p_area_b; shape_a = p_shape_a; shape_b = p_shape_b; + area_a_monitorable = area_a->is_monitorable(); + area_b_monitorable = area_b->is_monitorable(); area_a->add_constraint(this); area_b->add_constraint(this); } GodotArea2Pair2D::~GodotArea2Pair2D() { if (colliding_a) { - if (area_a->has_area_monitor_callback()) { + if (area_a->has_area_monitor_callback() && area_b_monitorable) { area_a->remove_area_from_query(area_b, shape_b, shape_a); } } if (colliding_b) { - if (area_b->has_area_monitor_callback()) { + if (area_b->has_area_monitor_callback() && area_a_monitorable) { area_b->remove_area_from_query(area_a, shape_a, shape_b); } } diff --git a/servers/physics_2d/godot_area_pair_2d.h b/servers/physics_2d/godot_area_pair_2d.h index 45bd3df1ed..f1290a27d0 100644 --- a/servers/physics_2d/godot_area_pair_2d.h +++ b/servers/physics_2d/godot_area_pair_2d.h @@ -62,6 +62,8 @@ class GodotArea2Pair2D : public GodotConstraint2D { bool colliding_b = false; bool process_collision_a = false; bool process_collision_b = false; + bool area_a_monitorable; + bool area_b_monitorable; public: virtual bool setup(real_t p_step) override; diff --git a/servers/physics_2d/godot_body_2d.cpp b/servers/physics_2d/godot_body_2d.cpp index 9b97583300..6d1c5539aa 100644 --- a/servers/physics_2d/godot_body_2d.cpp +++ b/servers/physics_2d/godot_body_2d.cpp @@ -185,6 +185,9 @@ void GodotBody2D::set_param(PhysicsServer2D::BodyParameter p_param, const Varian _update_transform_dependent(); } break; case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: { + if (Math::is_zero_approx(gravity_scale)) { + wakeup(); + } gravity_scale = p_value; } break; case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP_MODE: { diff --git a/servers/physics_2d/godot_space_2d.cpp b/servers/physics_2d/godot_space_2d.cpp index 6465a5542c..7a5eb26bb3 100644 --- a/servers/physics_2d/godot_space_2d.cpp +++ b/servers/physics_2d/godot_space_2d.cpp @@ -439,8 +439,6 @@ bool GodotPhysicsDirectSpaceState2D::rest_info(const ShapeParameters &p_paramete GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid); ERR_FAIL_COND_V(!shape, 0); - real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR; - Rect2 aabb = p_parameters.transform.xform(shape->get_aabb()); aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion aabb = aabb.grow(p_parameters.margin); @@ -448,10 +446,11 @@ bool GodotPhysicsDirectSpaceState2D::rest_info(const ShapeParameters &p_paramete int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results); _RestCallbackData2D rcd; - rcd.best_len = 0; - rcd.best_object = nullptr; - rcd.best_shape = 0; - rcd.min_allowed_depth = min_contact_depth; + + // Allowed depth can't be lower than motion length, in order to handle contacts at low speed. + real_t motion_length = p_parameters.motion.length(); + real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR; + rcd.min_allowed_depth = MIN(motion_length, min_contact_depth); for (int i = 0; i < amount; i++) { if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) { @@ -879,9 +878,6 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D:: ugt.elements[2] += p_parameters.motion * unsafe; _RestCallbackData2D rcd; - rcd.best_len = 0; - rcd.best_object = nullptr; - rcd.best_shape = 0; // Allowed depth can't be lower than motion length, in order to handle contacts at low speed. rcd.min_allowed_depth = MIN(motion_length, min_contact_depth); diff --git a/servers/physics_2d/godot_step_2d.cpp b/servers/physics_2d/godot_step_2d.cpp index 84ec0e3c63..00d11acdab 100644 --- a/servers/physics_2d/godot_step_2d.cpp +++ b/servers/physics_2d/godot_step_2d.cpp @@ -152,6 +152,9 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations) p_space->set_active_objects(active_count); + // Update the broadphase to register collision pairs. + p_space->update(); + { //profile profile_endtime = OS::get_singleton()->get_ticks_usec(); p_space->set_elapsed_time(GodotSpace2D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime); @@ -286,7 +289,6 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations) all_constraints.clear(); - p_space->update(); p_space->unlock(); _step++; } diff --git a/servers/physics_3d/godot_area_3d.cpp b/servers/physics_3d/godot_area_3d.cpp index 9cdad069fe..d4e14b8d85 100644 --- a/servers/physics_3d/godot_area_3d.cpp +++ b/servers/physics_3d/godot_area_3d.cpp @@ -242,6 +242,7 @@ void GodotArea3D::set_monitorable(bool p_monitorable) { monitorable = p_monitorable; _set_static(!monitorable); + _shapes_changed(); } void GodotArea3D::call_queries() { diff --git a/servers/physics_3d/godot_area_pair_3d.cpp b/servers/physics_3d/godot_area_pair_3d.cpp index d3623178d5..58188565e3 100644 --- a/servers/physics_3d/godot_area_pair_3d.cpp +++ b/servers/physics_3d/godot_area_pair_3d.cpp @@ -129,7 +129,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) { process_collision_a = false; if (result_a != colliding_a) { - if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) { + if (area_a->has_area_monitor_callback() && area_b_monitorable) { process_collision_a = true; process_collision = true; } @@ -138,7 +138,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) { process_collision_b = false; if (result_b != colliding_b) { - if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) { + if (area_b->has_area_monitor_callback() && area_a_monitorable) { process_collision_b = true; process_collision = true; } @@ -177,19 +177,21 @@ GodotArea2Pair3D::GodotArea2Pair3D(GodotArea3D *p_area_a, int p_shape_a, GodotAr area_b = p_area_b; shape_a = p_shape_a; shape_b = p_shape_b; + area_a_monitorable = area_a->is_monitorable(); + area_b_monitorable = area_b->is_monitorable(); area_a->add_constraint(this); area_b->add_constraint(this); } GodotArea2Pair3D::~GodotArea2Pair3D() { if (colliding_a) { - if (area_a->has_area_monitor_callback()) { + if (area_a->has_area_monitor_callback() && area_b_monitorable) { area_a->remove_area_from_query(area_b, shape_b, shape_a); } } if (colliding_b) { - if (area_b->has_area_monitor_callback()) { + if (area_b->has_area_monitor_callback() && area_a_monitorable) { area_b->remove_area_from_query(area_a, shape_a, shape_b); } } diff --git a/servers/physics_3d/godot_area_pair_3d.h b/servers/physics_3d/godot_area_pair_3d.h index 16175e9fa8..4237e7722e 100644 --- a/servers/physics_3d/godot_area_pair_3d.h +++ b/servers/physics_3d/godot_area_pair_3d.h @@ -63,6 +63,8 @@ class GodotArea2Pair3D : public GodotConstraint3D { bool colliding_b = false; bool process_collision_a = false; bool process_collision_b = false; + bool area_a_monitorable; + bool area_b_monitorable; public: virtual bool setup(real_t p_step) override; diff --git a/servers/physics_3d/godot_body_3d.cpp b/servers/physics_3d/godot_body_3d.cpp index 0e21dd303f..40d946655d 100644 --- a/servers/physics_3d/godot_body_3d.cpp +++ b/servers/physics_3d/godot_body_3d.cpp @@ -227,6 +227,9 @@ void GodotBody3D::set_param(PhysicsServer3D::BodyParameter p_param, const Varian _update_transform_dependent(); } break; case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: { + if (Math::is_zero_approx(gravity_scale)) { + wakeup(); + } gravity_scale = p_value; } break; case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE: { diff --git a/servers/physics_3d/godot_collision_solver_3d.cpp b/servers/physics_3d/godot_collision_solver_3d.cpp index 686f3e4d59..540b16c6e3 100644 --- a/servers/physics_3d/godot_collision_solver_3d.cpp +++ b/servers/physics_3d/godot_collision_solver_3d.cpp @@ -264,7 +264,7 @@ bool GodotCollisionSolver3D::solve_soft_body(const GodotShape3D *p_shape_A, cons local_aabb.size[i] = smax - smin; } - concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo); + concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo, true); } else { AABB shape_aabb = p_transform_A.xform(p_shape_A->get_aabb()); shape_aabb.grow_by(collision_margin); @@ -346,7 +346,7 @@ bool GodotCollisionSolver3D::solve_concave(const GodotShape3D *p_shape_A, const local_aabb.size[i] = smax - smin; } - concave_B->cull(local_aabb, concave_callback, &cinfo); + concave_B->cull(local_aabb, concave_callback, &cinfo, false); return cinfo.collided; } @@ -559,7 +559,7 @@ bool GodotCollisionSolver3D::solve_distance(const GodotShape3D *p_shape_A, const local_aabb.size[i] = smax - smin; } - concave_B->cull(local_aabb, concave_distance_callback, &cinfo); + concave_B->cull(local_aabb, concave_distance_callback, &cinfo, false); if (!cinfo.collided) { r_point_A = cinfo.close_A; r_point_B = cinfo.close_B; diff --git a/servers/physics_3d/godot_collision_solver_3d_sat.cpp b/servers/physics_3d/godot_collision_solver_3d_sat.cpp index 0790333f65..4faa07b6c9 100644 --- a/servers/physics_3d/godot_collision_solver_3d_sat.cpp +++ b/servers/physics_3d/godot_collision_solver_3d_sat.cpp @@ -36,6 +36,8 @@ #define fallback_collision_solver gjk_epa_calculate_penetration +#define _BACKFACE_NORMAL_THRESHOLD -0.0002 + // Cylinder SAT analytic methods and face-circle contact points for cylinder-trimesh and cylinder-box collision are based on ODE colliders. /* @@ -612,13 +614,14 @@ class SeparatorAxisTest { const Transform3D *transform_A = nullptr; const Transform3D *transform_B = nullptr; real_t best_depth = 1e15; - Vector3 best_axis; _CollectorCallback *callback = nullptr; real_t margin_A = 0.0; real_t margin_B = 0.0; Vector3 separator_axis; public: + Vector3 best_axis; + _FORCE_INLINE_ bool test_previous_axis() { if (callback && callback->prev_axis && *callback->prev_axis != Vector3()) { return test_axis(*callback->prev_axis); @@ -627,7 +630,7 @@ public: } } - _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis, bool p_directional = false) { + _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis) { Vector3 axis = p_axis; if (axis.is_equal_approx(Vector3())) { @@ -661,12 +664,7 @@ public: //use the smallest depth if (min_B < 0.0) { // could be +0.0, we don't want it to become -0.0 - if (p_directional) { - min_B = max_B; - axis = -axis; - } else { - min_B = -min_B; - } + min_B = -min_B; } if (max_B < min_B) { @@ -1014,7 +1012,7 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized(); - if (!separator.test_axis(normal, !face_B->backface_collision)) { + if (!separator.test_axis(normal)) { return; } @@ -1041,6 +1039,17 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p } } + if (!face_B->backface_collision) { + if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) { + if (face_B->invert_backface_collision) { + separator.best_axis = separator.best_axis.bounce(normal); + } else { + // Just ignore backface collision. + return; + } + } + } + separator.generate_contacts(); } @@ -1486,7 +1495,7 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized(); - if (!separator.test_axis(normal, !face_B->backface_collision)) { + if (!separator.test_axis(normal)) { return; } @@ -1591,6 +1600,17 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr } } + if (!face_B->backface_collision) { + if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) { + if (face_B->invert_backface_collision) { + separator.best_axis = separator.best_axis.bounce(normal); + } else { + // Just ignore backface collision. + return; + } + } + } + separator.generate_contacts(); } @@ -1802,7 +1822,7 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D & Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized(); - if (!separator.test_axis(normal, !face_B->backface_collision)) { + if (!separator.test_axis(normal)) { return; } @@ -1858,6 +1878,17 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D & } } + if (!face_B->backface_collision) { + if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) { + if (face_B->invert_backface_collision) { + separator.best_axis = separator.best_axis.bounce(normal); + } else { + // Just ignore backface collision. + return; + } + } + } + separator.generate_contacts(); } @@ -1952,7 +1983,7 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized(); // Face B normal. - if (!separator.test_axis(normal, !face_B->backface_collision)) { + if (!separator.test_axis(normal)) { return; } @@ -2034,6 +2065,17 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D } } + if (!face_B->backface_collision) { + if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) { + if (face_B->invert_backface_collision) { + separator.best_axis = separator.best_axis.bounce(normal); + } else { + // Just ignore backface collision. + return; + } + } + } + separator.generate_contacts(); } @@ -2174,7 +2216,7 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized(); - if (!separator.test_axis(normal, !face_B->backface_collision)) { + if (!separator.test_axis(normal)) { return; } @@ -2266,6 +2308,17 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf } } + if (!face_B->backface_collision) { + if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) { + if (face_B->invert_backface_collision) { + separator.best_axis = separator.best_axis.bounce(normal); + } else { + // Just ignore backface collision. + return; + } + } + } + separator.generate_contacts(); } diff --git a/servers/physics_3d/godot_shape_3d.cpp b/servers/physics_3d/godot_shape_3d.cpp index b520ee45c7..5364a9833d 100644 --- a/servers/physics_3d/godot_shape_3d.cpp +++ b/servers/physics_3d/godot_shape_3d.cpp @@ -430,7 +430,7 @@ Vector3 GodotBoxShape3D::get_closest_point_to(const Vector3 &p_point) const { if (outside == 1) { //use plane if only one side matches Vector3 n; - n[i] = SGN(p_point[i]); + n[i] = SIGN(p_point[i]); Plane p(n, half_extents[i]); min_point = p.project(p_point); @@ -1401,7 +1401,7 @@ bool GodotConcavePolygonShape3D::_cull(int p_idx, _CullParams *p_params) const { return false; } -void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const { +void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const { // make matrix local to concave if (faces.size() == 0) { return; @@ -1416,6 +1416,7 @@ void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_ GodotFaceShape3D face; // use this to send in the callback face.backface_collision = backface_collision; + face.invert_backface_collision = p_invert_backface_collision; _CullParams params; params.aabb = local_aabb; @@ -1961,7 +1962,7 @@ void GodotHeightMapShape3D::_get_cell(const Vector3 &p_point, int &r_x, int &r_y r_z = (clamped_point.z < 0.0) ? (clamped_point.z - 0.5) : (clamped_point.z + 0.5); } -void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const { +void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const { if (heights.is_empty()) { return; } @@ -1988,7 +1989,8 @@ void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callb int end_z = MIN(depth - 1, aabb_max[2]); GodotFaceShape3D face; - face.backface_collision = true; + face.backface_collision = !p_invert_backface_collision; + face.invert_backface_collision = p_invert_backface_collision; for (int z = start_z; z < end_z; z++) { for (int x = start_x; x < end_x; x++) { diff --git a/servers/physics_3d/godot_shape_3d.h b/servers/physics_3d/godot_shape_3d.h index 7a32b69166..43319510d4 100644 --- a/servers/physics_3d/godot_shape_3d.h +++ b/servers/physics_3d/godot_shape_3d.h @@ -107,7 +107,7 @@ public: // Returns true to stop the query. typedef bool (*QueryCallback)(void *p_userdata, GodotShape3D *p_convex); - virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const = 0; + virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const = 0; GodotConcaveShape3D() {} }; @@ -370,7 +370,7 @@ public: virtual bool intersect_point(const Vector3 &p_point) const override; virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override; - virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override; + virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override; virtual Vector3 get_moment_of_inertia(real_t p_mass) const override; @@ -433,7 +433,7 @@ public: virtual bool intersect_point(const Vector3 &p_point) const override; virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override; - virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override; + virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override; virtual Vector3 get_moment_of_inertia(real_t p_mass) const override; @@ -448,6 +448,7 @@ struct GodotFaceShape3D : public GodotShape3D { Vector3 normal; //cache Vector3 vertex[3]; bool backface_collision = false; + bool invert_backface_collision = false; virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_CONCAVE_POLYGON; } diff --git a/servers/physics_3d/godot_soft_body_3d.cpp b/servers/physics_3d/godot_soft_body_3d.cpp index b8e9ab4fb9..231b8686f5 100644 --- a/servers/physics_3d/godot_soft_body_3d.cpp +++ b/servers/physics_3d/godot_soft_body_3d.cpp @@ -964,12 +964,6 @@ void GodotSoftBody3D::apply_forces(const LocalVector<GodotArea3D *> &p_wind_area } } -void GodotSoftBody3D::_compute_area_gravity(const GodotArea3D *p_area) { - Vector3 area_gravity; - p_area->compute_gravity(get_transform().get_origin(), area_gravity); - gravity += area_gravity; -} - Vector3 GodotSoftBody3D::_compute_area_windforce(const GodotArea3D *p_area, const Face *p_face) { real_t wfm = p_area->get_wind_force_magnitude(); real_t waf = p_area->get_wind_attenuation_factor(); @@ -987,12 +981,12 @@ void GodotSoftBody3D::predict_motion(real_t p_delta) { ERR_FAIL_COND(!get_space()); - int ac = areas.size(); - bool gravity_done = false; + Vector3 gravity; LocalVector<GodotArea3D *> wind_areas; + int ac = areas.size(); if (ac) { areas.sort(); const AreaCMP *aa = &areas[0]; diff --git a/servers/physics_3d/godot_soft_body_3d.h b/servers/physics_3d/godot_soft_body_3d.h index c03951959f..5198186b5d 100644 --- a/servers/physics_3d/godot_soft_body_3d.h +++ b/servers/physics_3d/godot_soft_body_3d.h @@ -101,8 +101,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D { real_t drag_coefficient = 0.0; // [0,1] LocalVector<int> pinned_vertices; - Vector3 gravity; - SelfList<GodotSoftBody3D> active_list; Set<GodotConstraint3D *> constraints; @@ -113,7 +111,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D { uint64_t island_step = 0; - _FORCE_INLINE_ void _compute_area_gravity(const GodotArea3D *p_area); _FORCE_INLINE_ Vector3 _compute_area_windforce(const GodotArea3D *p_area, const Face *p_face); public: diff --git a/servers/physics_3d/godot_space_3d.cpp b/servers/physics_3d/godot_space_3d.cpp index e2f90b90ad..f503273c88 100644 --- a/servers/physics_3d/godot_space_3d.cpp +++ b/servers/physics_3d/godot_space_3d.cpp @@ -507,15 +507,17 @@ bool GodotPhysicsDirectSpaceState3D::rest_info(const ShapeParameters &p_paramete GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid); ERR_FAIL_COND_V(!shape, 0); - real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR; - AABB aabb = p_parameters.transform.xform(shape->get_aabb()); aabb = aabb.grow(p_parameters.margin); int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results); _RestCallbackData rcd; - rcd.min_allowed_depth = min_contact_depth; + + // Allowed depth can't be lower than motion length, in order to handle contacts at low speed. + real_t motion_length = p_parameters.motion.length(); + real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR; + rcd.min_allowed_depth = MIN(motion_length, min_contact_depth); for (int i = 0; i < amount; i++) { if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) { diff --git a/servers/physics_3d/godot_step_3d.cpp b/servers/physics_3d/godot_step_3d.cpp index 331d65df49..5453c4415c 100644 --- a/servers/physics_3d/godot_step_3d.cpp +++ b/servers/physics_3d/godot_step_3d.cpp @@ -220,6 +220,9 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations) p_space->set_active_objects(active_count); + // Update the broadphase to register collision pairs. + p_space->update(); + { //profile profile_endtime = OS::get_singleton()->get_ticks_usec(); p_space->set_elapsed_time(GodotSpace3D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime); @@ -398,7 +401,6 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations) all_constraints.clear(); - p_space->update(); p_space->unlock(); _step++; } 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 22e3bbdb00..6d85c1f4c1 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -334,6 +334,10 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p const GeometryInstanceSurfaceDataCache *surf = p_params->elements[i]; const RenderElementInfo &element_info = p_params->element_info[i]; + if ((p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_SPECULAR) && !(surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) { + continue; // Objects with "Depth-prepass" transparency are included in both render lists, but should only be rendered in the transparent pass + } + if (surf->owner->instance_count == 0) { continue; } @@ -958,20 +962,20 @@ void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, con bool uses_gi = false; float fade_alpha = 1.0; - if (p_render_list == RENDER_LIST_OPAQUE) { - if (inst->fade_near || inst->fade_far) { - float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin); - if (inst->fade_far && fade_dist > inst->fade_far_begin) { - fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin)); - } else if (inst->fade_near && fade_dist < inst->fade_near_end) { - fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin)); - } + if (inst->fade_near || inst->fade_far) { + float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin); + if (inst->fade_far && fade_dist > inst->fade_far_begin) { + fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin)); + } else if (inst->fade_near && fade_dist < inst->fade_near_end) { + fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin)); } + } - fade_alpha *= inst->force_alpha * inst->parent_fade_alpha; + fade_alpha *= inst->force_alpha * inst->parent_fade_alpha; - flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT); + flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT); + if (p_render_list == RENDER_LIST_OPAQUE) { // Setup GI if (inst->lightmap_instance.is_valid()) { int32_t lightmap_cull_index = -1; @@ -1206,6 +1210,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co scene_state.ubo.viewport_size[0] = vp_he.x; scene_state.ubo.viewport_size[1] = vp_he.y; scene_state.ubo.directional_light_count = 0; + scene_state.ubo.opaque_prepass_threshold = 0.99f; Size2i screen_size; RID opaque_framebuffer; @@ -1449,6 +1454,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co RD::get_singleton()->draw_command_begin_label("Render Opaque Pass"); scene_state.ubo.directional_light_count = p_render_data->directional_light_count; + scene_state.ubo.opaque_prepass_threshold = 0.0f; _setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, p_render_data->render_buffers.is_valid()); @@ -1632,6 +1638,7 @@ void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const Page render_data.render_info = p_render_info; scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1; + scene_state.ubo.opaque_prepass_threshold = 0.1f; _setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index); @@ -1718,6 +1725,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con _update_render_base_uniform_set(); scene_state.ubo.dual_paraboloid_side = 0; + scene_state.ubo.opaque_prepass_threshold = 0.0; _setup_environment(&render_data, true, Vector2(1, 1), true, Color(), false, false); @@ -1755,6 +1763,7 @@ void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform scene_state.ubo.dual_paraboloid_side = 0; scene_state.ubo.material_uv2_mode = false; + scene_state.ubo.opaque_prepass_threshold = 0.0f; _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); @@ -1798,6 +1807,7 @@ void RenderForwardClustered::_render_uv2(const PagedArray<GeometryInstance *> &p scene_state.ubo.dual_paraboloid_side = 0; scene_state.ubo.material_uv2_mode = true; + scene_state.ubo.opaque_prepass_threshold = 0.0; _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); 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 2ba9558128..7707d77296 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h @@ -257,7 +257,8 @@ class RenderForwardClustered : public RendererSceneRenderRD { float roughness_limiter_amount; float roughness_limiter_limit; - uint32_t roughness_limiter_pad[2]; + float opaque_prepass_threshold; + uint32_t roughness_limiter_pad; float sdf_to_bounds[16]; 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 6ae76c9bf2..768bd1de9d 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 @@ -585,6 +585,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin actions.renames["CUSTOM1"] = "custom1_attrib"; actions.renames["CUSTOM2"] = "custom2_attrib"; actions.renames["CUSTOM3"] = "custom3_attrib"; + actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB"; // not implemented but need these just in case code is in the shaders actions.renames["VIEW_INDEX"] = "0"; @@ -649,6 +650,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n"; actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n"; actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n"; + actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n"; bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley"); 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 f23a386acf..445623fb86 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -483,6 +483,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color scene_state.ubo.viewport_size[0] = vp_he.x; scene_state.ubo.viewport_size[1] = vp_he.y; scene_state.ubo.directional_light_count = 0; + scene_state.ubo.opaque_prepass_threshold = 0.0; // We can only use our full subpass approach if we're: // - not reading from SCREEN_TEXTURE/DEPTH_TEXTURE @@ -793,7 +794,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color if (using_subpass_transparent) { RD::FramebufferFormatID fb_format = RD::get_singleton()->framebuffer_get_format(framebuffer); - RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count); + RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR_TRANSPARENT, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count); render_list_params.framebuffer_format = fb_format; if ((uint32_t)render_list_params.element_count > render_list_thread_threshold && false) { // secondary command buffers need more testing at this time @@ -897,6 +898,7 @@ void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedAr render_data.lod_distance_multiplier = p_lod_distance_multiplier; scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1; + scene_state.ubo.opaque_prepass_threshold = 0.1; _setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index); @@ -978,6 +980,7 @@ void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, c scene_state.ubo.dual_paraboloid_side = 0; scene_state.ubo.material_uv2_mode = false; + scene_state.ubo.opaque_prepass_threshold = 0.0f; RenderDataRD render_data; render_data.cam_projection = p_cam_projection; @@ -1089,6 +1092,7 @@ void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const _update_render_base_uniform_set(); scene_state.ubo.dual_paraboloid_side = 0; + scene_state.ubo.opaque_prepass_threshold = 0.0; RenderDataRD render_data; render_data.cam_projection = p_cam_projection; @@ -1447,13 +1451,13 @@ void RenderForwardMobile::_fill_render_list(RenderListType p_render_list, const } // ADD Element - if (p_pass_mode == PASS_MODE_COLOR) { + if (p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) { #ifdef DEBUG_ENABLED bool force_alpha = unlikely(get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_OVERDRAW); #else bool force_alpha = false; #endif - if (!force_alpha && (surf->flags & (GeometryInstanceSurfaceDataCache::FLAG_PASS_DEPTH | GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE))) { + if (!force_alpha && (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) { rl->add_element(surf); } if (force_alpha || (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_ALPHA)) { 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 74bfe16557..485d08b589 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h @@ -292,7 +292,8 @@ protected: float roughness_limiter_amount; float roughness_limiter_limit; - uint32_t roughness_limiter_pad[2]; + float opaque_prepass_threshold; + uint32_t roughness_limiter_pad; // Fog uint32_t fog_enabled; 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 3a6c945052..e6d9a60f94 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 @@ -573,6 +573,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p actions.renames["CUSTOM1"] = "custom1_attrib"; actions.renames["CUSTOM2"] = "custom2_attrib"; actions.renames["CUSTOM3"] = "custom3_attrib"; + actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB"; actions.renames["VIEW_INDEX"] = "ViewIndex"; actions.renames["VIEW_MONO_LEFT"] = "0"; @@ -636,6 +637,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n"; actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n"; actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n"; + actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n"; bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley"); if (!force_lambert) { diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp index 64be176d24..04753d7a9b 100644 --- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp @@ -2868,7 +2868,7 @@ bool RendererStorageRD::MaterialData::update_parameters_uniform_set(const Map<St //check whether buffer changed if (p_uniform_dirty && ubo_data.size()) { - update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), false); + update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), true); RD::get_singleton()->buffer_update(uniform_buffer, 0, ubo_data.size(), ubo_data.ptrw(), p_barrier); } diff --git a/servers/rendering/renderer_rd/shader_compiler_rd.cpp b/servers/rendering/renderer_rd/shader_compiler_rd.cpp index 215959bb6a..f7c8ca1487 100644 --- a/servers/rendering/renderer_rd/shader_compiler_rd.cpp +++ b/servers/rendering/renderer_rd/shader_compiler_rd.cpp @@ -227,6 +227,13 @@ static String _prestr(SL::DataPrecision p_pres, bool p_force_highp = false) { return ""; } +static String _constr(bool p_is_const) { + if (p_is_const) { + return "const "; + } + return ""; +} + static String _qualstr(SL::ArgumentQualifier p_qual) { switch (p_qual) { case SL::ARGUMENT_QUALIFIER_IN: @@ -417,9 +424,7 @@ void ShaderCompilerRD::_dump_function_deps(const SL::ShaderNode *p_node, const S if (i > 0) { header += ", "; } - if (fnode->arguments[i].is_const) { - header += "const "; - } + header += _constr(fnode->arguments[i].is_const); if (fnode->arguments[i].type == SL::TYPE_STRUCT) { header += _qualstr(fnode->arguments[i].qualifier) + _mkid(fnode->arguments[i].type_str) + " " + _mkid(fnode->arguments[i].name); } else { @@ -791,7 +796,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge for (int i = 0; i < pnode->vconstants.size(); i++) { const SL::ShaderNode::Constant &cnode = pnode->vconstants[i]; String gcode; - gcode += "const "; + gcode += _constr(true); gcode += _prestr(cnode.precision, ShaderLanguage::is_float_type(cnode.type)); if (cnode.type == SL::TYPE_STRUCT) { gcode += _mkid(cnode.type_str); @@ -875,9 +880,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge SL::VariableDeclarationNode *vdnode = (SL::VariableDeclarationNode *)p_node; String declaration; - if (vdnode->is_const) { - declaration += "const "; - } + declaration += _constr(vdnode->is_const); if (vdnode->datatype == SL::TYPE_STRUCT) { declaration += _mkid(vdnode->struct_name); } else { @@ -997,9 +1000,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge case SL::Node::TYPE_ARRAY_DECLARATION: { SL::ArrayDeclarationNode *adnode = (SL::ArrayDeclarationNode *)p_node; String declaration; - if (adnode->is_const) { - declaration += "const "; - } + declaration += _constr(adnode->is_const); if (adnode->datatype == SL::TYPE_STRUCT) { declaration += _mkid(adnode->struct_name); } else { diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl index 83c02d08a7..8e33610ae2 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl @@ -6,6 +6,8 @@ #include "scene_forward_clustered_inc.glsl" +#define SHADER_IS_SRGB false + /* INPUT ATTRIBS */ layout(location = 0) in vec3 vertex_attrib; @@ -358,6 +360,8 @@ void main() { #VERSION_DEFINES +#define SHADER_IS_SRGB false + /* Specialization Constants (Toggles) */ layout(constant_id = 0) const bool sc_use_forward_gi = false; @@ -691,7 +695,7 @@ void main() { #endif // ALPHA_ANTIALIASING_EDGE_USED #ifdef USE_OPAQUE_PREPASS - if (alpha < opaque_prepass_threshold) { + if (alpha < scene_data.opaque_prepass_threshold) { discard; } #endif // USE_OPAQUE_PREPASS @@ -1707,7 +1711,7 @@ void main() { #ifdef USE_OPAQUE_PREPASS - if (alpha < opaque_prepass_threshold) { + if (alpha < scene_data.opaque_prepass_threshold) { discard; } diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl index c8489f2137..be29cf4f58 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl @@ -208,7 +208,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData { float roughness_limiter_amount; float roughness_limiter_limit; - uvec2 roughness_limiter_pad; + float opaque_prepass_threshold; + uint roughness_limiter_pad; mat4 sdf_to_bounds; diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl index e2fec87d2a..e92fbecfd0 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl @@ -7,6 +7,8 @@ /* Include our forward mobile UBOs definitions etc. */ #include "scene_forward_mobile_inc.glsl" +#define SHADER_IS_SRGB false + /* INPUT ATTRIBS */ layout(location = 0) in vec3 vertex_attrib; @@ -370,6 +372,8 @@ void main() { #VERSION_DEFINES +#define SHADER_IS_SRGB false + /* Specialization Constants */ #if !defined(MODE_RENDER_DEPTH) @@ -701,7 +705,7 @@ void main() { #endif // ALPHA_ANTIALIASING_EDGE_USED #ifdef USE_OPAQUE_PREPASS - if (alpha < opaque_prepass_threshold) { + if (alpha < scene_data.opaque_prepass_threshold) { discard; } #endif // USE_OPAQUE_PREPASS @@ -1345,7 +1349,7 @@ void main() { #endif blur_shadow(shadow); - light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, + light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha, #ifdef LIGHT_BACKLIGHT_USED backlight, #endif @@ -1358,7 +1362,7 @@ void main() { #endif */ #ifdef LIGHT_RIM_USED - rim, rim_tint, albedo, + rim, rim_tint, #endif #ifdef LIGHT_CLEARCOAT_USED clearcoat, clearcoat_gloss, @@ -1369,9 +1373,6 @@ void main() { #ifdef USE_SOFT_SHADOW directional_lights.data[i].size, #endif -#ifdef USE_SHADOW_TO_OPACITY - alpha, -#endif diffuse_light, specular_light); } @@ -1475,7 +1476,7 @@ void main() { #ifdef USE_OPAQUE_PREPASS - if (alpha < opaque_prepass_threshold) { + if (alpha < scene_data.opaque_prepass_threshold) { discard; } diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl index eb8fb49598..a9a4fce82a 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl @@ -168,7 +168,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData { mediump float roughness_limiter_amount; mediump float roughness_limiter_limit; - uvec2 roughness_limiter_pad; + mediump float opaque_prepass_threshold; + uint roughness_limiter_pad; bool fog_enabled; highp float fog_density; diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index e338e526a0..7b4e2d34df 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -644,6 +644,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { 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); if (instance->lightmap_sh.size() == 9) { scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, instance->lightmap_sh.ptr()); } @@ -839,6 +840,8 @@ void RendererSceneCull::instance_geometry_set_transparency(RID p_instance, float Instance *instance = instance_owner.get_or_null(p_instance); ERR_FAIL_COND(!instance); + instance->transparency = p_transparency; + 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); diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h index de22bc1328..2bfcfd462c 100644 --- a/servers/rendering/renderer_scene_cull.h +++ b/servers/rendering/renderer_scene_cull.h @@ -439,17 +439,18 @@ public: RID self; //scenario stuff DynamicBVH::ID indexer_id; - int32_t array_index; + int32_t array_index = -1; int32_t visibility_index = -1; - float visibility_range_begin; - float visibility_range_end; - float visibility_range_begin_margin; - float visibility_range_end_margin; + float visibility_range_begin = 0.0f; + float visibility_range_end = 0.0f; + float visibility_range_begin_margin = 0.0f; + float visibility_range_end_margin = 0.0f; RS::VisibilityRangeFadeMode visibility_range_fade_mode = RS::VISIBILITY_RANGE_FADE_DISABLED; Instance *visibility_parent = nullptr; Set<Instance *> visibility_dependencies; - uint32_t visibility_dependencies_depth; - Scenario *scenario; + uint32_t visibility_dependencies_depth = 0; + float transparency = 0.0f; + Scenario *scenario = nullptr; SelfList<Instance> scenario_item; //aabb stuff diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index d803d5fcf8..f865aab677 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -4920,7 +4920,9 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons bool error = false; Node *n = func->arguments[argidx]; if (n->type == Node::TYPE_CONSTANT || n->type == Node::TYPE_OPERATOR) { - error = true; + if (!call_function->arguments[i].is_const) { + error = true; + } } else if (n->type == Node::TYPE_ARRAY) { ArrayNode *an = static_cast<ArrayNode *>(n); if (an->call_expression != nullptr || an->is_const) { @@ -7188,11 +7190,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun //check return type BlockNode *b = p_block; - if (b && b->parent_function && p_function_info.main_function) { - _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name)); - return ERR_PARSE_ERROR; - } - while (b && !b->parent_function) { b = b->parent_block; } @@ -7202,6 +7199,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun return ERR_BUG; } + if (b && b->parent_function && p_function_info.main_function) { + _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name)); + return ERR_PARSE_ERROR; + } + String return_struct_name = String(b->parent_function->return_struct_name); String array_size_string; diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp index 0a7523e33a..d6d98b4f8f 100644 --- a/servers/text/text_server_extension.cpp +++ b/servers/text/text_server_extension.cpp @@ -260,6 +260,7 @@ void TextServerExtension::_bind_methods() { GDVIRTUAL_BIND(_shaped_text_draw, "shaped", "canvas", "pos", "clip_l", "clip_r", "color"); GDVIRTUAL_BIND(_shaped_text_draw_outline, "shaped", "canvas", "pos", "clip_l", "clip_r", "outline_size", "color"); + GDVIRTUAL_BIND(_shaped_text_get_grapheme_bounds, "shaped", "pos"); GDVIRTUAL_BIND(_shaped_text_next_grapheme_pos, "shaped", "pos"); GDVIRTUAL_BIND(_shaped_text_prev_grapheme_pos, "shaped", "pos"); @@ -1292,6 +1293,14 @@ void TextServerExtension::shaped_text_draw_outline(RID p_shaped, RID p_canvas, c shaped_text_draw_outline(p_shaped, p_canvas, p_pos, p_clip_l, p_clip_r, p_outline_size, p_color); } +Vector2 TextServerExtension::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const { + Vector2 ret; + if (GDVIRTUAL_CALL(_shaped_text_get_grapheme_bounds, p_shaped, p_pos, ret)) { + return ret; + } + return TextServer::shaped_text_get_grapheme_bounds(p_shaped, p_pos); +} + int TextServerExtension::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const { int ret; if (GDVIRTUAL_CALL(_shaped_text_next_grapheme_pos, p_shaped, p_pos, ret)) { diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h index e419b4055d..a2dbd25e05 100644 --- a/servers/text/text_server_extension.h +++ b/servers/text/text_server_extension.h @@ -428,8 +428,10 @@ public: GDVIRTUAL6C(_shaped_text_draw, RID, RID, const Vector2 &, float, float, const Color &); GDVIRTUAL7C(_shaped_text_draw_outline, RID, RID, const Vector2 &, float, float, int, const Color &); + virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const override; virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const override; virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const override; + GDVIRTUAL2RC(Vector2, _shaped_text_get_grapheme_bounds, RID, int); GDVIRTUAL2RC(int, _shaped_text_next_grapheme_pos, RID, int); GDVIRTUAL2RC(int, _shaped_text_prev_grapheme_pos, RID, int); diff --git a/servers/text_server.cpp b/servers/text_server.cpp index 9034239fe0..8fc1b56ae4 100644 --- a/servers/text_server.cpp +++ b/servers/text_server.cpp @@ -403,6 +403,7 @@ void TextServer::_bind_methods() { ClassDB::bind_method(D_METHOD("shaped_text_hit_test_grapheme", "shaped", "coords"), &TextServer::shaped_text_hit_test_grapheme); ClassDB::bind_method(D_METHOD("shaped_text_hit_test_position", "shaped", "coords"), &TextServer::shaped_text_hit_test_position); + ClassDB::bind_method(D_METHOD("shaped_text_get_grapheme_bounds", "shaped", "pos"), &TextServer::shaped_text_get_grapheme_bounds); ClassDB::bind_method(D_METHOD("shaped_text_next_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_next_grapheme_pos); ClassDB::bind_method(D_METHOD("shaped_text_prev_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_prev_grapheme_pos); @@ -1120,6 +1121,27 @@ int TextServer::shaped_text_hit_test_position(RID p_shaped, real_t p_coords) con return 0; } +Vector2 TextServer::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const { + int v_size = shaped_text_get_glyph_count(p_shaped); + const Glyph *glyphs = shaped_text_get_glyphs(p_shaped); + + real_t off = 0.0f; + for (int i = 0; i < v_size; i++) { + if ((glyphs[i].count > 0) && ((glyphs[i].index != 0) || ((glyphs[i].flags & GRAPHEME_IS_SPACE) == GRAPHEME_IS_SPACE))) { + if (glyphs[i].start <= p_pos && glyphs[i].end >= p_pos) { + real_t advance = 0.f; + for (int j = 0; j < glyphs[i].count; j++) { + advance += glyphs[i + j].advance; + } + return Vector2(off, off + advance); + } + } + off += glyphs[i].advance * glyphs[i].repeat; + } + + return Vector2(); +} + int TextServer::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const { int v_size = shaped_text_get_glyph_count(p_shaped); const Glyph *glyphs = shaped_text_get_glyphs(p_shaped); diff --git a/servers/text_server.h b/servers/text_server.h index 4f55f881e6..5c994feaae 100644 --- a/servers/text_server.h +++ b/servers/text_server.h @@ -438,6 +438,7 @@ public: virtual int shaped_text_hit_test_grapheme(RID p_shaped, float p_coords) const; // Return grapheme index. virtual int shaped_text_hit_test_position(RID p_shaped, float p_coords) const; // Return caret/selection position. + virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const; virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const; virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const; diff --git a/tests/core/io/test_pck_packer.h b/tests/core/io/test_pck_packer.h index ae51d58522..75a4abffbe 100644 --- a/tests/core/io/test_pck_packer.h +++ b/tests/core/io/test_pck_packer.h @@ -40,17 +40,11 @@ namespace TestPCKPacker { -// Dummy 64-character encryption key (since it's required). -constexpr const char *ENCRYPTION_KEY = "0000000000000000000000000000000000000000000000000000000000000000"; - TEST_CASE("[PCKPacker] Pack an empty PCK file") { PCKPacker pck_packer; const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck"); CHECK_MESSAGE( - pck_packer.pck_start( - output_pck_path, - 32, - ENCRYPTION_KEY) == OK, + pck_packer.pck_start(output_pck_path) == OK, "Starting a PCK file should return an OK error code."); CHECK_MESSAGE( @@ -70,14 +64,27 @@ TEST_CASE("[PCKPacker] Pack an empty PCK file") { "The generated empty PCK file shouldn't be too large."); } +TEST_CASE("[PCKPacker] Pack empty with zero alignment invalid") { + PCKPacker pck_packer; + const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck"); + ERR_PRINT_OFF; + CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 0) != OK, "PCK with zero alignment should fail."); + ERR_PRINT_ON; +} + +TEST_CASE("[PCKPacker] Pack empty with invalid key") { + PCKPacker pck_packer; + const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck"); + ERR_PRINT_OFF; + CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 32, "") != OK, "PCK with invalid key should fail."); + ERR_PRINT_ON; +} + TEST_CASE("[PCKPacker] Pack a PCK file with some files and directories") { PCKPacker pck_packer; const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_with_files.pck"); CHECK_MESSAGE( - pck_packer.pck_start( - output_pck_path, - 32, - ENCRYPTION_KEY) == OK, + pck_packer.pck_start(output_pck_path) == OK, "Starting a PCK file should return an OK error code."); const String base_dir = OS::get_singleton()->get_executable_path().get_base_dir(); diff --git a/thirdparty/README.md b/thirdparty/README.md index 25d2e1cfe3..6ebcffb7ae 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -8,7 +8,7 @@ readability. ## basis_universal - Upstream: https://github.com/BinomialLLC/basis_universal -- Version: git (ba1c3e40f1d434ebaf9a167b44e9b11d2bf0f765, 2021) +- Version: git (646a9f826131cb0b9e14b5e4740874808315f83a, 2021) - License: Apache 2.0 Files extracted from upstream source: @@ -176,14 +176,14 @@ Files extracted from upstream source: ## graphite - Upstream: https://github.com/silnrsi/graphite -- Version: 1.3.14 (92f59dcc52f73ce747f1cdc831579ed2546884aa, 2020) +- Version: 1.3.14 (80c52493ef42e6fe605a69dcddd2a691cd8a1380, 2021) - License: MPL-2.0 Files extracted from upstream source: - the `include` folder -- the `src` folder -- `COPYING`, `ChangeLog` +- the `src` folder (minus `CMakeLists.txt` and `files.mk`) +- `COPYING` ## harfbuzz @@ -235,14 +235,14 @@ Files extracted from upstream source: ## libogg - Upstream: https://www.xiph.org/ogg -- Version: git (c8fca6b4a02d695b1ceea39b330d4406001c03ed, 2019) +- Version: 1.3.5 (e1774cd77f471443541596e09078e78fdc342e4f, 2021) - License: BSD-3-Clause Files extracted from upstream source: - `src/*.{c,h}` -- `include/ogg/*.h` in ogg/ -- COPYING +- `include/ogg/*.h` in `ogg/` (run `configure` to generate `config_types.h`) +- `COPYING` ## libpng @@ -279,26 +279,26 @@ on top of the 1.1.1 source (not included in any stable release yet). ## libvorbis - Upstream: https://www.xiph.org/vorbis -- Version: 1.3.6 (2018) +- Version: 1.3.7 (0657aee69dec8508a0011f47f3b69d7538e9d262, 2020) - License: BSD-3-Clause Files extracted from upstream source: -- `src/*` except from: `lookups.pl`, `Makefile.*` -- `include/vorbis/*.h` as vorbis/ -- COPYING +- `lib/*` except from: `lookups.pl`, `Makefile.*` +- `include/vorbis/*.h` as `vorbis/` +- `COPYING` ## libwebp - Upstream: https://chromium.googlesource.com/webm/libwebp/ -- Version: 1.1.0 (d7844e9762b61c9638c263657bd49e1690184832, 2020) +- Version: 1.2.1 (9ce5843dbabcfd3f7c39ec7ceba9cbeb213cbfdf, 2021) - License: BSD-3-Clause Files extracted from upstream source: -- `src/*` except from: .am, .rc and .in files -- AUTHORS, COPYING, PATENTS +- `src/*` except from: `.am`, `.rc` and `.in` files +- `AUTHORS`, `COPYING`, `PATENTS` Important: The files `utils/bit_reader_utils.{c,h}` have Godot-made changes to ensure they build for Javascript/HTML5. Those @@ -333,7 +333,7 @@ File extracted from upstream release tarball: ## meshoptimizer - Upstream: https://github.com/zeux/meshoptimizer -- Version: git (f5d83e879c48f8664783a69b4f50711d27549b66, 2021) +- Version: git (f4c356d79fadb99cbf432f7e199d823581b0e19e, 2021) - License: MIT Files extracted from upstream repository: @@ -350,22 +350,19 @@ found in the `patches` directory. ## miniupnpc - Upstream: https://github.com/miniupnp/miniupnp -- Version: 2.2.2 (81029a860baf1f727903e5b85307903b3f40cbc8, 2021) +- Version: 2.2.3 (2df8120326ed4246e049a7a6de707539604cd514, 2021) - License: BSD-3-Clause Files extracted from upstream source: -- All `*.c` and `*.h` files from `miniupnpc` to `thirdparty/miniupnpc/miniupnpc` +- Copy `miniupnpc/src` and `miniupnpc/include` to `thirdparty/miniupnpc` - Remove the following test or sample files: - `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test* wingenminiupnpcstrings.c` + `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test*` - `LICENSE` -The only modified file is `miniupnpcstrings.h`, which was created for Godot -(it is usually autogenerated by cmake). Bump the version number for miniupnpc in that -file when upgrading. - -Note: The following upstream patch has been applied, remove this notice on next update. -https://github.com/miniupnp/miniupnp/commit/3a08dd4b89af2e9effa22a136bac86f2f306fd79 +The only modified file is `src/miniupnpcstrings.h`, which was created for Godot +(it is usually autogenerated by cmake). Bump the version number for miniupnpc in +that file when upgrading. ## minizip @@ -506,7 +503,7 @@ Patch files are provided in `oidn/patches/`. ## pcre2 - Upstream: http://www.pcre.org -- Version: 10.36 (r1288, 2020) +- Version: 10.39 (35fee4193b852cb504892352bd0155de10809889, 2021) - License: BSD-3-Clause Files extracted from upstream source: @@ -599,18 +596,21 @@ comments and a patch is provided in the squish/ folder. ## tinyexr - Upstream: https://github.com/syoyo/tinyexr -- Version: 1.0.0 (e4b7840d9448b7d57a88384ce26143004f3c0c71, 2020) +- Version: 1.0.1 (67010eae802211202d0797f4df2b809f4ba7442c, 2021) - License: BSD-3-Clause Files extracted from upstream source: - `tinyexr.{cc,h}` +The `tinyexr.cc` file was modified to include `zlib.h` which we provide, +instead of `miniz.h` as an external dependency. + ## vhacd - Upstream: https://github.com/kmammou/v-hacd -- Version: git (b07958e18e01d504e3af80eeaeb9f033226533d7, 2019) +- Version: git (1a49edf29c69039df15286181f2f27e17ceb9aef, 2020) - License: BSD-3-Clause Files extracted from upstream source: @@ -670,25 +670,29 @@ Patches in the `patches` directory should be re-applied after updates. ## wslay - Upstream: https://github.com/tatsuhiro-t/wslay -- Version: 1.1.1 (c9a84aa6df8512584c77c8cd15be9536b89c35aa, 2020) +- Version: 1.1.1+git (45d22583b488f79d5a4e598cc7675c191c5ab53f, 2021) - License: MIT File extracted from upstream release tarball: -- All `*.c` and `*.h` in `lib/` and `lib/includes/` -- `wslay.h` has a small Godot addition to fix MSVC build. - See `thirdparty/wslay/msvcfix.diff` +- Run `cmake .` to generate `config.h` and `wslayver.h`. + Contents might need tweaking for Godot, review diff. +- All `*.c` and `*.h` files from `lib/` +- All `*.h` in `lib/includes/wslay/` as `wslay/` +- `wslay/wslay.h` has a small Godot addition to fix MSVC build. + See `patches/msvcfix.diff` +- `COPYING` ## xatlas - Upstream: https://github.com/jpcy/xatlas -- Version: git (5571fc7ef0d06832947c0a935ccdcf083f7a9264, 2020) +- Version: git (ec707faeac3b95e6b416076a9509718cce105b6a, 2021) - License: MIT Files extracted from upstream source: -- `xatlas.{cpp,h}` +- `source/xatlas/xatlas.{cpp,h}` - `LICENSE` @@ -706,11 +710,11 @@ Files extracted from upstream source: ## zstd - Upstream: https://github.com/facebook/zstd -- Version: 1.4.8 (97a3da1df009d4dc67251de0c4b1c9d7fe286fc1, 2020) +- Version: 1.5.0 (a488ba114ec17ea1054b9057c26a046fc122b3b6, 2021) - License: BSD-3-Clause Files extracted from upstream source: -- lib/{common/,compress/,decompress/,zstd.h} -- LICENSE +- `lib/{common/,compress/,decompress/,zstd.h,zstd_errors.h}` +- `LICENSE` diff --git a/thirdparty/basis_universal/encoder/apg_bmp.c b/thirdparty/basis_universal/encoder/apg_bmp.c index ef3d015e40..d342b20fc8 100644 --- a/thirdparty/basis_universal/encoder/apg_bmp.c +++ b/thirdparty/basis_universal/encoder/apg_bmp.c @@ -247,7 +247,7 @@ unsigned char* apg_bmp_read( const char* filename, int* w, int* h, unsigned int* } // allocate memory for the output pixels block. cast to size_t in case width and height are both the max of 65536 and n_dst_chans > 1 - unsigned char* dst_img_ptr = malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans ); + unsigned char* dst_img_ptr = (unsigned char*)malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans ); if ( !dst_img_ptr ) { free( record.data ); return NULL; @@ -480,7 +480,7 @@ unsigned int apg_bmp_write( const char* filename, unsigned char* pixels_ptr, int dib_hdr.bitmask_b = 0x0000FF00; } - uint8_t* dst_pixels_ptr = malloc( dst_pixels_padded_sz ); + uint8_t* dst_pixels_ptr = (uint8_t*)malloc( dst_pixels_padded_sz ); if ( !dst_pixels_ptr ) { return 0; } { size_t dst_byte_idx = 0; diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp index 06aa7eb8b1..22fdfa603f 100644 --- a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp +++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp @@ -174,9 +174,8 @@ static void astc_init() } // range } -static inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w) +static inline uint32_t astc_interpolate_linear(uint32_t l, uint32_t h, uint32_t w) { - // This is for linear values, not sRGB. l = (l << 8) | l; h = (h << 8) | h; uint32_t k = (l * (64 - w) + h * w + 32) >> 6; @@ -230,7 +229,7 @@ void bc7enc_compress_block_init() { uint32_t high = (h << 4) | h; - const int k = astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -259,7 +258,7 @@ void bc7enc_compress_block_init() { uint32_t high = (h << 4) | h; - const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -288,7 +287,7 @@ void bc7enc_compress_block_init() { uint32_t high = g_astc_sorted_order_unquant[7][h].m_unquant; - const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -317,7 +316,7 @@ void bc7enc_compress_block_init() { uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant; - const int k = astc_interpolate(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -346,7 +345,7 @@ void bc7enc_compress_block_init() { uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant; - const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -375,7 +374,7 @@ void bc7enc_compress_block_init() { uint32_t high = g_astc_sorted_order_unquant[11][h].m_unquant; - const int k = astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); + const int k = astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); const int err = (k - c) * (k - c); if (err < best.m_error) @@ -650,7 +649,7 @@ static uint64_t pack_astc_4bit_3bit_to_one_color(const color_cell_compressor_par uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i]; uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i]; - p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); + p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); } p.m_c[3] = 255; @@ -689,7 +688,7 @@ static uint64_t pack_astc_4bit_2bit_to_one_color_rgba(const color_cell_compresso uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i]; uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i]; - p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); + p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); } uint64_t total_err = 0; @@ -728,7 +727,7 @@ static uint64_t pack_astc_range7_2bit_to_one_color(const color_cell_compressor_p uint32_t low = g_astc_sorted_order_unquant[7][pResults->m_low_endpoint.m_c[i]].m_unquant; uint32_t high = g_astc_sorted_order_unquant[7][pResults->m_high_endpoint.m_c[i]].m_unquant; - p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); + p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); } p.m_c[3] = 255; @@ -768,7 +767,7 @@ static uint64_t pack_astc_range13_2bit_to_one_color(const color_cell_compressor_ uint32_t low = g_astc_sorted_order_unquant[13][pResults->m_low_endpoint.m_c[i]].m_unquant; uint32_t high = g_astc_sorted_order_unquant[13][pResults->m_high_endpoint.m_c[i]].m_unquant; - p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); + p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); } uint64_t total_err = 0; @@ -807,7 +806,7 @@ static uint64_t pack_astc_range11_5bit_to_one_color(const color_cell_compressor_ uint32_t low = g_astc_sorted_order_unquant[11][pResults->m_low_endpoint.m_c[i]].m_unquant; uint32_t high = g_astc_sorted_order_unquant[11][pResults->m_high_endpoint.m_c[i]].m_unquant; - p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); + p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); } uint64_t total_err = 0; @@ -863,7 +862,7 @@ static uint64_t evaluate_solution(const color_quad_u8 *pLow, const color_quad_u8 for (uint32_t i = 1; i < (N - 1); i++) { for (uint32_t j = 0; j < nc; j++) - weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i])); + weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate_linear(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i])); } } else @@ -1300,7 +1299,7 @@ void check_best_overall_error(const color_cell_compressor_params *pParams, color for (uint32_t i = 1; i < pParams->m_num_selector_weights - 1; i++) for (uint32_t c = 0; c < 4; c++) - colors[i].m_c[c] = (uint8_t)astc_interpolate(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]); + colors[i].m_c[c] = (uint8_t)astc_interpolate_linear(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]); uint64_t total_err = 0; for (uint32_t p = 0; p < pParams->m_num_pixels; p++) @@ -1815,10 +1814,10 @@ uint64_t color_cell_compression_est_astc( weightedColors[num_weights - 1] = highColor; for (uint32_t i = 1; i < (num_weights - 1); i++) { - weightedColors[i].m_c[0] = (uint8_t)astc_interpolate(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]); - weightedColors[i].m_c[1] = (uint8_t)astc_interpolate(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]); - weightedColors[i].m_c[2] = (uint8_t)astc_interpolate(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]); - weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255; + weightedColors[i].m_c[0] = (uint8_t)astc_interpolate_linear(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]); + weightedColors[i].m_c[1] = (uint8_t)astc_interpolate_linear(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]); + weightedColors[i].m_c[2] = (uint8_t)astc_interpolate_linear(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]); + weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate_linear(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255; } // Compute dots and thresholds diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.h b/thirdparty/basis_universal/encoder/basisu_bc7enc.h index 23469912e2..8d8b7888ca 100644 --- a/thirdparty/basis_universal/encoder/basisu_bc7enc.h +++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.h @@ -12,6 +12,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +#pragma once #include "basisu_enc.h" #include "../transcoder/basisu_transcoder_uastc.h" diff --git a/thirdparty/basis_universal/encoder/basisu_comp.cpp b/thirdparty/basis_universal/encoder/basisu_comp.cpp index dc4ae11539..10f96cec4a 100644 --- a/thirdparty/basis_universal/encoder/basisu_comp.cpp +++ b/thirdparty/basis_universal/encoder/basisu_comp.cpp @@ -467,7 +467,10 @@ namespace basisu return false; } - printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height()); + if (m_params.m_status_output) + { + printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height()); + } // Optionally load another image and put a grayscale version of it into the alpha channel. if ((source_file_index < m_params.m_source_alpha_filenames.size()) && (m_params.m_source_alpha_filenames[source_file_index].size())) @@ -1427,7 +1430,10 @@ namespace basisu return false; } - printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str()); + if (m_params.m_status_output) + { + printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str()); + } } size_t comp_size = 0; diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp index f02fb62c11..daaf65badc 100644 --- a/thirdparty/basis_universal/encoder/basisu_enc.cpp +++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp @@ -195,7 +195,7 @@ namespace basisu { QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(pTicks)); } -#elif defined(__APPLE__) +#elif defined(__APPLE__) || defined(__OpenBSD__) #include <sys/time.h> inline void query_counter(timer_ticks* pTicks) { @@ -1779,8 +1779,6 @@ namespace basisu return nullptr; } - const uint32_t bytes_per_line = hdr.m_width * tga_bytes_per_pixel; - const uint8_t *pSrc = pBuf + sizeof(tga_header); uint32_t bytes_remaining = buf_size - sizeof(tga_header); diff --git a/thirdparty/basis_universal/encoder/basisu_enc.h b/thirdparty/basis_universal/encoder/basisu_enc.h index 05c95cbc3b..0ce011452d 100644 --- a/thirdparty/basis_universal/encoder/basisu_enc.h +++ b/thirdparty/basis_universal/encoder/basisu_enc.h @@ -1634,6 +1634,14 @@ namespace basisu if ((!l_weight) || (!r_weight)) { + l_children.resize(0); + new_l_child.set(0.0f); + l_ttsum = 0.0f; + l_weight = 0; + r_children.resize(0); + new_r_child.set(0.0f); + r_ttsum = 0.0f; + r_weight = 0; TrainingVectorType firstVec; for (uint32_t i = 0; i < node.m_training_vecs.size(); i++) { @@ -1660,7 +1668,7 @@ namespace basisu } } - if (!l_weight) + if ((!l_weight) || (!r_weight)) return false; } diff --git a/thirdparty/basis_universal/encoder/basisu_resampler.cpp b/thirdparty/basis_universal/encoder/basisu_resampler.cpp index e193ce83ff..f4cedf0031 100644 --- a/thirdparty/basis_universal/encoder/basisu_resampler.cpp +++ b/thirdparty/basis_universal/encoder/basisu_resampler.cpp @@ -15,14 +15,6 @@ #include "basisu_resampler.h" #include "basisu_resampler_filters.h" -#ifndef max -#define max(a, b) (((a) > (b)) ? (a) : (b)) -#endif - -#ifndef min -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#endif - #define RESAMPLER_DEBUG 0 namespace basisu diff --git a/thirdparty/basis_universal/encoder/cppspmd_sse.h b/thirdparty/basis_universal/encoder/cppspmd_sse.h index b39cb82a5f..9a97eeb695 100644 --- a/thirdparty/basis_universal/encoder/cppspmd_sse.h +++ b/thirdparty/basis_universal/encoder/cppspmd_sse.h @@ -1327,33 +1327,15 @@ struct spmd_kernel CPPSPMD_FORCE_INLINE float reduce_add(vfloat v) { __m128 k3210 = _mm_castsi128_ps(blendv_mask_epi32(_mm_setzero_si128(), _mm_castps_si128(v.m_value), m_exec.m_mask)); - -//#if CPPSPMD_SSE2 -#if 1 - // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026 - __m128 shuf = _mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(2, 3, 0, 1)); - __m128 sums = _mm_add_ps(k3210, shuf); - shuf = _mm_movehl_ps(shuf, sums); - sums = _mm_add_ss(sums, shuf); - return _mm_cvtss_f32(sums); -#else - // This is pretty slow. - __m128 a = _mm_hadd_ps(k3210, k3210); - __m128 b = _mm_hadd_ps(a, a); - return extractf_ps_x(b); -#endif + __m128 temp = _mm_add_ps(_mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210); + return _mm_cvtss_f32(_mm_add_ss(_mm_movehl_ps(temp, temp), temp)); } - + CPPSPMD_FORCE_INLINE int reduce_add(vint v) { __m128i k3210 = blendv_mask_epi32(_mm_setzero_si128(), v.m_value, m_exec.m_mask); - - // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026 - __m128i shuf = _mm_shuffle_epi32(k3210, _MM_SHUFFLE(2, 3, 0, 1)); - __m128i sums = _mm_add_epi32(k3210, shuf); - shuf = _mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(shuf), _mm_castsi128_ps(sums))); - sums = _mm_add_epi32(sums, shuf); - return extract_x(sums); + __m128i temp = _mm_add_epi32(_mm_shuffle_epi32(k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210); + return extract_x(_mm_add_epi32(_mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(temp), _mm_castsi128_ps(temp))), temp)); } #include "cppspmd_math_declares.h" @@ -1686,6 +1668,12 @@ CPPSPMD_FORCE_INLINE vint uniform_shift_right_epi16(const vint& a, const vint& b CPPSPMD_FORCE_INLINE vint undefined_vint() { return vint{ _mm_undefined_si128() }; } CPPSPMD_FORCE_INLINE vfloat undefined_vfloat() { return vfloat{ _mm_undefined_ps() }; } +CPPSPMD_FORCE_INLINE vint vint_lane_set(int v0, int v1, int v2, int v3) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; } +CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set(float v0, float v1, float v2, float v3) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; } + +CPPSPMD_FORCE_INLINE vint vint_lane_set_r(int v3, int v2, int v1, int v0) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; } +CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set_r(float v3, float v2, float v1, float v0) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; } + // control is an 8-bit immediate value containing 4 2-bit indices which shuffles the int32's in each 128-bit lane. #define VINT_LANE_SHUFFLE_EPI32(a, control) vint(_mm_shuffle_epi32((a).m_value, control)) diff --git a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp index 29eb3c0d55..0b3733385d 100644 --- a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp +++ b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp @@ -10778,8 +10778,6 @@ namespace basist return false; } - const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; - if (decode_flags & cDecodeFlagsPVRTCDecodeToNextPow2) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: cDecodeFlagsPVRTCDecodeToNextPow2 currently unsupported\n"); @@ -17336,7 +17334,6 @@ namespace basist bool ktx2_transcoder::decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data) { - const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData; const uint64_t comp_size = m_levels[level_index].m_byte_length; const uint64_t uncomp_size = m_levels[level_index].m_uncompressed_byte_length; @@ -17361,6 +17358,7 @@ namespace basist if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD) { #if BASISD_SUPPORT_KTX2_ZSTD + const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData; size_t actualUncompSize = ZSTD_decompress(uncomp_data.data(), (size_t)uncomp_size, pComp_data, (size_t)comp_size); if (ZSTD_isError(actualUncompSize)) { diff --git a/thirdparty/certs/ca-certificates.crt b/thirdparty/certs/ca-certificates.crt index 7d5ea3bef1..7f89e81d01 100644 --- a/thirdparty/certs/ca-certificates.crt +++ b/thirdparty/certs/ca-certificates.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Mon Jul 5 21:36:52 2021 GMT +## Certificate data from Mozilla as of: Mon Nov 1 15:39:58 2021 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.28. -## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f +## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f ## @@ -381,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -2713,7 +2693,8 @@ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj -----END CERTIFICATE----- -# emSign Root CA - C1 +emSign Root CA - C1 +=================== -----BEGIN CERTIFICATE----- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp @@ -2733,7 +2714,8 @@ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= -----END CERTIFICATE----- -# emSign ECC Root CA - C3 +emSign ECC Root CA - C3 +======================= -----BEGIN CERTIFICATE----- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF @@ -2747,7 +2729,8 @@ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== -----END CERTIFICATE----- -# Hongkong Post Root CA 3 +Hongkong Post Root CA 3 +======================= -----BEGIN CERTIFICATE----- MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK @@ -2778,7 +2761,8 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB dBb9HxEGmpv0 -----END CERTIFICATE----- -# Entrust Root Certification Authority - G4 +Entrust Root Certification Authority - G4 +========================================= -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu @@ -2811,7 +2795,8 @@ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G kcpG2om3PVODLAgfi49T3f+sHw== -----END CERTIFICATE----- -# Microsoft ECC Root Certificate Authority 2017 +Microsoft ECC Root Certificate Authority 2017 +============================================= -----BEGIN CERTIFICATE----- MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND @@ -2826,7 +2811,8 @@ Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= -----END CERTIFICATE----- -# Microsoft RSA Root Certificate Authority 2017 +Microsoft RSA Root Certificate Authority 2017 +============================================= -----BEGIN CERTIFICATE----- MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg @@ -2856,7 +2842,8 @@ c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D 5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E -----END CERTIFICATE----- -# e-Szigno Root CA 2017 +e-Szigno Root CA 2017 +===================== -----BEGIN CERTIFICATE----- MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt @@ -2871,7 +2858,8 @@ tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO svxyqltZ+efcMQ== -----END CERTIFICATE----- -# certSIGN Root CA G2 +certSIGN Root CA G2 +=================== -----BEGIN CERTIFICATE----- MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy @@ -2899,7 +2887,8 @@ NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N 0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= -----END CERTIFICATE----- -# Trustwave Global Certification Authority +Trustwave Global Certification Authority +======================================== -----BEGIN CERTIFICATE----- MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 @@ -2930,7 +2919,8 @@ Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu 29FpHOTKyeC2nOnOcXHebD8WpHk= -----END CERTIFICATE----- -# Trustwave Global ECC P256 Certification Authority +Trustwave Global ECC P256 Certification Authority +================================================= -----BEGIN CERTIFICATE----- MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI @@ -2945,7 +2935,8 @@ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 -----END CERTIFICATE----- -# Trustwave Global ECC P384 Certification Authority +Trustwave Global ECC P384 Certification Authority +================================================= -----BEGIN CERTIFICATE----- MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI @@ -2961,7 +2952,8 @@ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== -----END CERTIFICATE----- -# NAVER Global Root Certification Authority +NAVER Global Root Certification Authority +========================================= -----BEGIN CERTIFICATE----- MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD @@ -2991,7 +2983,8 @@ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg kpzNNIaRkPpkUZ3+/uul9XXeifdy -----END CERTIFICATE----- -# AC RAIZ FNMT-RCM SERVIDORES SEGUROS +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== -----BEGIN CERTIFICATE----- MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy @@ -3006,7 +2999,8 @@ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= -----END CERTIFICATE----- -# GlobalSign Root R46 +GlobalSign Root R46 +=================== -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv @@ -3035,7 +3029,8 @@ DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 QEUxeCp6 -----END CERTIFICATE----- -# GlobalSign Root E46 +GlobalSign Root E46 +=================== -----BEGIN CERTIFICATE----- MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg @@ -3049,7 +3044,8 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ CAezNIm8BZ/3Hobui3A= -----END CERTIFICATE----- -# GLOBALTRUST 2020 +GLOBALTRUST 2020 +================ -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT @@ -3078,7 +3074,8 @@ YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== -----END CERTIFICATE----- -# ANF Secure Server Root CA +ANF Secure Server Root CA +========================= -----BEGIN CERTIFICATE----- MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4 NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv @@ -3109,7 +3106,8 @@ g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3 r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= -----END CERTIFICATE----- -# Certum EC-384 CA +Certum EC-384 CA +================ -----BEGIN CERTIFICATE----- MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy @@ -3124,7 +3122,8 @@ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= -----END CERTIFICATE----- -# Certum Trusted Root CA +Certum Trusted Root CA +====================== -----BEGIN CERTIFICATE----- MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g @@ -3153,3 +3152,81 @@ WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb -----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG +A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj +dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw +NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD +ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz +2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b +bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7 +NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd +gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW +VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f +Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ +juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas +DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS +VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI +04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl +0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd +Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY +YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp +adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x +xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP +jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM +MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z +ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r +AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- diff --git a/thirdparty/graphite/ChangeLog b/thirdparty/graphite/ChangeLog deleted file mode 100644 index e36110e1c1..0000000000 --- a/thirdparty/graphite/ChangeLog +++ /dev/null @@ -1,238 +0,0 @@ -1.3.14 - . Bug fixes - . Allow features to be hidden (for aliases) - . Move to python3 - . Rename doc files from .txt to .asc - -1.3.13 - . Resolve minor spacing issue in rtl non-overlap kerning - . python3 for graphite.py - . Better fuzzing - . Better building on windows - -1.3.12 - . Graphite no longer does dumb rendering for fonts with no smarts - . Segment caching code removed. Anything attempting to use the segment cache gets given a regular face instead - . Add libfuzzer support - . Builds now require C++11 - . Improvements to Windows 64 bit builds - . Support different versions of python including 32 bit and python 3 - . Various minor bug fixes - -1.3.11 - . Fixes due to security review - . Minor collision avoidance fixes - . Fix LZ4 decompressor against high compression - -1.3.10 - . Address floating point build parameters to give consistent positioning results across platforms - . Various bug fixes - -1.3.9 - . Add Collision COLL_ISSPACE to allow for visible spaces in collision avoidance - . Add segment and pass direction information to tracing output - . Bug fix rule length testing in 32-bit - . Increase slanted margin distances for collision avoidance - . Change kerning algorithm to simple outline expansion. Seems to make no visible difference. - . Add trace2svg to test tools - -1.3.8 - . Various bug fixes arising from fuzzing - . Fix regression that stopped piglatin from working - . Make collision avoidance kerning give more regular results - . Minor modification to clustering algorithm to handle variable width chars - -1.3.7 - . Bug fixes - . Start to deprecate SegCache. This will be going away in a later release. - -1.3.6 - . Bug fixes - -1.3.5 - . Bug fixes - . Security bug fix - . Fix ARM misalignment problem - . Track latest cmake - -1.3.4 - . Transition from Mercurial to Git - . Bug fixes - . Fix Collision Kerning ignoring some diacritics - . Handle pass bits 16-31 to speed up fonts with > 16 passes - . Various minor fuzz bug fixes - . Make Coverity happy - . Add GR_FALLTHROUGH macro for clang c++11 - -1.3.3 - . Slight speed up in Collision Avoidance - . Remove dead bidi code - . Bug fixes - . Between pass bidi reorderings and at the end - . Decompressor fuzz bugs - . Other fuzz bugs - -1.3.2 - . Remove full bidi. All segments are assumed to be single directioned. - . Bug fixes: - . Decompressor corner cases - . Various fuzz bugs - -1.3.1 - . Deprecation warning: Full bidi support is about to be deprecated. Make contact - if this impacts you. - . Change compression block format slightly to conform to LZ4 - . Bug fixes: - . Handle mono direction text with diacritics consistently. Fonts - now see the direction they expect consistently and bidi now - gives expected results. - . Fixed lots of fuzz bugs - . Coverity cleanups - . Build now works for clang and/or asan and/or afl etc. - -1.3.0 - . Add collision avoidance - . Shift Collider - . Kern Collider - . Octabox outlines and subboxes - . Add compressed Silf and Glat table support - . Bug fixes: - . Stop loops forming in the child, sibling tree - . Handle bidi mirroring correctly if no bidi occurring - -1.2.4 - . Face failure now has error code reporting via debug logging - . can now call gr_start_logging(NULL, fname) - . gr2fonttest --alltrace added - . Format 14 table support - . Not done. To be handled entirely in the compiler - . Bidi support for Unicode 6.3 Isolating direction controls - . Fonts no longer require a glyf/loca table. In such cases the bounding box is always 0. - . Clang ASAN build support added for testing. - . Handle out of memory sanely. - . Documentation improvements - . Bug fixes: - . Enforce fonts having to store glyph attributes by monotonically increasing attribute number - . zeropadding was not getting called on feature tags - . automatic associations for unassociated characters - . use direct engine on Mac - . various extreme case reading 1 past the end errors fixed - . remove tabs from sources so that it becomes readable again - -1.2.3 - . Bug fixes only: - . fix byte swapping when testing cmap subtable lengths - . work around armel compilation problems with conditional operators - . fix pseudoglyph support for advance and bbox - -1.2.2 - . Add support for passKeySlot (makes Charis 2x faster) up to 32 passes - . Add telemetry output to json if enabled in build GRAPHITE2_TELEMETRY - . Shrink font memory footprint particularly in the fsm - . Add -S to comparerenderer - . Bug fixes: - . Fix shift.x being reversed for rtl text - . Fix faulty fallback justification - . Fix bad cmap handling - . Support compiling on old Solaris where bidi attributes clash with register names - . Follow the crowd in using Windows.h - -1.2.1 - . Bug fixes: - . Allow glyph reattachment - . Allow signed glyph attributes - . Various build problems with MacOS, old gcc versions, etc. - . Various overrun read errors fixed - -1.2.0 - . API Changes: - . Added Windows friendly gr_start_logging and gr_stop_logging, now per face - . Added gr_make_face_with_ops, gr_make_face_with_seg_cache_and_ops - . Added gr_make_font_with_ops - . Added gr_face_is_char_supported - . Added gr_face_info to give info to apps about face capabilities - . Deprecated gr_make_face, gr_make_face_with_seg_cache, gr_make_font_with_advance_fn - . Deprecated graphite_start_logging and graphite_stop_logging - . These functions are stubbed now and do nothing, but do compile and link. - . Bump API version to 3 - . Add C# wrapper to contrib - . Handle justification information in a font and do something useful with it - . Builds clang clean (has done for a while) - . Bug fixes - . Windows build and bug fixes - . Add extra information to json debug output - . Added windows build documentation - . Added freetype sample code and test - -1.1.3 - . Default build has GRAPHITE2_COMPARE_RENDERER to OFF to reduce dependencies - . Builds on Mac with clang - . Debug output improvements - . Tidy up perl wrappers - . Fuzz tester improvements - . Various bug fixes for bad font handling - -1.1.2 - . Support feature ids < 4 chars when space padded for inclusion in FF 14. - . More fuzztesting and removal of causes of valgrind bad reads and sigabrts - . Remove contrib/android into its own repo (http://hg.palaso.org/grandroid) - . Update comparerenderer to latest harfbuzzng api - -1.1.1 - . Missing Log.h included - . perl wrappers updated - -1.1.0 - . Refactored debug output to use json - . Renamed VM_MACHINE_TYPE to GRAPHITE2_VM_TYPE - . Renamed DISABLE_SEGCACHE to GRAPHITE2_NSEGCACE - . Renamed DISBALE_FILE_FACE to GRAPHITE2_NFILEFACE - . Renamed ENABLE_COMPARE_RENDERER to GRAPHTIE2_COMPARE_RENDERER - . Renamed DOXYGEN_CONFIG to GRAPHITE2_DOXYGEN_CONFIG - . Renamed GR2_CUSTOM_HEADER to GRAPHITE2_CUSTOM_HEADER - . Renamed GR2_EXPORTING to GRAPHITE2_EXPORTING - . Added GRAPHITE2_STATIC for static only builds - . Added GRAPHITE2_NTRACING to compile out tracing code - . Documented GRAPHITE2_{EXPORTING,STATIC,NTRACING} in hacking.txt - . Bump libtool version to 2.1.0 - . dumb font rendering works - . slot user attributes are now signed rather than unsigned - . add support for long class maps - . Rename perl library to avoid nameclash on Windows - . Various robustness fixes - . Moved internal .h files into src/inc - . Parallelise fuzztest - . General build improvements, particularly on Windows - -1.0.3 - . Fix UTF16 surrogate support - . script and lang tags may be space padded or null padded - . Remove need for WORDS_BIGENDIAN, do it all automatically - . Remove all #include <new>. Use CLASS_NEW_DELETE instead. - . Fix comparerenderer to work with current hbng - . Add valgrind to fuzztest to ensure good memory use at all times - . Fix new fuzztest exposed bugs. - . Fix bugs exposed by Mozilla security review - . Add continuous integration build on Windows support - -1.0.2 - . Fix Windows build - . Comparerenderer uses hbng enforcing ot rendering - . Add Bidi .hasChar support and refactor mirroring code - . Make cmake default Release rather than debug - . Don't compile in a boat load of TtfUtil that isn't used, saving 15% of binary - . Chase the FSF around its latest office moves - . WORDS_BIGENDIAN is set at the top so tests now pass on ppc, etc. - . More words in the manual - -1.0.1 - . Release is the default build in cmake now. - . Refactor cmake build to not rebuild things so much. - . Include a missing file - . Remove -nostdlibs, making gcc happy everywhere - . Update comparerenderer to latest hbng interface - . Add changelog - -1.0.0 - . First major release of perfect code! - diff --git a/thirdparty/graphite/src/Pass.cpp b/thirdparty/graphite/src/Pass.cpp index db31c22d46..47ae2064f7 100644 --- a/thirdparty/graphite/src/Pass.cpp +++ b/thirdparty/graphite/src/Pass.cpp @@ -1056,12 +1056,17 @@ float Pass::resolveKern(Segment *seg, Slot *slotFix, GR_MAYBE_UNUSED Slot *start ymin = min(by + bbb.bl.y, ymin); for (nbor = slotFix->next(); nbor; nbor = nbor->next()) { - if (nbor->isChildOf(base)) - continue; if (!gc.check(nbor->gid())) return 0.; const Rect &bb = seg->theGlyphBBoxTemporary(nbor->gid()); SlotCollision *cNbor = seg->collisionInfo(nbor); + const float nby = nbor->origin().y + cNbor->shift().y; + if (nbor->isChildOf(base)) + { + ymax = max(nby + bb.tr.y, ymax); + ymin = min(nby + bb.bl.y, ymin); + continue; + } if ((bb.bl.y == 0.f && bb.tr.y == 0.f) || (cNbor->flags() & SlotCollision::COLL_ISSPACE)) { if (m_kernColls == InWord) diff --git a/thirdparty/libogg/framing.c b/thirdparty/libogg/framing.c index 83601199ad..724d116d7f 100644 --- a/thirdparty/libogg/framing.c +++ b/thirdparty/libogg/framing.c @@ -597,9 +597,14 @@ char *ogg_sync_buffer(ogg_sync_state *oy, long size){ if(size>oy->storage-oy->fill){ /* We need to extend the internal buffer */ - long newsize=size+oy->fill+4096; /* an extra page to be nice */ + long newsize; void *ret; + if(size>INT_MAX-4096-oy->fill){ + ogg_sync_clear(oy); + return NULL; + } + newsize=size+oy->fill+4096; /* an extra page to be nice */ if(oy->data) ret=_ogg_realloc(oy->data,newsize); else @@ -1564,7 +1569,7 @@ void test_pack(const int *pl, const int **headers, int byteskip, byteskipcount=byteskip; } - ogg_sync_wrote(&oy,next-buf); + ogg_sync_wrote(&oy,(long)(next-buf)); while(1){ int ret=ogg_sync_pageout(&oy,&og_de); diff --git a/thirdparty/libogg/ogg/config_types.h b/thirdparty/libogg/ogg/config_types.h index 4dc8393fdc..1a87df6423 100644 --- a/thirdparty/libogg/ogg/config_types.h +++ b/thirdparty/libogg/ogg/config_types.h @@ -1,7 +1,20 @@ #ifndef __CONFIG_TYPES_H__ #define __CONFIG_TYPES_H__ -#include <stdint.h> +/* these are filled in by configure or cmake*/ +#define INCLUDE_INTTYPES_H 1 +#define INCLUDE_STDINT_H 1 +#define INCLUDE_SYS_TYPES_H 1 + +#if INCLUDE_INTTYPES_H +# include <inttypes.h> +#endif +#if INCLUDE_STDINT_H +# include <stdint.h> +#endif +#if INCLUDE_SYS_TYPES_H +# include <sys/types.h> +#endif typedef int16_t ogg_int16_t; typedef uint16_t ogg_uint16_t; diff --git a/thirdparty/libvorbis/COPYING b/thirdparty/libvorbis/COPYING index 153b926a15..fb456a87bd 100644 --- a/thirdparty/libvorbis/COPYING +++ b/thirdparty/libvorbis/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 2002-2018 Xiph.org Foundation +Copyright (c) 2002-2020 Xiph.org Foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/thirdparty/libvorbis/analysis.c b/thirdparty/libvorbis/analysis.c index 0e11a167be..14919737eb 100644 --- a/thirdparty/libvorbis/analysis.c +++ b/thirdparty/libvorbis/analysis.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/backends.h b/thirdparty/libvorbis/backends.h index 22809d46d5..670b0b902e 100644 --- a/thirdparty/libvorbis/backends.h +++ b/thirdparty/libvorbis/backends.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/barkmel.c b/thirdparty/libvorbis/barkmel.c index 4b19935f30..f833c30211 100644 --- a/thirdparty/libvorbis/barkmel.c +++ b/thirdparty/libvorbis/barkmel.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/bitrate.c b/thirdparty/libvorbis/bitrate.c index 96055140f7..132553cbee 100644 --- a/thirdparty/libvorbis/bitrate.c +++ b/thirdparty/libvorbis/bitrate.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/bitrate.h b/thirdparty/libvorbis/bitrate.h index 655a68cc09..48fa150596 100644 --- a/thirdparty/libvorbis/bitrate.h +++ b/thirdparty/libvorbis/bitrate.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/block.c b/thirdparty/libvorbis/block.c index db245b3e69..6a50da0843 100644 --- a/thirdparty/libvorbis/block.c +++ b/thirdparty/libvorbis/block.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/books/coupled/res_books_51.h b/thirdparty/libvorbis/books/coupled/res_books_51.h index 47df4b221b..eb569c6f04 100644 --- a/thirdparty/libvorbis/books/coupled/res_books_51.h +++ b/thirdparty/libvorbis/books/coupled/res_books_51.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** * diff --git a/thirdparty/libvorbis/books/coupled/res_books_stereo.h b/thirdparty/libvorbis/books/coupled/res_books_stereo.h index 61d934046d..7b53cb972b 100644 --- a/thirdparty/libvorbis/books/coupled/res_books_stereo.h +++ b/thirdparty/libvorbis/books/coupled/res_books_stereo.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/books/floor/floor_books.h b/thirdparty/libvorbis/books/floor/floor_books.h index 67d5f31a3b..d26664f766 100644 --- a/thirdparty/libvorbis/books/floor/floor_books.h +++ b/thirdparty/libvorbis/books/floor/floor_books.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h index 3d658ec470..107e22f9e3 100644 --- a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h +++ b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/codebook.c b/thirdparty/libvorbis/codebook.c index 78672e222d..7a0c206783 100644 --- a/thirdparty/libvorbis/codebook.c +++ b/thirdparty/libvorbis/codebook.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/codebook.h b/thirdparty/libvorbis/codebook.h index 08440c6962..7d4e2aae4f 100644 --- a/thirdparty/libvorbis/codebook.h +++ b/thirdparty/libvorbis/codebook.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/codec_internal.h b/thirdparty/libvorbis/codec_internal.h index e522be18da..2ecf5e5c73 100644 --- a/thirdparty/libvorbis/codec_internal.h +++ b/thirdparty/libvorbis/codec_internal.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/envelope.c b/thirdparty/libvorbis/envelope.c index da75237542..22d39aa6e0 100644 --- a/thirdparty/libvorbis/envelope.c +++ b/thirdparty/libvorbis/envelope.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/envelope.h b/thirdparty/libvorbis/envelope.h index f466efde8a..2ef60a82ca 100644 --- a/thirdparty/libvorbis/envelope.h +++ b/thirdparty/libvorbis/envelope.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/floor0.c b/thirdparty/libvorbis/floor0.c index 443c0e5a96..f4a6d4d559 100644 --- a/thirdparty/libvorbis/floor0.c +++ b/thirdparty/libvorbis/floor0.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/floor1.c b/thirdparty/libvorbis/floor1.c index 673e954c53..c4fe3ea7e7 100644 --- a/thirdparty/libvorbis/floor1.c +++ b/thirdparty/libvorbis/floor1.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/highlevel.h b/thirdparty/libvorbis/highlevel.h index 337b75bfa4..7690e3ebfb 100644 --- a/thirdparty/libvorbis/highlevel.h +++ b/thirdparty/libvorbis/highlevel.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/info.c b/thirdparty/libvorbis/info.c index 3fbb7c757a..f2e39e387e 100644 --- a/thirdparty/libvorbis/info.c +++ b/thirdparty/libvorbis/info.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -19,7 +19,6 @@ #include <stdlib.h> #include <string.h> -#include <ctype.h> #include <ogg/ogg.h> #include "vorbis/codec.h" #include "codec_internal.h" @@ -30,8 +29,8 @@ #include "misc.h" #include "os.h" -#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.6" -#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20180316 (Now 100% fewer shells)" +#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.7" +#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20200704 (Reducing Environment)" /* helpers */ static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){ @@ -47,6 +46,10 @@ static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){ } } +static int _v_toupper(int c) { + return (c >= 'a' && c <= 'z') ? (c & ~('a' - 'A')) : c; +} + void vorbis_comment_init(vorbis_comment *vc){ memset(vc,0,sizeof(*vc)); } @@ -78,7 +81,7 @@ void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *con static int tagcompare(const char *s1, const char *s2, int n){ int c=0; while(c < n){ - if(toupper(s1[c]) != toupper(s2[c])) + if(_v_toupper(s1[c]) != _v_toupper(s2[c])) return !0; c++; } @@ -203,6 +206,7 @@ void vorbis_info_clear(vorbis_info *vi){ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){ codec_setup_info *ci=vi->codec_setup; + int bs; if(!ci)return(OV_EFAULT); vi->version=oggpack_read(opb,32); @@ -215,8 +219,12 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){ vi->bitrate_nominal=(ogg_int32_t)oggpack_read(opb,32); vi->bitrate_lower=(ogg_int32_t)oggpack_read(opb,32); - ci->blocksizes[0]=1<<oggpack_read(opb,4); - ci->blocksizes[1]=1<<oggpack_read(opb,4); + bs = oggpack_read(opb,4); + if(bs<0)goto err_out; + ci->blocksizes[0]=1<<bs; + bs = oggpack_read(opb,4); + if(bs<0)goto err_out; + ci->blocksizes[1]=1<<bs; if(vi->rate<1)goto err_out; if(vi->channels<1)goto err_out; diff --git a/thirdparty/libvorbis/lookup.c b/thirdparty/libvorbis/lookup.c index 1cc1f88ee9..7cd01a44d3 100644 --- a/thirdparty/libvorbis/lookup.c +++ b/thirdparty/libvorbis/lookup.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/lookup.h b/thirdparty/libvorbis/lookup.h index 4bc0f3a206..ec05014f44 100644 --- a/thirdparty/libvorbis/lookup.h +++ b/thirdparty/libvorbis/lookup.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/lookup_data.h b/thirdparty/libvorbis/lookup_data.h index 5de3cfdc7e..7935715a70 100644 --- a/thirdparty/libvorbis/lookup_data.h +++ b/thirdparty/libvorbis/lookup_data.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/lpc.c b/thirdparty/libvorbis/lpc.c index 798f4cf076..877da47f8e 100644 --- a/thirdparty/libvorbis/lpc.c +++ b/thirdparty/libvorbis/lpc.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/lpc.h b/thirdparty/libvorbis/lpc.h index 9cc79451b6..4f59e6d32d 100644 --- a/thirdparty/libvorbis/lpc.h +++ b/thirdparty/libvorbis/lpc.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/lsp.c b/thirdparty/libvorbis/lsp.c index 8588054515..8afa305f50 100644 --- a/thirdparty/libvorbis/lsp.c +++ b/thirdparty/libvorbis/lsp.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -15,9 +15,10 @@ The LSP generation code is taken (with minimal modification and a few bugfixes) from "On the Computation of the LSP Frequencies" by Joseph Rothweiler (see http://www.rothweiler.us for contact info). + The paper is available at: - http://www.myown1.com/joe/lsf + https://web.archive.org/web/20110810174000/http://home.myfairpoint.net/vzenxj75/myown1/joe/lsf/index.html ********************************************************************/ diff --git a/thirdparty/libvorbis/lsp.h b/thirdparty/libvorbis/lsp.h index 8a8d10e978..68b38daf16 100644 --- a/thirdparty/libvorbis/lsp.h +++ b/thirdparty/libvorbis/lsp.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/mapping0.c b/thirdparty/libvorbis/mapping0.c index ccb4493d4c..efa0fbcd93 100644 --- a/thirdparty/libvorbis/mapping0.c +++ b/thirdparty/libvorbis/mapping0.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/masking.h b/thirdparty/libvorbis/masking.h index 955e18c719..7a196a37eb 100644 --- a/thirdparty/libvorbis/masking.h +++ b/thirdparty/libvorbis/masking.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/mdct.c b/thirdparty/libvorbis/mdct.c index f3f1ed805b..2a0ff8d01b 100644 --- a/thirdparty/libvorbis/mdct.c +++ b/thirdparty/libvorbis/mdct.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/mdct.h b/thirdparty/libvorbis/mdct.h index 3b8c9ba4a2..ceaea617a3 100644 --- a/thirdparty/libvorbis/mdct.h +++ b/thirdparty/libvorbis/mdct.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/misc.h b/thirdparty/libvorbis/misc.h index 13788445a3..eac5160e88 100644 --- a/thirdparty/libvorbis/misc.h +++ b/thirdparty/libvorbis/misc.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/floor_all.h b/thirdparty/libvorbis/modes/floor_all.h index 20928aac87..2e3d4a5012 100644 --- a/thirdparty/libvorbis/modes/floor_all.h +++ b/thirdparty/libvorbis/modes/floor_all.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/psych_11.h b/thirdparty/libvorbis/modes/psych_11.h index cc5eea2402..9d8ed357ee 100644 --- a/thirdparty/libvorbis/modes/psych_11.h +++ b/thirdparty/libvorbis/modes/psych_11.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/psych_16.h b/thirdparty/libvorbis/modes/psych_16.h index 477cb4d90f..49cbf7c4b2 100644 --- a/thirdparty/libvorbis/modes/psych_16.h +++ b/thirdparty/libvorbis/modes/psych_16.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/psych_44.h b/thirdparty/libvorbis/modes/psych_44.h index 6c9eaa4e5f..d15509b71d 100644 --- a/thirdparty/libvorbis/modes/psych_44.h +++ b/thirdparty/libvorbis/modes/psych_44.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/psych_8.h b/thirdparty/libvorbis/modes/psych_8.h index 277db8436c..a19817f760 100644 --- a/thirdparty/libvorbis/modes/psych_8.h +++ b/thirdparty/libvorbis/modes/psych_8.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/residue_16.h b/thirdparty/libvorbis/modes/residue_16.h index 3e05471cec..15e161c862 100644 --- a/thirdparty/libvorbis/modes/residue_16.h +++ b/thirdparty/libvorbis/modes/residue_16.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/residue_44.h b/thirdparty/libvorbis/modes/residue_44.h index e89bc0e486..3f982695a7 100644 --- a/thirdparty/libvorbis/modes/residue_44.h +++ b/thirdparty/libvorbis/modes/residue_44.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/residue_44p51.h b/thirdparty/libvorbis/modes/residue_44p51.h index 7f33e250e2..8ac5f65e62 100644 --- a/thirdparty/libvorbis/modes/residue_44p51.h +++ b/thirdparty/libvorbis/modes/residue_44p51.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/residue_44u.h b/thirdparty/libvorbis/modes/residue_44u.h index e55ac12548..2f3595e49f 100644 --- a/thirdparty/libvorbis/modes/residue_44u.h +++ b/thirdparty/libvorbis/modes/residue_44u.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/residue_8.h b/thirdparty/libvorbis/modes/residue_8.h index ae123a276a..b836f79c84 100644 --- a/thirdparty/libvorbis/modes/residue_8.h +++ b/thirdparty/libvorbis/modes/residue_8.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_11.h b/thirdparty/libvorbis/modes/setup_11.h index 0cbcaafcb2..5ade5dd169 100644 --- a/thirdparty/libvorbis/modes/setup_11.h +++ b/thirdparty/libvorbis/modes/setup_11.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_16.h b/thirdparty/libvorbis/modes/setup_16.h index d59ad70d2e..8b2daafa3f 100644 --- a/thirdparty/libvorbis/modes/setup_16.h +++ b/thirdparty/libvorbis/modes/setup_16.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_22.h b/thirdparty/libvorbis/modes/setup_22.h index bc38af9630..eef5a4e7da 100644 --- a/thirdparty/libvorbis/modes/setup_22.h +++ b/thirdparty/libvorbis/modes/setup_22.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_32.h b/thirdparty/libvorbis/modes/setup_32.h index f66a0bcd00..f87cb767d0 100644 --- a/thirdparty/libvorbis/modes/setup_32.h +++ b/thirdparty/libvorbis/modes/setup_32.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_44.h b/thirdparty/libvorbis/modes/setup_44.h index a189b5fb95..12d592808e 100644 --- a/thirdparty/libvorbis/modes/setup_44.h +++ b/thirdparty/libvorbis/modes/setup_44.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_44p51.h b/thirdparty/libvorbis/modes/setup_44p51.h index 3bde7b340c..4d49173ffb 100644 --- a/thirdparty/libvorbis/modes/setup_44p51.h +++ b/thirdparty/libvorbis/modes/setup_44p51.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_44u.h b/thirdparty/libvorbis/modes/setup_44u.h index 7ae3af6b2a..2dd8bf701f 100644 --- a/thirdparty/libvorbis/modes/setup_44u.h +++ b/thirdparty/libvorbis/modes/setup_44u.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_8.h b/thirdparty/libvorbis/modes/setup_8.h index 7502556879..16b02e01b7 100644 --- a/thirdparty/libvorbis/modes/setup_8.h +++ b/thirdparty/libvorbis/modes/setup_8.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/modes/setup_X.h b/thirdparty/libvorbis/modes/setup_X.h index 2229a5ef2f..27807c10b4 100644 --- a/thirdparty/libvorbis/modes/setup_X.h +++ b/thirdparty/libvorbis/modes/setup_X.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/os.h b/thirdparty/libvorbis/os.h index 416a401dd1..9ded7358d4 100644 --- a/thirdparty/libvorbis/os.h +++ b/thirdparty/libvorbis/os.h @@ -8,7 +8,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -60,7 +60,7 @@ void *_alloca(size_t size); # define FAST_HYPOT hypot #endif -#endif +#endif /* _V_IFDEFJAIL_H_ */ #ifdef HAVE_ALLOCA_H # include <alloca.h> @@ -80,7 +80,7 @@ void *_alloca(size_t size); /* Special i386 GCC implementation */ -#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) +#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) && !defined(__SSE2_MATH__) # define VORBIS_FPU_CONTROL /* both GCC and MSVC are kinda stupid about rounding/casting to int. Because of encapsulation constraints (GCC can't see inside the asm @@ -119,8 +119,7 @@ static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise, /* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the * 64 bit compiler and doesn't work on arm. */ -#if defined(_MSC_VER) && !defined(_WIN64) && \ - !defined(_WIN32_WCE) && !defined(_M_ARM) +#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_WIN32_WCE) # define VORBIS_FPU_CONTROL typedef ogg_int16_t vorbis_fpu_control; @@ -147,7 +146,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ /* Optimized code path for x86_64 builds. Uses SSE2 intrinsics. This can be done safely because all x86_64 CPUs supports SSE2. */ -#if (defined(_MSC_VER) && defined(_WIN64)) || (defined(__GNUC__) && defined (__x86_64__)) +#if (defined(_MSC_VER) && defined(_M_X64)) || (defined(__GNUC__) && defined (__SSE2_MATH__)) # define VORBIS_FPU_CONTROL typedef ogg_int16_t vorbis_fpu_control; @@ -174,7 +173,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ typedef int vorbis_fpu_control; -static int vorbis_ftoi(double f){ +STIN int vorbis_ftoi(double f){ /* Note: MSVC and GCC (at least on some systems) round towards zero, thus, the floor() call is required to ensure correct roudning of negative numbers */ diff --git a/thirdparty/libvorbis/psy.c b/thirdparty/libvorbis/psy.c index 422c6f1e41..036b094aa7 100644 --- a/thirdparty/libvorbis/psy.c +++ b/thirdparty/libvorbis/psy.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -599,11 +599,12 @@ static void bark_noise_hybridmp(int n,const long *b, XY[i] = tXY; } - for (i = 0, x = 0.f;; i++, x += 1.f) { + for (i = 0, x = 0.f; i < n; i++, x += 1.f) { lo = b[i] >> 16; - if( lo>=0 ) break; hi = b[i] & 0xffff; + if( lo>=0 || -lo>=n ) break; + if( hi>=n ) break; tN = N[hi] + N[-lo]; tX = X[hi] - X[-lo]; @@ -615,17 +616,17 @@ static void bark_noise_hybridmp(int n,const long *b, B = tN * tXY - tX * tY; D = tN * tXX - tX * tX; R = (A + x * B) / D; - if (R < 0.f) - R = 0.f; + if (R < 0.f) R = 0.f; noise[i] = R - offset; } - for ( ;; i++, x += 1.f) { + for ( ; i < n; i++, x += 1.f) { lo = b[i] >> 16; hi = b[i] & 0xffff; - if(hi>=n)break; + if( lo<0 || lo>=n ) break; + if( hi>=n ) break; tN = N[hi] - N[lo]; tX = X[hi] - X[lo]; @@ -641,6 +642,7 @@ static void bark_noise_hybridmp(int n,const long *b, noise[i] = R - offset; } + for ( ; i < n; i++, x += 1.f) { R = (A + x * B) / D; @@ -651,10 +653,11 @@ static void bark_noise_hybridmp(int n,const long *b, if (fixed <= 0) return; - for (i = 0, x = 0.f;; i++, x += 1.f) { + for (i = 0, x = 0.f; i < n; i++, x += 1.f) { hi = i + fixed / 2; lo = hi - fixed; - if(lo>=0)break; + if ( hi>=n ) break; + if ( lo>=0 ) break; tN = N[hi] + N[-lo]; tX = X[hi] - X[-lo]; @@ -670,11 +673,12 @@ static void bark_noise_hybridmp(int n,const long *b, if (R - offset < noise[i]) noise[i] = R - offset; } - for ( ;; i++, x += 1.f) { + for ( ; i < n; i++, x += 1.f) { hi = i + fixed / 2; lo = hi - fixed; - if(hi>=n)break; + if ( hi>=n ) break; + if ( lo<0 ) break; tN = N[hi] - N[lo]; tX = X[hi] - X[lo]; diff --git a/thirdparty/libvorbis/psy.h b/thirdparty/libvorbis/psy.h index ab2534db3a..d9a04e8b74 100644 --- a/thirdparty/libvorbis/psy.h +++ b/thirdparty/libvorbis/psy.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/psytune.c b/thirdparty/libvorbis/psytune.c index 6952136c6b..67223e5118 100644 --- a/thirdparty/libvorbis/psytune.c +++ b/thirdparty/libvorbis/psytune.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/registry.c b/thirdparty/libvorbis/registry.c index 74f7ef0396..db0f67b2e2 100644 --- a/thirdparty/libvorbis/registry.c +++ b/thirdparty/libvorbis/registry.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/registry.h b/thirdparty/libvorbis/registry.h index 599d959942..b823aa6091 100644 --- a/thirdparty/libvorbis/registry.h +++ b/thirdparty/libvorbis/registry.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/res0.c b/thirdparty/libvorbis/res0.c index 6d623d730f..c931aded38 100644 --- a/thirdparty/libvorbis/res0.c +++ b/thirdparty/libvorbis/res0.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -30,9 +30,6 @@ #include "misc.h" #include "os.h" -//#define TRAIN_RES 1 -//#define TRAIN_RESAUX 1 - #if defined(TRAIN_RES) || defined (TRAIN_RESAUX) #include <stdio.h> #endif diff --git a/thirdparty/libvorbis/scales.h b/thirdparty/libvorbis/scales.h index 18bc4e7518..3c2ae48d9e 100644 --- a/thirdparty/libvorbis/scales.h +++ b/thirdparty/libvorbis/scales.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/sharedbook.c b/thirdparty/libvorbis/sharedbook.c index 4545d4f459..62a9a00afb 100644 --- a/thirdparty/libvorbis/sharedbook.c +++ b/thirdparty/libvorbis/sharedbook.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -50,7 +50,7 @@ long _float32_pack(float val){ sign=0x80000000; val= -val; } - exp= floor(log(val)/log(2.f)+.001); //+epsilon + exp= floor(log(val)/log(2.f)+.001); /* +epsilon */ mant=rint(ldexp(val,(VQ_FMAN-1)-exp)); exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN; @@ -62,7 +62,15 @@ float _float32_unpack(long val){ int sign=val&0x80000000; long exp =(val&0x7fe00000L)>>VQ_FMAN; if(sign)mant= -mant; - return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS)); + exp=exp-(VQ_FMAN-1)-VQ_FEXP_BIAS; + /* clamp excessive exponent values */ + if (exp>63){ + exp=63; + } + if (exp<-63){ + exp=-63; + } + return(ldexp(mant,exp)); } /* given a list of word lengths, generate a list of codewords. Works @@ -294,7 +302,7 @@ int vorbis_book_init_encode(codebook *c,const static_codebook *s){ c->used_entries=s->entries; c->dim=s->dim; c->codelist=_make_words(s->lengthlist,s->entries,0); - //c->valuelist=_book_unquantize(s,s->entries,NULL); + /* c->valuelist=_book_unquantize(s,s->entries,NULL); */ c->quantvals=_book_maptype1_quantvals(s); c->minval=(int)rint(_float32_unpack(s->q_min)); c->delta=(int)rint(_float32_unpack(s->q_delta)); @@ -573,6 +581,7 @@ void run_test(static_codebook *b,float *comp){ exit(1); } } + free(out); } int main(){ diff --git a/thirdparty/libvorbis/smallft.c b/thirdparty/libvorbis/smallft.c index 6d528af423..4ffabab4bb 100644 --- a/thirdparty/libvorbis/smallft.c +++ b/thirdparty/libvorbis/smallft.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/smallft.h b/thirdparty/libvorbis/smallft.h index 9e867c67d2..02fe8f9cd4 100644 --- a/thirdparty/libvorbis/smallft.h +++ b/thirdparty/libvorbis/smallft.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/synthesis.c b/thirdparty/libvorbis/synthesis.c index 5f6092c3d3..3e2d681270 100644 --- a/thirdparty/libvorbis/synthesis.c +++ b/thirdparty/libvorbis/synthesis.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/vorbis/codec.h b/thirdparty/libvorbis/vorbis/codec.h index 42aa29138e..f8a912bc26 100644 --- a/thirdparty/libvorbis/vorbis/codec.h +++ b/thirdparty/libvorbis/vorbis/codec.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * ******************************************************************** diff --git a/thirdparty/libvorbis/vorbis/vorbisenc.h b/thirdparty/libvorbis/vorbis/vorbisenc.h index 55f3b4a667..085b15e669 100644 --- a/thirdparty/libvorbis/vorbis/vorbisenc.h +++ b/thirdparty/libvorbis/vorbis/vorbisenc.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/vorbis/vorbisfile.h b/thirdparty/libvorbis/vorbis/vorbisfile.h index 56626119bb..3d65393f52 100644 --- a/thirdparty/libvorbis/vorbis/vorbisfile.h +++ b/thirdparty/libvorbis/vorbis/vorbisfile.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/vorbisenc.c b/thirdparty/libvorbis/vorbisenc.c index 4a4607cb41..cf3806a6e1 100644 --- a/thirdparty/libvorbis/vorbisenc.c +++ b/thirdparty/libvorbis/vorbisenc.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -684,6 +684,7 @@ int vorbis_encode_setup_init(vorbis_info *vi){ highlevel_encode_setup *hi=&ci->hi; if(ci==NULL)return(OV_EINVAL); + if(vi->channels<1||vi->channels>255)return(OV_EINVAL); if(!hi->impulse_block_p)i0=1; /* too low/high an ATH floater is nonsensical, but doesn't break anything */ @@ -1210,7 +1211,7 @@ int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){ hi->req, hi->managed, &new_base); - if(!hi->setup)return OV_EIMPL; + if(!new_template)return OV_EIMPL; hi->setup=new_template; hi->base_setting=new_base; vorbis_encode_setup_setting(vi,vi->channels,vi->rate); diff --git a/thirdparty/libvorbis/vorbisfile.c b/thirdparty/libvorbis/vorbisfile.c index b570c3c5f6..9219c2f2dc 100644 --- a/thirdparty/libvorbis/vorbisfile.c +++ b/thirdparty/libvorbis/vorbisfile.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** @@ -264,6 +264,10 @@ static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin, } } } + /*We started from the beginning of the stream and found nothing. + This should be impossible unless the contents of the stream changed out + from under us after we read from it.*/ + if(!begin&&vf->offset<0)return OV_EBADLINK; } /* we're not interested in the page... just the serialno and granpos. */ @@ -1230,7 +1234,6 @@ double ov_time_total(OggVorbis_File *vf,int i){ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){ ogg_stream_state work_os; - int ret; if(vf->ready_state<OPENED)return(OV_EINVAL); if(!vf->seekable) @@ -1253,8 +1256,12 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){ vf->current_serialno); /* must set serialno */ vorbis_synthesis_restart(&vf->vd); - ret=_seek_helper(vf,pos); - if(ret)goto seek_error; + if(_seek_helper(vf,pos)) { + /* dump the machine so we're in a known state */ + vf->pcm_offset=-1; + _decode_clear(vf); + return OV_EBADLINK; + } /* we need to make sure the pcm_offset is set, but we don't want to advance the raw cursor past good packets just to get to the first @@ -1388,13 +1395,6 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){ vf->bittrack=0.f; vf->samptrack=0.f; return(0); - - seek_error: - /* dump the machine so we're in a known state */ - vf->pcm_offset=-1; - ogg_stream_clear(&work_os); - _decode_clear(vf); - return OV_EBADLINK; } /* Page granularity seek (faster than sample granularity because we @@ -1964,6 +1964,7 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length, long samples; if(vf->ready_state<OPENED)return(OV_EINVAL); + if(word<=0)return(OV_EINVAL); while(1){ if(vf->ready_state==INITSET){ @@ -1989,6 +1990,8 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length, long channels=ov_info(vf,-1)->channels; long bytespersample=word * channels; vorbis_fpu_control fpu; + + if(channels<1||channels>255)return(OV_EINVAL); if(samples>length/bytespersample)samples=length/bytespersample; if(samples <= 0) diff --git a/thirdparty/libvorbis/window.c b/thirdparty/libvorbis/window.c index b3b7ce0163..2151b278d1 100644 --- a/thirdparty/libvorbis/window.c +++ b/thirdparty/libvorbis/window.c @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libvorbis/window.h b/thirdparty/libvorbis/window.h index 6ac260749e..33d83f85f9 100644 --- a/thirdparty/libvorbis/window.h +++ b/thirdparty/libvorbis/window.h @@ -6,7 +6,7 @@ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * + * by the Xiph.Org Foundation https://xiph.org/ * * * ******************************************************************** diff --git a/thirdparty/libwebp/AUTHORS b/thirdparty/libwebp/AUTHORS index 0d70b7fb2a..30abde0326 100644 --- a/thirdparty/libwebp/AUTHORS +++ b/thirdparty/libwebp/AUTHORS @@ -1,9 +1,15 @@ Contributors: +- Aidan O'Loan (aidanol at gmail dot com) - Alan Browning (browning at google dot com) - Charles Munger (clm at google dot com) +- Cheng Yi (cyi at google dot com) - Christian Duvivier (cduvivier at google dot com) +- Christopher Degawa (ccom at randomderp dot com) +- Clement Courbet (courbet at google dot com) - Djordje Pesut (djordje dot pesut at imgtec dot com) - Hui Su (huisu at google dot com) +- Ilya Kurdyukov (jpegqs at gmail dot com) +- Ingvar Stepanyan (rreverser at google dot com) - James Zern (jzern at google dot com) - Jan Engelhardt (jengelh at medozas dot de) - Jehan (jehan at girinstud dot io) @@ -20,6 +26,7 @@ Contributors: - Mislav Bradac (mislavm at google dot com) - Nico Weber (thakis at chromium dot org) - Noel Chromium (noel at chromium dot org) +- Oliver Wolff (oliver dot wolff at qt dot io) - Owen Rodley (orodley at google dot com) - Parag Salasakar (img dot mips1 at gmail dot com) - Pascal Massimino (pascal dot massimino at gmail dot com) @@ -38,5 +45,7 @@ Contributors: - Vikas Arora (vikasa at google dot com) - Vincent Rabaud (vrabaud at google dot com) - Vlad Tsyrklevich (vtsyrklevich at chromium dot org) +- Wan-Teh Chang (wtc at google dot com) - Yang Zhang (yang dot zhang at arm dot com) - Yannis Guyon (yguyon at google dot com) +- Zhi An Ng (zhin at chromium dot org) diff --git a/thirdparty/libwebp/src/dec/alpha_dec.c b/thirdparty/libwebp/src/dec/alpha_dec.c index bce735bfc2..0b93a30b32 100644 --- a/thirdparty/libwebp/src/dec/alpha_dec.c +++ b/thirdparty/libwebp/src/dec/alpha_dec.c @@ -183,7 +183,7 @@ const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec, assert(dec != NULL && io != NULL); if (row < 0 || num_rows <= 0 || row + num_rows > height) { - return NULL; // sanity check. + return NULL; } if (!dec->is_alpha_decoded_) { diff --git a/thirdparty/libwebp/src/dec/buffer_dec.c b/thirdparty/libwebp/src/dec/buffer_dec.c index 3cd94eb4d9..4786cf0ddb 100644 --- a/thirdparty/libwebp/src/dec/buffer_dec.c +++ b/thirdparty/libwebp/src/dec/buffer_dec.c @@ -102,7 +102,7 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) { int stride; uint64_t size; - if ((uint64_t)w * kModeBpp[mode] >= (1ull << 32)) { + if ((uint64_t)w * kModeBpp[mode] >= (1ull << 31)) { return VP8_STATUS_INVALID_PARAM; } stride = w * kModeBpp[mode]; @@ -117,7 +117,6 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) { } total_size = size + 2 * uv_size + a_size; - // Security/sanity checks output = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*output)); if (output == NULL) { return VP8_STATUS_OUT_OF_MEMORY; @@ -156,11 +155,11 @@ VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer) { } if (WebPIsRGBMode(buffer->colorspace)) { WebPRGBABuffer* const buf = &buffer->u.RGBA; - buf->rgba += (buffer->height - 1) * buf->stride; + buf->rgba += (int64_t)(buffer->height - 1) * buf->stride; buf->stride = -buf->stride; } else { WebPYUVABuffer* const buf = &buffer->u.YUVA; - const int H = buffer->height; + const int64_t H = buffer->height; buf->y += (H - 1) * buf->y_stride; buf->y_stride = -buf->y_stride; buf->u += ((H - 1) >> 1) * buf->u_stride; @@ -188,8 +187,7 @@ VP8StatusCode WebPAllocateDecBuffer(int width, int height, const int ch = options->crop_height; const int x = options->crop_left & ~1; const int y = options->crop_top & ~1; - if (x < 0 || y < 0 || cw <= 0 || ch <= 0 || - x + cw > width || y + ch > height) { + if (!WebPCheckCropDimensions(width, height, x, y, cw, ch)) { return VP8_STATUS_INVALID_PARAM; // out of frame boundary. } width = cw; diff --git a/thirdparty/libwebp/src/dec/frame_dec.c b/thirdparty/libwebp/src/dec/frame_dec.c index 04609a8e56..91ca1f8609 100644 --- a/thirdparty/libwebp/src/dec/frame_dec.c +++ b/thirdparty/libwebp/src/dec/frame_dec.c @@ -705,7 +705,7 @@ static int AllocateMemory(VP8Decoder* const dec) { + cache_size + alpha_size + WEBP_ALIGN_CST; uint8_t* mem; - if (needed != (size_t)needed) return 0; // check for overflow + if (!CheckSizeOverflow(needed)) return 0; // check for overflow if (needed > dec->mem_size_) { WebPSafeFree(dec->mem_); dec->mem_size_ = 0; diff --git a/thirdparty/libwebp/src/dec/io_dec.c b/thirdparty/libwebp/src/dec/io_dec.c index e603f19c98..5ef6298886 100644 --- a/thirdparty/libwebp/src/dec/io_dec.c +++ b/thirdparty/libwebp/src/dec/io_dec.c @@ -25,21 +25,16 @@ static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) { WebPDecBuffer* output = p->output; const WebPYUVABuffer* const buf = &output->u.YUVA; - uint8_t* const y_dst = buf->y + io->mb_y * buf->y_stride; - uint8_t* const u_dst = buf->u + (io->mb_y >> 1) * buf->u_stride; - uint8_t* const v_dst = buf->v + (io->mb_y >> 1) * buf->v_stride; + uint8_t* const y_dst = buf->y + (size_t)io->mb_y * buf->y_stride; + uint8_t* const u_dst = buf->u + (size_t)(io->mb_y >> 1) * buf->u_stride; + uint8_t* const v_dst = buf->v + (size_t)(io->mb_y >> 1) * buf->v_stride; const int mb_w = io->mb_w; const int mb_h = io->mb_h; const int uv_w = (mb_w + 1) / 2; const int uv_h = (mb_h + 1) / 2; - int j; - for (j = 0; j < mb_h; ++j) { - memcpy(y_dst + j * buf->y_stride, io->y + j * io->y_stride, mb_w); - } - for (j = 0; j < uv_h; ++j) { - memcpy(u_dst + j * buf->u_stride, io->u + j * io->uv_stride, uv_w); - memcpy(v_dst + j * buf->v_stride, io->v + j * io->uv_stride, uv_w); - } + WebPCopyPlane(io->y, io->y_stride, y_dst, buf->y_stride, mb_w, mb_h); + WebPCopyPlane(io->u, io->uv_stride, u_dst, buf->u_stride, uv_w, uv_h); + WebPCopyPlane(io->v, io->uv_stride, v_dst, buf->v_stride, uv_w, uv_h); return io->mb_h; } @@ -47,7 +42,7 @@ static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) { static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) { WebPDecBuffer* const output = p->output; WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const dst = buf->rgba + io->mb_y * buf->stride; + uint8_t* const dst = buf->rgba + (size_t)io->mb_y * buf->stride; WebPSamplerProcessPlane(io->y, io->y_stride, io->u, io->v, io->uv_stride, dst, buf->stride, io->mb_w, io->mb_h, @@ -62,7 +57,7 @@ static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) { static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) { int num_lines_out = io->mb_h; // a priori guess const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* dst = buf->rgba + io->mb_y * buf->stride; + uint8_t* dst = buf->rgba + (size_t)io->mb_y * buf->stride; WebPUpsampleLinePairFunc upsample = WebPUpsamplers[p->output->colorspace]; const uint8_t* cur_y = io->y; const uint8_t* cur_u = io->u; @@ -133,7 +128,7 @@ static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p, const WebPYUVABuffer* const buf = &p->output->u.YUVA; const int mb_w = io->mb_w; const int mb_h = io->mb_h; - uint8_t* dst = buf->a + io->mb_y * buf->a_stride; + uint8_t* dst = buf->a + (size_t)io->mb_y * buf->a_stride; int j; (void)expected_num_lines_out; assert(expected_num_lines_out == mb_h); @@ -186,7 +181,7 @@ static int EmitAlphaRGB(const VP8Io* const io, WebPDecParams* const p, (colorspace == MODE_ARGB || colorspace == MODE_Argb); const WebPRGBABuffer* const buf = &p->output->u.RGBA; int num_rows; - const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows); + const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows); uint8_t* const base_rgba = buf->rgba + start_y * buf->stride; uint8_t* const dst = base_rgba + (alpha_first ? 0 : 3); const int has_alpha = WebPDispatchAlpha(alpha, io->width, mb_w, @@ -210,7 +205,7 @@ static int EmitAlphaRGBA4444(const VP8Io* const io, WebPDecParams* const p, const WEBP_CSP_MODE colorspace = p->output->colorspace; const WebPRGBABuffer* const buf = &p->output->u.RGBA; int num_rows; - const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows); + const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows); uint8_t* const base_rgba = buf->rgba + start_y * buf->stride; #if (WEBP_SWAP_16BIT_CSP == 1) uint8_t* alpha_dst = base_rgba; @@ -276,9 +271,9 @@ static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) { static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p, int expected_num_lines_out) { const WebPYUVABuffer* const buf = &p->output->u.YUVA; - uint8_t* const dst_a = buf->a + p->last_y * buf->a_stride; + uint8_t* const dst_a = buf->a + (size_t)p->last_y * buf->a_stride; if (io->a != NULL) { - uint8_t* const dst_y = buf->y + p->last_y * buf->y_stride; + uint8_t* const dst_y = buf->y + (size_t)p->last_y * buf->y_stride; const int num_lines_out = Rescale(io->a, io->width, io->mb_h, p->scaler_a); assert(expected_num_lines_out == num_lines_out); if (num_lines_out > 0) { // unmultiply the Y @@ -303,46 +298,57 @@ static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) { const int uv_out_height = (out_height + 1) >> 1; const int uv_in_width = (io->mb_w + 1) >> 1; const int uv_in_height = (io->mb_h + 1) >> 1; - const size_t work_size = 2 * out_width; // scratch memory for luma rescaler + // scratch memory for luma rescaler + const size_t work_size = 2 * (size_t)out_width; const size_t uv_work_size = 2 * uv_out_width; // and for each u/v ones - size_t tmp_size, rescaler_size; + uint64_t total_size; + size_t rescaler_size; rescaler_t* work; WebPRescaler* scalers; const int num_rescalers = has_alpha ? 4 : 3; - tmp_size = (work_size + 2 * uv_work_size) * sizeof(*work); + total_size = ((uint64_t)work_size + 2 * uv_work_size) * sizeof(*work); if (has_alpha) { - tmp_size += work_size * sizeof(*work); + total_size += (uint64_t)work_size * sizeof(*work); } rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST; + total_size += rescaler_size; + if (!CheckSizeOverflow(total_size)) { + return 0; + } - p->memory = WebPSafeMalloc(1ULL, tmp_size + rescaler_size); + p->memory = WebPSafeMalloc(1ULL, (size_t)total_size); if (p->memory == NULL) { return 0; // memory error } work = (rescaler_t*)p->memory; - scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + tmp_size); + scalers = (WebPRescaler*)WEBP_ALIGN( + (const uint8_t*)work + total_size - rescaler_size); p->scaler_y = &scalers[0]; p->scaler_u = &scalers[1]; p->scaler_v = &scalers[2]; p->scaler_a = has_alpha ? &scalers[3] : NULL; - WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, - buf->y, out_width, out_height, buf->y_stride, 1, - work); - WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, - buf->u, uv_out_width, uv_out_height, buf->u_stride, 1, - work + work_size); - WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, - buf->v, uv_out_width, uv_out_height, buf->v_stride, 1, - work + work_size + uv_work_size); + if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, + buf->y, out_width, out_height, buf->y_stride, 1, + work) || + !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, + buf->u, uv_out_width, uv_out_height, buf->u_stride, 1, + work + work_size) || + !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, + buf->v, uv_out_width, uv_out_height, buf->v_stride, 1, + work + work_size + uv_work_size)) { + return 0; + } p->emit = EmitRescaledYUV; if (has_alpha) { - WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, - buf->a, out_width, out_height, buf->a_stride, 1, - work + work_size + 2 * uv_work_size); + if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, + buf->a, out_width, out_height, buf->a_stride, 1, + work + work_size + 2 * uv_work_size)) { + return 0; + } p->emit_alpha = EmitRescaledAlphaYUV; WebPInitAlphaProcessing(); } @@ -356,7 +362,7 @@ static int ExportRGB(WebPDecParams* const p, int y_pos) { const WebPYUV444Converter convert = WebPYUV444Converters[p->output->colorspace]; const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* dst = buf->rgba + y_pos * buf->stride; + uint8_t* dst = buf->rgba + (size_t)y_pos * buf->stride; int num_lines_out = 0; // For RGB rescaling, because of the YUV420, current scan position // U/V can be +1/-1 line from the Y one. Hence the double test. @@ -383,15 +389,15 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) { while (j < mb_h) { const int y_lines_in = WebPRescalerImport(p->scaler_y, mb_h - j, - io->y + j * io->y_stride, io->y_stride); + io->y + (size_t)j * io->y_stride, io->y_stride); j += y_lines_in; if (WebPRescaleNeededLines(p->scaler_u, uv_mb_h - uv_j)) { - const int u_lines_in = - WebPRescalerImport(p->scaler_u, uv_mb_h - uv_j, - io->u + uv_j * io->uv_stride, io->uv_stride); - const int v_lines_in = - WebPRescalerImport(p->scaler_v, uv_mb_h - uv_j, - io->v + uv_j * io->uv_stride, io->uv_stride); + const int u_lines_in = WebPRescalerImport( + p->scaler_u, uv_mb_h - uv_j, io->u + (size_t)uv_j * io->uv_stride, + io->uv_stride); + const int v_lines_in = WebPRescalerImport( + p->scaler_v, uv_mb_h - uv_j, io->v + (size_t)uv_j * io->uv_stride, + io->uv_stride); (void)v_lines_in; // remove a gcc warning assert(u_lines_in == v_lines_in); uv_j += u_lines_in; @@ -403,7 +409,7 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) { static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) { const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride; + uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride; const WEBP_CSP_MODE colorspace = p->output->colorspace; const int alpha_first = (colorspace == MODE_ARGB || colorspace == MODE_Argb); @@ -431,7 +437,7 @@ static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) { static int ExportAlphaRGBA4444(WebPDecParams* const p, int y_pos, int max_lines_out) { const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride; + uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride; #if (WEBP_SWAP_16BIT_CSP == 1) uint8_t* alpha_dst = base_rgba; #else @@ -470,7 +476,7 @@ static int EmitRescaledAlphaRGB(const VP8Io* const io, WebPDecParams* const p, int lines_left = expected_num_out_lines; const int y_end = p->last_y + lines_left; while (lines_left > 0) { - const int row_offset = scaler->src_y - io->mb_y; + const int64_t row_offset = (int64_t)scaler->src_y - io->mb_y; WebPRescalerImport(scaler, io->mb_h + io->mb_y - scaler->src_y, io->a + row_offset * io->width, io->width); lines_left -= p->emit_alpha_row(p, y_end - lines_left, lines_left); @@ -485,51 +491,58 @@ static int InitRGBRescaler(const VP8Io* const io, WebPDecParams* const p) { const int out_height = io->scaled_height; const int uv_in_width = (io->mb_w + 1) >> 1; const int uv_in_height = (io->mb_h + 1) >> 1; - const size_t work_size = 2 * out_width; // scratch memory for one rescaler + // scratch memory for one rescaler + const size_t work_size = 2 * (size_t)out_width; rescaler_t* work; // rescalers work area uint8_t* tmp; // tmp storage for scaled YUV444 samples before RGB conversion - size_t tmp_size1, tmp_size2, total_size, rescaler_size; + uint64_t tmp_size1, tmp_size2, total_size; + size_t rescaler_size; WebPRescaler* scalers; const int num_rescalers = has_alpha ? 4 : 3; - tmp_size1 = 3 * work_size; - tmp_size2 = 3 * out_width; - if (has_alpha) { - tmp_size1 += work_size; - tmp_size2 += out_width; - } + tmp_size1 = (uint64_t)num_rescalers * work_size; + tmp_size2 = (uint64_t)num_rescalers * out_width; total_size = tmp_size1 * sizeof(*work) + tmp_size2 * sizeof(*tmp); rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST; + total_size += rescaler_size; + if (!CheckSizeOverflow(total_size)) { + return 0; + } - p->memory = WebPSafeMalloc(1ULL, total_size + rescaler_size); + p->memory = WebPSafeMalloc(1ULL, (size_t)total_size); if (p->memory == NULL) { return 0; // memory error } work = (rescaler_t*)p->memory; tmp = (uint8_t*)(work + tmp_size1); - scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + total_size); + scalers = (WebPRescaler*)WEBP_ALIGN( + (const uint8_t*)work + total_size - rescaler_size); p->scaler_y = &scalers[0]; p->scaler_u = &scalers[1]; p->scaler_v = &scalers[2]; p->scaler_a = has_alpha ? &scalers[3] : NULL; - WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, - tmp + 0 * out_width, out_width, out_height, 0, 1, - work + 0 * work_size); - WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, - tmp + 1 * out_width, out_width, out_height, 0, 1, - work + 1 * work_size); - WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, - tmp + 2 * out_width, out_width, out_height, 0, 1, - work + 2 * work_size); + if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, + tmp + 0 * out_width, out_width, out_height, 0, 1, + work + 0 * work_size) || + !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, + tmp + 1 * out_width, out_width, out_height, 0, 1, + work + 1 * work_size) || + !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, + tmp + 2 * out_width, out_width, out_height, 0, 1, + work + 2 * work_size)) { + return 0; + } p->emit = EmitRescaledRGB; WebPInitYUV444Converters(); if (has_alpha) { - WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, - tmp + 3 * out_width, out_width, out_height, 0, 1, - work + 3 * work_size); + if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, + tmp + 3 * out_width, out_width, out_height, 0, 1, + work + 3 * work_size)) { + return 0; + } p->emit_alpha = EmitRescaledAlphaRGB; if (p->output->colorspace == MODE_RGBA_4444 || p->output->colorspace == MODE_rgbA_4444) { diff --git a/thirdparty/libwebp/src/dec/vp8_dec.c b/thirdparty/libwebp/src/dec/vp8_dec.c index 57efb69041..5f405e4c2a 100644 --- a/thirdparty/libwebp/src/dec/vp8_dec.c +++ b/thirdparty/libwebp/src/dec/vp8_dec.c @@ -335,7 +335,7 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) { io->scaled_width = io->width; io->scaled_height = io->height; - io->mb_w = io->width; // sanity check + io->mb_w = io->width; // for soundness io->mb_h = io->height; // ditto VP8ResetProba(&dec->proba_); @@ -494,13 +494,11 @@ static int GetCoeffsAlt(VP8BitReader* const br, return 16; } -static WEBP_TSAN_IGNORE_FUNCTION void InitGetCoeffs(void) { - if (GetCoeffs == NULL) { - if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) { - GetCoeffs = GetCoeffsAlt; - } else { - GetCoeffs = GetCoeffsFast; - } +WEBP_DSP_INIT_FUNC(InitGetCoeffs) { + if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) { + GetCoeffs = GetCoeffsAlt; + } else { + GetCoeffs = GetCoeffsFast; } } diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h index 600a684410..20526a87c4 100644 --- a/thirdparty/libwebp/src/dec/vp8i_dec.h +++ b/thirdparty/libwebp/src/dec/vp8i_dec.h @@ -31,8 +31,8 @@ extern "C" { // version numbers #define DEC_MAJ_VERSION 1 -#define DEC_MIN_VERSION 1 -#define DEC_REV_VERSION 0 +#define DEC_MIN_VERSION 2 +#define DEC_REV_VERSION 1 // YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). // Constraints are: We need to store one 16x16 block of luma samples (y), diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c index 93615d4ed2..73c3b54fff 100644 --- a/thirdparty/libwebp/src/dec/vp8l_dec.c +++ b/thirdparty/libwebp/src/dec/vp8l_dec.c @@ -559,8 +559,11 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { memory += work_size * sizeof(*work); scaled_data = (uint32_t*)memory; - WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data, - out_width, out_height, 0, num_channels, work); + if (!WebPRescalerInit(dec->rescaler, in_width, in_height, + (uint8_t*)scaled_data, out_width, out_height, + 0, num_channels, work)) { + return 0; + } return 1; } #endif // WEBP_REDUCE_SIZE @@ -574,13 +577,14 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace, int rgba_stride, uint8_t* const rgba) { uint32_t* const src = (uint32_t*)rescaler->dst; + uint8_t* dst = rgba; const int dst_width = rescaler->dst_width; int num_lines_out = 0; while (WebPRescalerHasPendingOutput(rescaler)) { - uint8_t* const dst = rgba + num_lines_out * rgba_stride; WebPRescalerExportRow(rescaler); WebPMultARGBRow(src, dst_width, 1); VP8LConvertFromBGRA(src, dst_width, colorspace, dst); + dst += rgba_stride; ++num_lines_out; } return num_lines_out; @@ -594,8 +598,8 @@ static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec, int num_lines_in = 0; int num_lines_out = 0; while (num_lines_in < mb_h) { - uint8_t* const row_in = in + num_lines_in * in_stride; - uint8_t* const row_out = out + num_lines_out * out_stride; + uint8_t* const row_in = in + (uint64_t)num_lines_in * in_stride; + uint8_t* const row_out = out + (uint64_t)num_lines_out * out_stride; const int lines_left = mb_h - num_lines_in; const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); int lines_imported; @@ -796,7 +800,8 @@ static void ProcessRows(VP8LDecoder* const dec, int row) { const WebPDecBuffer* const output = dec->output_; if (WebPIsRGBMode(output->colorspace)) { // convert to RGBA const WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride; + uint8_t* const rgba = + buf->rgba + (int64_t)dec->last_out_row_ * buf->stride; const int num_rows_out = #if !defined(WEBP_REDUCE_SIZE) io->use_scaling ? @@ -947,7 +952,6 @@ static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) { break; default: goto Copy; - break; } CopySmallPattern8b(src, dst, length, pattern); return; @@ -1515,7 +1519,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) { assert(dec->width_ <= final_width); dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t)); if (dec->pixels_ == NULL) { - dec->argb_cache_ = NULL; // for sanity check + dec->argb_cache_ = NULL; // for soundness dec->status_ = VP8_STATUS_OUT_OF_MEMORY; return 0; } @@ -1525,7 +1529,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) { static int AllocateInternalBuffers8b(VP8LDecoder* const dec) { const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_; - dec->argb_cache_ = NULL; // for sanity check + dec->argb_cache_ = NULL; // for soundness dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t)); if (dec->pixels_ == NULL) { dec->status_ = VP8_STATUS_OUT_OF_MEMORY; @@ -1667,7 +1671,6 @@ int VP8LDecodeImage(VP8LDecoder* const dec) { VP8Io* io = NULL; WebPDecParams* params = NULL; - // Sanity checks. if (dec == NULL) return 0; assert(dec->hdr_.huffman_tables_ != NULL); diff --git a/thirdparty/libwebp/src/dec/webp_dec.c b/thirdparty/libwebp/src/dec/webp_dec.c index 42d098874d..77a54c55d2 100644 --- a/thirdparty/libwebp/src/dec/webp_dec.c +++ b/thirdparty/libwebp/src/dec/webp_dec.c @@ -785,6 +785,13 @@ VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size, //------------------------------------------------------------------------------ // Cropping and rescaling. +int WebPCheckCropDimensions(int image_width, int image_height, + int x, int y, int w, int h) { + return !(x < 0 || y < 0 || w <= 0 || h <= 0 || + x >= image_width || w > image_width || w > image_width - x || + y >= image_height || h > image_height || h > image_height - y); +} + int WebPIoInitFromOptions(const WebPDecoderOptions* const options, VP8Io* const io, WEBP_CSP_MODE src_colorspace) { const int W = io->width; @@ -792,7 +799,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options, int x = 0, y = 0, w = W, h = H; // Cropping - io->use_cropping = (options != NULL) && (options->use_cropping > 0); + io->use_cropping = (options != NULL) && options->use_cropping; if (io->use_cropping) { w = options->crop_width; h = options->crop_height; @@ -802,7 +809,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options, x &= ~1; y &= ~1; } - if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) { + if (!WebPCheckCropDimensions(W, H, x, y, w, h)) { return 0; // out of frame boundary error } } @@ -814,7 +821,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options, io->mb_h = h; // Scaling - io->use_scaling = (options != NULL) && (options->use_scaling > 0); + io->use_scaling = (options != NULL) && options->use_scaling; if (io->use_scaling) { int scaled_width = options->scaled_width; int scaled_height = options->scaled_height; @@ -835,8 +842,8 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options, if (io->use_scaling) { // disable filter (only for large downscaling ratio). - io->bypass_filtering = (io->scaled_width < W * 3 / 4) && - (io->scaled_height < H * 3 / 4); + io->bypass_filtering |= (io->scaled_width < W * 3 / 4) && + (io->scaled_height < H * 3 / 4); io->fancy_upsampling = 0; } return 1; diff --git a/thirdparty/libwebp/src/dec/webpi_dec.h b/thirdparty/libwebp/src/dec/webpi_dec.h index 24baff5d27..3b97388c71 100644 --- a/thirdparty/libwebp/src/dec/webpi_dec.h +++ b/thirdparty/libwebp/src/dec/webpi_dec.h @@ -77,6 +77,10 @@ VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers); //------------------------------------------------------------------------------ // Misc utils +// Returns true if crop dimensions are within image bounds. +int WebPCheckCropDimensions(int image_width, int image_height, + int x, int y, int w, int h); + // Initializes VP8Io with custom setup, io and teardown functions. The default // hooks will use the supplied 'params' as io->opaque handle. void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io); diff --git a/thirdparty/libwebp/src/demux/anim_decode.c b/thirdparty/libwebp/src/demux/anim_decode.c index 05dd707371..2bf4dcffe0 100644 --- a/thirdparty/libwebp/src/demux/anim_decode.c +++ b/thirdparty/libwebp/src/demux/anim_decode.c @@ -87,11 +87,19 @@ WebPAnimDecoder* WebPAnimDecoderNewInternal( int abi_version) { WebPAnimDecoderOptions options; WebPAnimDecoder* dec = NULL; + WebPBitstreamFeatures features; if (webp_data == NULL || WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) { return NULL; } + // Validate the bitstream before doing expensive allocations. The demuxer may + // be more tolerant than the decoder. + if (WebPGetFeatures(webp_data->bytes, webp_data->size, &features) != + VP8_STATUS_OK) { + return NULL; + } + // Note: calloc() so that the pointer members are initialized to NULL. dec = (WebPAnimDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); if (dec == NULL) goto Error; @@ -145,7 +153,7 @@ static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width, uint32_t canvas_height) { const uint64_t size = (uint64_t)canvas_width * canvas_height * NUM_CHANNELS * sizeof(*buf); - if (size != (size_t)size) return 0; + if (!CheckSizeOverflow(size)) return 0; memset(buf, 0, (size_t)size); return 1; } @@ -166,7 +174,7 @@ static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset, static int CopyCanvas(const uint8_t* src, uint8_t* dst, uint32_t width, uint32_t height) { const uint64_t size = (uint64_t)width * height * NUM_CHANNELS; - if (size != (size_t)size) return 0; + if (!CheckSizeOverflow(size)) return 0; assert(src != NULL && dst != NULL); memcpy(dst, src, (size_t)size); return 1; @@ -346,12 +354,15 @@ int WebPAnimDecoderGetNext(WebPAnimDecoder* dec, { const uint8_t* in = iter.fragment.bytes; const size_t in_size = iter.fragment.size; - const size_t out_offset = - (iter.y_offset * width + iter.x_offset) * NUM_CHANNELS; + const uint32_t stride = width * NUM_CHANNELS; // at most 25 + 2 bits + const uint64_t out_offset = (uint64_t)iter.y_offset * stride + + (uint64_t)iter.x_offset * NUM_CHANNELS; // 53b + const uint64_t size = (uint64_t)iter.height * stride; // at most 25 + 27b WebPDecoderConfig* const config = &dec->config_; WebPRGBABuffer* const buf = &config->output.u.RGBA; - buf->stride = NUM_CHANNELS * width; - buf->size = buf->stride * iter.height; + if ((size_t)size != size) goto Error; + buf->stride = (int)stride; + buf->size = (size_t)size; buf->rgba = dec->curr_frame_ + out_offset; if (WebPDecode(in, in_size, config) != VP8_STATUS_OK) { diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c index 1b3cc2e0a8..547a7725de 100644 --- a/thirdparty/libwebp/src/demux/demux.c +++ b/thirdparty/libwebp/src/demux/demux.c @@ -24,8 +24,8 @@ #include "src/webp/format_constants.h" #define DMUX_MAJ_VERSION 1 -#define DMUX_MIN_VERSION 1 -#define DMUX_REV_VERSION 0 +#define DMUX_MIN_VERSION 2 +#define DMUX_REV_VERSION 1 typedef struct { size_t start_; // start location of the data @@ -221,12 +221,16 @@ static ParseStatus StoreFrame(int frame_num, uint32_t min_size, const size_t chunk_start_offset = mem->start_; const uint32_t fourcc = ReadLE32(mem); const uint32_t payload_size = ReadLE32(mem); - const uint32_t payload_size_padded = payload_size + (payload_size & 1); - const size_t payload_available = (payload_size_padded > MemDataSize(mem)) - ? MemDataSize(mem) : payload_size_padded; - const size_t chunk_size = CHUNK_HEADER_SIZE + payload_available; + uint32_t payload_size_padded; + size_t payload_available; + size_t chunk_size; if (payload_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; + + payload_size_padded = payload_size + (payload_size & 1); + payload_available = (payload_size_padded > MemDataSize(mem)) + ? MemDataSize(mem) : payload_size_padded; + chunk_size = CHUNK_HEADER_SIZE + payload_available; if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR; if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA; @@ -312,6 +316,7 @@ static ParseStatus ParseAnimationFrame( int bits; MemBuffer* const mem = &dmux->mem_; Frame* frame; + size_t start_offset; ParseStatus status = NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame); if (status != PARSE_OK) return status; @@ -332,7 +337,11 @@ static ParseStatus ParseAnimationFrame( // Store a frame only if the animation flag is set there is some data for // this frame is available. + start_offset = mem->start_; status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame); + if (status != PARSE_ERROR && mem->start_ - start_offset > anmf_payload_size) { + status = PARSE_ERROR; + } if (status != PARSE_ERROR && is_animation && frame->frame_num_ > 0) { added_frame = AddFrame(dmux, frame); if (added_frame) { @@ -446,9 +455,11 @@ static ParseStatus ParseVP8XChunks(WebPDemuxer* const dmux) { const size_t chunk_start_offset = mem->start_; const uint32_t fourcc = ReadLE32(mem); const uint32_t chunk_size = ReadLE32(mem); - const uint32_t chunk_size_padded = chunk_size + (chunk_size & 1); + uint32_t chunk_size_padded; if (chunk_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; + + chunk_size_padded = chunk_size + (chunk_size & 1); if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR; switch (fourcc) { diff --git a/thirdparty/libwebp/src/dsp/alpha_processing.c b/thirdparty/libwebp/src/dsp/alpha_processing.c index 819d1391f2..1892929a43 100644 --- a/thirdparty/libwebp/src/dsp/alpha_processing.c +++ b/thirdparty/libwebp/src/dsp/alpha_processing.c @@ -157,7 +157,8 @@ void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse) { } } -void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha, +void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr, + const uint8_t* WEBP_RESTRICT const alpha, int width, int inverse) { int x; for (x = 0; x < width; ++x) { @@ -178,7 +179,8 @@ void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha, #undef MFIX void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse); -void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha, +void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr, + const uint8_t* WEBP_RESTRICT const alpha, int width, int inverse); //------------------------------------------------------------------------------ @@ -193,8 +195,8 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows, } } -void WebPMultRows(uint8_t* ptr, int stride, - const uint8_t* alpha, int alpha_stride, +void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride, + const uint8_t* WEBP_RESTRICT alpha, int alpha_stride, int width, int num_rows, int inverse) { int n; for (n = 0; n < num_rows; ++n) { @@ -290,9 +292,9 @@ static void ApplyAlphaMultiply_16b_C(uint8_t* rgba4444, } #if !WEBP_NEON_OMIT_C_CODE -static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride, +static int DispatchAlpha_C(const uint8_t* WEBP_RESTRICT alpha, int alpha_stride, int width, int height, - uint8_t* dst, int dst_stride) { + uint8_t* WEBP_RESTRICT dst, int dst_stride) { uint32_t alpha_mask = 0xff; int i, j; @@ -309,9 +311,10 @@ static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride, return (alpha_mask != 0xff); } -static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { +static void DispatchAlphaToGreen_C(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint32_t* WEBP_RESTRICT dst, + int dst_stride) { int i, j; for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { @@ -322,9 +325,9 @@ static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride, } } -static int ExtractAlpha_C(const uint8_t* argb, int argb_stride, +static int ExtractAlpha_C(const uint8_t* WEBP_RESTRICT argb, int argb_stride, int width, int height, - uint8_t* alpha, int alpha_stride) { + uint8_t* WEBP_RESTRICT alpha, int alpha_stride) { uint8_t alpha_mask = 0xff; int i, j; @@ -340,7 +343,8 @@ static int ExtractAlpha_C(const uint8_t* argb, int argb_stride, return (alpha_mask == 0xff); } -static void ExtractGreen_C(const uint32_t* argb, uint8_t* alpha, int size) { +static void ExtractGreen_C(const uint32_t* WEBP_RESTRICT argb, + uint8_t* WEBP_RESTRICT alpha, int size) { int i; for (i = 0; i < size; ++i) alpha[i] = argb[i] >> 8; } @@ -359,6 +363,11 @@ static int HasAlpha32b_C(const uint8_t* src, int length) { return 0; } +static void AlphaReplace_C(uint32_t* src, int length, uint32_t color) { + int x; + for (x = 0; x < length; ++x) if ((src[x] >> 24) == 0) src[x] = color; +} + //------------------------------------------------------------------------------ // Simple channel manipulations. @@ -367,8 +376,11 @@ static WEBP_INLINE uint32_t MakeARGB32(int a, int r, int g, int b) { } #ifdef WORDS_BIGENDIAN -static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g, - const uint8_t* b, int len, uint32_t* out) { +static void PackARGB_C(const uint8_t* WEBP_RESTRICT a, + const uint8_t* WEBP_RESTRICT r, + const uint8_t* WEBP_RESTRICT g, + const uint8_t* WEBP_RESTRICT b, + int len, uint32_t* WEBP_RESTRICT out) { int i; for (i = 0; i < len; ++i) { out[i] = MakeARGB32(a[4 * i], r[4 * i], g[4 * i], b[4 * i]); @@ -376,8 +388,10 @@ static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g, } #endif -static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out) { +static void PackRGB_C(const uint8_t* WEBP_RESTRICT r, + const uint8_t* WEBP_RESTRICT g, + const uint8_t* WEBP_RESTRICT b, + int len, int step, uint32_t* WEBP_RESTRICT out) { int i, offset = 0; for (i = 0; i < len; ++i) { out[i] = MakeARGB32(0xff, r[offset], g[offset], b[offset]); @@ -387,19 +401,26 @@ static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b, void (*WebPApplyAlphaMultiply)(uint8_t*, int, int, int, int); void (*WebPApplyAlphaMultiply4444)(uint8_t*, int, int, int); -int (*WebPDispatchAlpha)(const uint8_t*, int, int, int, uint8_t*, int); -void (*WebPDispatchAlphaToGreen)(const uint8_t*, int, int, int, uint32_t*, int); -int (*WebPExtractAlpha)(const uint8_t*, int, int, int, uint8_t*, int); -void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size); +int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int, + uint8_t* WEBP_RESTRICT, int); +void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT, int, int, int, + uint32_t* WEBP_RESTRICT, int); +int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int, + uint8_t* WEBP_RESTRICT, int); +void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb, + uint8_t* WEBP_RESTRICT alpha, int size); #ifdef WORDS_BIGENDIAN void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, const uint8_t* g, const uint8_t* b, int, uint32_t*); #endif -void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out); +void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r, + const uint8_t* WEBP_RESTRICT g, + const uint8_t* WEBP_RESTRICT b, + int len, int step, uint32_t* WEBP_RESTRICT out); int (*WebPHasAlpha8b)(const uint8_t* src, int length); int (*WebPHasAlpha32b)(const uint8_t* src, int length); +void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color); //------------------------------------------------------------------------------ // Init function @@ -428,13 +449,14 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) { WebPHasAlpha8b = HasAlpha8b_C; WebPHasAlpha32b = HasAlpha32b_C; + WebPAlphaReplace = AlphaReplace_C; // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitAlphaProcessingSSE2(); -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { WebPInitAlphaProcessingSSE41(); } @@ -448,7 +470,7 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { WebPInitAlphaProcessingNEON(); @@ -469,4 +491,5 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) { assert(WebPPackRGB != NULL); assert(WebPHasAlpha8b != NULL); assert(WebPHasAlpha32b != NULL); + assert(WebPAlphaReplace != NULL); } diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c index 9d55421704..9e0ace9421 100644 --- a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c +++ b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c @@ -80,9 +80,9 @@ static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first, //------------------------------------------------------------------------------ -static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { +static int DispatchAlpha_NEON(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint8_t* WEBP_RESTRICT dst, int dst_stride) { uint32_t alpha_mask = 0xffffffffu; uint8x8_t mask8 = vdup_n_u8(0xff); uint32_t tmp[2]; @@ -112,9 +112,10 @@ static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride, return (alpha_mask != 0xffffffffu); } -static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { +static void DispatchAlphaToGreen_NEON(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint32_t* WEBP_RESTRICT dst, + int dst_stride) { int i, j; uint8x8x4_t greens; // leave A/R/B channels zero'd. greens.val[0] = vdup_n_u8(0); @@ -131,9 +132,9 @@ static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride, } } -static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride, +static int ExtractAlpha_NEON(const uint8_t* WEBP_RESTRICT argb, int argb_stride, int width, int height, - uint8_t* alpha, int alpha_stride) { + uint8_t* WEBP_RESTRICT alpha, int alpha_stride) { uint32_t alpha_mask = 0xffffffffu; uint8x8_t mask8 = vdup_n_u8(0xff); uint32_t tmp[2]; @@ -161,8 +162,8 @@ static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride, return (alpha_mask == 0xffffffffu); } -static void ExtractGreen_NEON(const uint32_t* argb, - uint8_t* alpha, int size) { +static void ExtractGreen_NEON(const uint32_t* WEBP_RESTRICT argb, + uint8_t* WEBP_RESTRICT alpha, int size) { int i; for (i = 0; i + 16 <= size; i += 16) { const uint8x16x4_t rgbX = vld4q_u8((const uint8_t*)(argb + i)); diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c index 2871c56d84..a5f8c9f7c7 100644 --- a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c +++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c @@ -18,9 +18,9 @@ //------------------------------------------------------------------------------ -static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { +static int DispatchAlpha_SSE2(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint8_t* WEBP_RESTRICT dst, int dst_stride) { // alpha_and stores an 'and' operation of all the alpha[] values. The final // value is not 0xff if any of the alpha[] is not equal to 0xff. uint32_t alpha_and = 0xff; @@ -72,9 +72,10 @@ static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride, return (alpha_and != 0xff); } -static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { +static void DispatchAlphaToGreen_SSE2(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint32_t* WEBP_RESTRICT dst, + int dst_stride) { int i, j; const __m128i zero = _mm_setzero_si128(); const int limit = width & ~15; @@ -98,9 +99,9 @@ static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride, } } -static int ExtractAlpha_SSE2(const uint8_t* argb, int argb_stride, +static int ExtractAlpha_SSE2(const uint8_t* WEBP_RESTRICT argb, int argb_stride, int width, int height, - uint8_t* alpha, int alpha_stride) { + uint8_t* WEBP_RESTRICT alpha, int alpha_stride) { // alpha_and stores an 'and' operation of all the alpha[] values. The final // value is not 0xff if any of the alpha[] is not equal to 0xff. uint32_t alpha_and = 0xff; @@ -265,6 +266,27 @@ static int HasAlpha32b_SSE2(const uint8_t* src, int length) { return 0; } +static void AlphaReplace_SSE2(uint32_t* src, int length, uint32_t color) { + const __m128i m_color = _mm_set1_epi32(color); + const __m128i zero = _mm_setzero_si128(); + int i = 0; + for (; i + 8 <= length; i += 8) { + const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i + 0)); + const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 4)); + const __m128i b0 = _mm_srai_epi32(a0, 24); + const __m128i b1 = _mm_srai_epi32(a1, 24); + const __m128i c0 = _mm_cmpeq_epi32(b0, zero); + const __m128i c1 = _mm_cmpeq_epi32(b1, zero); + const __m128i d0 = _mm_and_si128(c0, m_color); + const __m128i d1 = _mm_and_si128(c1, m_color); + const __m128i e0 = _mm_andnot_si128(c0, a0); + const __m128i e1 = _mm_andnot_si128(c1, a1); + _mm_storeu_si128((__m128i*)(src + i + 0), _mm_or_si128(d0, e0)); + _mm_storeu_si128((__m128i*)(src + i + 4), _mm_or_si128(d1, e1)); + } + for (; i < length; ++i) if ((src[i] >> 24) == 0) src[i] = color; +} + // ----------------------------------------------------------------------------- // Apply alpha value to rows @@ -296,7 +318,8 @@ static void MultARGBRow_SSE2(uint32_t* const ptr, int width, int inverse) { if (width > 0) WebPMultARGBRow_C(ptr + x, width, inverse); } -static void MultRow_SSE2(uint8_t* const ptr, const uint8_t* const alpha, +static void MultRow_SSE2(uint8_t* WEBP_RESTRICT const ptr, + const uint8_t* WEBP_RESTRICT const alpha, int width, int inverse) { int x = 0; if (!inverse) { @@ -334,6 +357,7 @@ WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE2(void) { WebPHasAlpha8b = HasAlpha8b_SSE2; WebPHasAlpha32b = HasAlpha32b_SSE2; + WebPAlphaReplace = AlphaReplace_SSE2; } #else // !WEBP_USE_SSE2 diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c index 56040f9c88..cdf877ce49 100644 --- a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c +++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c @@ -19,9 +19,9 @@ //------------------------------------------------------------------------------ -static int ExtractAlpha_SSE41(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride) { +static int ExtractAlpha_SSE41(const uint8_t* WEBP_RESTRICT argb, + int argb_stride, int width, int height, + uint8_t* WEBP_RESTRICT alpha, int alpha_stride) { // alpha_and stores an 'and' operation of all the alpha[] values. The final // value is not 0xff if any of the alpha[] is not equal to 0xff. uint32_t alpha_and = 0xff; diff --git a/thirdparty/libwebp/src/dsp/cost.c b/thirdparty/libwebp/src/dsp/cost.c index cc681cdd4b..460ec4f2a7 100644 --- a/thirdparty/libwebp/src/dsp/cost.c +++ b/thirdparty/libwebp/src/dsp/cost.c @@ -395,12 +395,12 @@ WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) { VP8EncDspCostInitMIPSdspR2(); } #endif -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8EncDspCostInitSSE2(); } #endif -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (VP8GetCPUInfo(kNEON)) { VP8EncDspCostInitNEON(); } diff --git a/thirdparty/libwebp/src/dsp/cpu.c b/thirdparty/libwebp/src/dsp/cpu.c index 0fa5b6a5ce..3145e190a4 100644 --- a/thirdparty/libwebp/src/dsp/cpu.c +++ b/thirdparty/libwebp/src/dsp/cpu.c @@ -55,12 +55,18 @@ static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) { : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) : "a"(info_type), "c"(0)); } -#elif (defined(_M_X64) || defined(_M_IX86)) && \ - defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1 +#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) + +#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1 #include <intrin.h> #define GetCPUInfo(info, type) __cpuidex(info, type, 0) // set ecx=0 -#elif defined(WEBP_MSC_SSE2) +#define WEBP_HAVE_MSC_CPUID +#elif _MSC_VER > 1310 +#include <intrin.h> #define GetCPUInfo __cpuid +#define WEBP_HAVE_MSC_CPUID +#endif + #endif // NaCl has no support for xgetbv or the raw opcode. @@ -94,7 +100,7 @@ static WEBP_INLINE uint64_t xgetbv(void) { #define xgetbv() 0U // no AVX for older x64 or unrecognized toolchains. #endif -#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2) +#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_HAVE_MSC_CPUID) // helper function for run-time detection of slow SSSE3 platforms static int CheckSlowModel(int info) { @@ -179,9 +185,34 @@ static int AndroidCPUInfo(CPUFeature feature) { return 0; } VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo; -#elif defined(WEBP_USE_NEON) -// define a dummy function to enable turning off NEON at runtime by setting -// VP8DecGetCPUInfo = NULL +#elif defined(EMSCRIPTEN) // also needs to be before generic NEON test +// Use compile flags as an indicator of SIMD support instead of a runtime check. +static int wasmCPUInfo(CPUFeature feature) { + switch (feature) { +#ifdef WEBP_HAVE_SSE2 + case kSSE2: + return 1; +#endif +#ifdef WEBP_HAVE_SSE41 + case kSSE3: + case kSlowSSSE3: + case kSSE4_1: + return 1; +#endif +#ifdef WEBP_HAVE_NEON + case kNEON: + return 1; +#endif + default: + break; + } + return 0; +} +VP8CPUInfo VP8GetCPUInfo = wasmCPUInfo; +#elif defined(WEBP_HAVE_NEON) +// In most cases this function doesn't check for NEON support (it's assumed by +// the configuration), but enables turning off NEON at runtime, for testing +// purposes, by setting VP8DecGetCPUInfo = NULL. static int armCPUInfo(CPUFeature feature) { if (feature != kNEON) return 0; #if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD) diff --git a/thirdparty/libwebp/src/dsp/dec.c b/thirdparty/libwebp/src/dsp/dec.c index 1119842dd3..537c701282 100644 --- a/thirdparty/libwebp/src/dsp/dec.c +++ b/thirdparty/libwebp/src/dsp/dec.c @@ -807,10 +807,10 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8DspInitSSE2(); -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { VP8DspInitSSE41(); } @@ -834,7 +834,7 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { VP8DspInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/dec_neon.c b/thirdparty/libwebp/src/dsp/dec_neon.c index 239ec4167e..fa851707e2 100644 --- a/thirdparty/libwebp/src/dsp/dec_neon.c +++ b/thirdparty/libwebp/src/dsp/dec_neon.c @@ -1283,12 +1283,12 @@ static void DC4_NEON(uint8_t* dst) { // DC const uint8x8_t A = vld1_u8(dst - BPS); // top row const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top const uint16x4_t p1 = vpadd_u16(p0, p0); - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); + const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1); + const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1); + const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1); + const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1); + const uint16x8_t s0 = vaddl_u8(L0, L1); + const uint16x8_t s1 = vaddl_u8(L2, L3); const uint16x8_t s01 = vaddq_u16(s0, s1); const uint16x8_t sum = vaddq_u16(s01, vcombine_u16(p1, p1)); const uint8x8_t dc0 = vrshrn_n_u16(sum, 3); // (sum + 4) >> 3 @@ -1429,8 +1429,7 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) { if (do_top) { const uint8x8_t A = vld1_u8(dst - BPS); // top row #if defined(__aarch64__) - const uint16x8_t B = vmovl_u8(A); - const uint16_t p2 = vaddvq_u16(B); + const uint16_t p2 = vaddlv_u8(A); sum_top = vdupq_n_u16(p2); #else const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top @@ -1441,18 +1440,18 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) { } if (do_left) { - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1)); - const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + 4 * BPS - 1)); - const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + 5 * BPS - 1)); - const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + 6 * BPS - 1)); - const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + 7 * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); - const uint16x8_t s2 = vaddq_u16(L4, L5); - const uint16x8_t s3 = vaddq_u16(L6, L7); + const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1); + const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1); + const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1); + const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1); + const uint8x8_t L4 = vld1_u8(dst + 4 * BPS - 1); + const uint8x8_t L5 = vld1_u8(dst + 5 * BPS - 1); + const uint8x8_t L6 = vld1_u8(dst + 6 * BPS - 1); + const uint8x8_t L7 = vld1_u8(dst + 7 * BPS - 1); + const uint16x8_t s0 = vaddl_u8(L0, L1); + const uint16x8_t s1 = vaddl_u8(L2, L3); + const uint16x8_t s2 = vaddl_u8(L4, L5); + const uint16x8_t s3 = vaddl_u8(L6, L7); const uint16x8_t s01 = vaddq_u16(s0, s1); const uint16x8_t s23 = vaddq_u16(s2, s3); sum_left = vaddq_u16(s01, s23); @@ -1512,29 +1511,34 @@ static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) { if (do_top) { const uint8x16_t A = vld1q_u8(dst - BPS); // top row +#if defined(__aarch64__) + const uint16_t p3 = vaddlvq_u8(A); + sum_top = vdupq_n_u16(p3); +#else const uint16x8_t p0 = vpaddlq_u8(A); // cascading summation of the top const uint16x4_t p1 = vadd_u16(vget_low_u16(p0), vget_high_u16(p0)); const uint16x4_t p2 = vpadd_u16(p1, p1); const uint16x4_t p3 = vpadd_u16(p2, p2); sum_top = vcombine_u16(p3, p3); +#endif } if (do_left) { int i; sum_left = vdupq_n_u16(0); for (i = 0; i < 16; i += 8) { - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + (i + 0) * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + (i + 1) * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + (i + 2) * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + (i + 3) * BPS - 1)); - const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + (i + 4) * BPS - 1)); - const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + (i + 5) * BPS - 1)); - const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + (i + 6) * BPS - 1)); - const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + (i + 7) * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); - const uint16x8_t s2 = vaddq_u16(L4, L5); - const uint16x8_t s3 = vaddq_u16(L6, L7); + const uint8x8_t L0 = vld1_u8(dst + (i + 0) * BPS - 1); + const uint8x8_t L1 = vld1_u8(dst + (i + 1) * BPS - 1); + const uint8x8_t L2 = vld1_u8(dst + (i + 2) * BPS - 1); + const uint8x8_t L3 = vld1_u8(dst + (i + 3) * BPS - 1); + const uint8x8_t L4 = vld1_u8(dst + (i + 4) * BPS - 1); + const uint8x8_t L5 = vld1_u8(dst + (i + 5) * BPS - 1); + const uint8x8_t L6 = vld1_u8(dst + (i + 6) * BPS - 1); + const uint8x8_t L7 = vld1_u8(dst + (i + 7) * BPS - 1); + const uint16x8_t s0 = vaddl_u8(L0, L1); + const uint16x8_t s1 = vaddl_u8(L2, L3); + const uint16x8_t s2 = vaddl_u8(L4, L5); + const uint16x8_t s3 = vaddl_u8(L6, L7); const uint16x8_t s01 = vaddq_u16(s0, s1); const uint16x8_t s23 = vaddq_u16(s2, s3); const uint16x8_t sum = vaddq_u16(s01, s23); diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h index a784de334a..513e159bb3 100644 --- a/thirdparty/libwebp/src/dsp/dsp.h +++ b/thirdparty/libwebp/src/dsp/dsp.h @@ -27,6 +27,23 @@ extern "C" { #define BPS 32 // this is the common stride for enc/dec //------------------------------------------------------------------------------ +// WEBP_RESTRICT + +// Declares a pointer with the restrict type qualifier if available. +// This allows code to hint to the compiler that only this pointer references a +// particular object or memory region within the scope of the block in which it +// is declared. This may allow for improved optimizations due to the lack of +// pointer aliasing. See also: +// https://en.cppreference.com/w/c/language/restrict +#if defined(__GNUC__) +#define WEBP_RESTRICT __restrict__ +#elif defined(_MSC_VER) +#define WEBP_RESTRICT __restrict +#else +#define WEBP_RESTRICT +#endif + +//------------------------------------------------------------------------------ // CPU detection #if defined(__GNUC__) @@ -51,9 +68,7 @@ extern "C" { # define __has_builtin(x) 0 #endif -// for now, none of the optimizations below are available in emscripten -#if !defined(EMSCRIPTEN) - +#if !defined(HAVE_CONFIG_H) #if defined(_MSC_VER) && _MSC_VER > 1310 && \ (defined(_M_X64) || defined(_M_IX86)) #define WEBP_MSC_SSE2 // Visual C++ SSE2 targets @@ -63,23 +78,37 @@ extern "C" { (defined(_M_X64) || defined(_M_IX86)) #define WEBP_MSC_SSE41 // Visual C++ SSE4.1 targets #endif +#endif // WEBP_HAVE_* are used to indicate the presence of the instruction set in dsp // files without intrinsics, allowing the corresponding Init() to be called. // Files containing intrinsics will need to be built targeting the instruction // set so should succeed on one of the earlier tests. -#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) || defined(WEBP_HAVE_SSE2) +#if (defined(__SSE2__) || defined(WEBP_MSC_SSE2)) && \ + (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE2)) #define WEBP_USE_SSE2 #endif -#if defined(__SSE4_1__) || defined(WEBP_MSC_SSE41) || defined(WEBP_HAVE_SSE41) +#if defined(WEBP_USE_SSE2) && !defined(WEBP_HAVE_SSE2) +#define WEBP_HAVE_SSE2 +#endif + +#if (defined(__SSE4_1__) || defined(WEBP_MSC_SSE41)) && \ + (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE41)) #define WEBP_USE_SSE41 #endif +#if defined(WEBP_USE_SSE41) && !defined(WEBP_HAVE_SSE41) +#define WEBP_HAVE_SSE41 +#endif + +#undef WEBP_MSC_SSE41 +#undef WEBP_MSC_SSE2 + // The intrinsics currently cause compiler errors with arm-nacl-gcc and the // inline assembly would need to be modified for use with Native Client. -#if (defined(__ARM_NEON__) || \ - defined(__aarch64__) || defined(WEBP_HAVE_NEON)) && \ +#if ((defined(__ARM_NEON__) || defined(__aarch64__)) && \ + (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_NEON))) && \ !defined(__native_client__) #define WEBP_USE_NEON #endif @@ -95,6 +124,10 @@ extern "C" { #define WEBP_USE_INTRINSICS #endif +#if defined(WEBP_USE_NEON) && !defined(WEBP_HAVE_NEON) +#define WEBP_HAVE_NEON +#endif + #if defined(__mips__) && !defined(__mips64) && \ defined(__mips_isa_rev) && (__mips_isa_rev >= 1) && (__mips_isa_rev < 6) #define WEBP_USE_MIPS32 @@ -110,13 +143,11 @@ extern "C" { #define WEBP_USE_MSA #endif -#endif /* EMSCRIPTEN */ - #ifndef WEBP_DSP_OMIT_C_CODE #define WEBP_DSP_OMIT_C_CODE 1 #endif -#if (defined(__aarch64__) || defined(__ARM_NEON__)) && WEBP_DSP_OMIT_C_CODE +#if defined(WEBP_USE_NEON) && WEBP_DSP_OMIT_C_CODE #define WEBP_NEON_OMIT_C_CODE 1 #else #define WEBP_NEON_OMIT_C_CODE 0 @@ -193,6 +224,12 @@ extern "C" { #endif #endif +// If 'ptr' is NULL, returns NULL. Otherwise returns 'ptr + off'. +// Prevents undefined behavior sanitizer nullptr-with-nonzero-offset warning. +#if !defined(WEBP_OFFSET_PTR) +#define WEBP_OFFSET_PTR(ptr, off) (((ptr) == NULL) ? NULL : ((ptr) + (off))) +#endif + // Regularize the definition of WEBP_SWAP_16BIT_CSP (backward compatibility) #if !defined(WEBP_SWAP_16BIT_CSP) #define WEBP_SWAP_16BIT_CSP 0 @@ -572,26 +609,29 @@ extern void (*WebPApplyAlphaMultiply4444)( // Dispatch the values from alpha[] plane to the ARGB destination 'dst'. // Returns true if alpha[] plane has non-trivial values different from 0xff. -extern int (*WebPDispatchAlpha)(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride); +extern int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint8_t* WEBP_RESTRICT dst, int dst_stride); // Transfer packed 8b alpha[] values to green channel in dst[], zero'ing the // A/R/B values. 'dst_stride' is the stride for dst[] in uint32_t units. -extern void (*WebPDispatchAlphaToGreen)(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride); +extern void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT alpha, + int alpha_stride, int width, int height, + uint32_t* WEBP_RESTRICT dst, + int dst_stride); // Extract the alpha values from 32b values in argb[] and pack them into alpha[] // (this is the opposite of WebPDispatchAlpha). // Returns true if there's only trivial 0xff alpha values. -extern int (*WebPExtractAlpha)(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride); +extern int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT argb, + int argb_stride, int width, int height, + uint8_t* WEBP_RESTRICT alpha, + int alpha_stride); // Extract the green values from 32b values in argb[] and pack them into alpha[] // (this is the opposite of WebPDispatchAlphaToGreen). -extern void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size); +extern void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb, + uint8_t* WEBP_RESTRICT alpha, int size); // Pre-Multiply operation transforms x into x * A / 255 (where x=Y,R,G or B). // Un-Multiply operation transforms x into x * 255 / A. @@ -604,34 +644,42 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows, int inverse); // Same for a row of single values, with side alpha values. -extern void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha, +extern void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr, + const uint8_t* WEBP_RESTRICT const alpha, int width, int inverse); // Same a WebPMultRow(), but for several 'num_rows' rows. -void WebPMultRows(uint8_t* ptr, int stride, - const uint8_t* alpha, int alpha_stride, +void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride, + const uint8_t* WEBP_RESTRICT alpha, int alpha_stride, int width, int num_rows, int inverse); // Plain-C versions, used as fallback by some implementations. -void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha, +void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr, + const uint8_t* WEBP_RESTRICT const alpha, int width, int inverse); void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse); #ifdef WORDS_BIGENDIAN // ARGB packing function: a/r/g/b input is rgba or bgra order. -extern void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, - const uint8_t* g, const uint8_t* b, int len, - uint32_t* out); +extern void (*WebPPackARGB)(const uint8_t* WEBP_RESTRICT a, + const uint8_t* WEBP_RESTRICT r, + const uint8_t* WEBP_RESTRICT g, + const uint8_t* WEBP_RESTRICT b, + int len, uint32_t* WEBP_RESTRICT out); #endif // RGB packing function. 'step' can be 3 or 4. r/g/b input is rgb or bgr order. -extern void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out); +extern void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r, + const uint8_t* WEBP_RESTRICT g, + const uint8_t* WEBP_RESTRICT b, + int len, int step, uint32_t* WEBP_RESTRICT out); // This function returns true if src[i] contains a value different from 0xff. extern int (*WebPHasAlpha8b)(const uint8_t* src, int length); // This function returns true if src[4*i] contains a value different from 0xff. extern int (*WebPHasAlpha32b)(const uint8_t* src, int length); +// replaces transparent values in src[] by 'color'. +extern void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color); // To be called first before using the above. void WebPInitAlphaProcessing(void); diff --git a/thirdparty/libwebp/src/dsp/enc.c b/thirdparty/libwebp/src/dsp/enc.c index 2fddbc4c52..ea47a3fd95 100644 --- a/thirdparty/libwebp/src/dsp/enc.c +++ b/thirdparty/libwebp/src/dsp/enc.c @@ -773,10 +773,10 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8EncDspInitSSE2(); -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { VP8EncDspInitSSE41(); } @@ -800,7 +800,7 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { VP8EncDspInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/filters.c b/thirdparty/libwebp/src/dsp/filters.c index 9e910d99c9..4506567ba3 100644 --- a/thirdparty/libwebp/src/dsp/filters.c +++ b/thirdparty/libwebp/src/dsp/filters.c @@ -254,7 +254,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) { #endif if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8FiltersInitSSE2(); } @@ -271,7 +271,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { VP8FiltersInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/filters_sse2.c b/thirdparty/libwebp/src/dsp/filters_sse2.c index 4b3f2d020f..5c33ec15e2 100644 --- a/thirdparty/libwebp/src/dsp/filters_sse2.c +++ b/thirdparty/libwebp/src/dsp/filters_sse2.c @@ -320,7 +320,12 @@ extern void VP8FiltersInitSSE2(void); WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitSSE2(void) { WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_SSE2; +#if defined(CHROMIUM) + // TODO(crbug.com/654974) + (void)VerticalUnfilter_SSE2; +#else WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_SSE2; +#endif WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_SSE2; WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_SSE2; diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c index aad5f43ec9..d8bbb02b35 100644 --- a/thirdparty/libwebp/src/dsp/lossless.c +++ b/thirdparty/libwebp/src/dsp/lossless.c @@ -107,62 +107,62 @@ static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) { //------------------------------------------------------------------------------ // Predictors -static uint32_t Predictor0_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top) { (void)top; (void)left; return ARGB_BLACK; } -static uint32_t Predictor1_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top) { (void)top; return left; } -static uint32_t Predictor2_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top) { (void)left; return top[0]; } -static uint32_t Predictor3_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top) { (void)left; return top[1]; } -static uint32_t Predictor4_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top) { (void)left; return top[-1]; } -static uint32_t Predictor5_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average3(left, top[0], top[1]); return pred; } -static uint32_t Predictor6_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average2(left, top[-1]); return pred; } -static uint32_t Predictor7_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average2(left, top[0]); return pred; } -static uint32_t Predictor8_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average2(top[-1], top[0]); (void)left; return pred; } -static uint32_t Predictor9_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average2(top[0], top[1]); (void)left; return pred; } -static uint32_t Predictor10_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Average4(left, top[-1], top[0], top[1]); return pred; } -static uint32_t Predictor11_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = Select(top[0], left, top[-1]); return pred; } -static uint32_t Predictor12_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]); return pred; } -static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) { +uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top) { const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]); return pred; } @@ -182,18 +182,18 @@ static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper, out[i] = left = VP8LAddPixels(in[i], left); } } -GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C) -GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C) -GENERATE_PREDICTOR_ADD(Predictor4_C, PredictorAdd4_C) -GENERATE_PREDICTOR_ADD(Predictor5_C, PredictorAdd5_C) -GENERATE_PREDICTOR_ADD(Predictor6_C, PredictorAdd6_C) -GENERATE_PREDICTOR_ADD(Predictor7_C, PredictorAdd7_C) -GENERATE_PREDICTOR_ADD(Predictor8_C, PredictorAdd8_C) -GENERATE_PREDICTOR_ADD(Predictor9_C, PredictorAdd9_C) -GENERATE_PREDICTOR_ADD(Predictor10_C, PredictorAdd10_C) -GENERATE_PREDICTOR_ADD(Predictor11_C, PredictorAdd11_C) -GENERATE_PREDICTOR_ADD(Predictor12_C, PredictorAdd12_C) -GENERATE_PREDICTOR_ADD(Predictor13_C, PredictorAdd13_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor2_C, PredictorAdd2_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor3_C, PredictorAdd3_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor4_C, PredictorAdd4_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor5_C, PredictorAdd5_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor6_C, PredictorAdd6_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor7_C, PredictorAdd7_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor8_C, PredictorAdd8_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor9_C, PredictorAdd9_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor10_C, PredictorAdd10_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor11_C, PredictorAdd11_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor12_C, PredictorAdd12_C) +GENERATE_PREDICTOR_ADD(VP8LPredictor13_C, PredictorAdd13_C) //------------------------------------------------------------------------------ @@ -562,7 +562,6 @@ VP8LPredictorFunc VP8LPredictors[16]; // exposed plain-C implementations VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16]; -VP8LPredictorFunc VP8LPredictors_C[16]; VP8LTransformColorInverseFunc VP8LTransformColorInverse; @@ -576,6 +575,7 @@ VP8LMapARGBFunc VP8LMapColor32b; VP8LMapAlphaFunc VP8LMapColor8b; extern void VP8LDspInitSSE2(void); +extern void VP8LDspInitSSE41(void); extern void VP8LDspInitNEON(void); extern void VP8LDspInitMIPSdspR2(void); extern void VP8LDspInitMSA(void); @@ -600,8 +600,7 @@ extern void VP8LDspInitMSA(void); } while (0); WEBP_DSP_INIT_FUNC(VP8LDspInit) { - COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors) - COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors_C) + COPY_PREDICTOR_ARRAY(VP8LPredictor, VP8LPredictors) COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd) COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd_C) @@ -623,9 +622,14 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8LDspInitSSE2(); +#if defined(WEBP_HAVE_SSE41) + if (VP8GetCPUInfo(kSSE4_1)) { + VP8LDspInitSSE41(); + } +#endif } #endif #if defined(WEBP_USE_MIPS_DSP_R2) @@ -640,7 +644,7 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { VP8LDspInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/lossless.h b/thirdparty/libwebp/src/dsp/lossless.h index f709cc86b2..ebd316d1ed 100644 --- a/thirdparty/libwebp/src/dsp/lossless.h +++ b/thirdparty/libwebp/src/dsp/lossless.h @@ -30,7 +30,22 @@ extern "C" { typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top); extern VP8LPredictorFunc VP8LPredictors[16]; -extern VP8LPredictorFunc VP8LPredictors_C[16]; + +uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top); +uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top); + // These Add/Sub function expects upper[-1] and out[-1] to be readable. typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in, const uint32_t* upper, int num_pixels, diff --git a/thirdparty/libwebp/src/dsp/lossless_common.h b/thirdparty/libwebp/src/dsp/lossless_common.h index 9c2ebe6809..96a106f9ee 100644 --- a/thirdparty/libwebp/src/dsp/lossless_common.h +++ b/thirdparty/libwebp/src/dsp/lossless_common.h @@ -184,19 +184,6 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \ } \ } -// It subtracts the prediction from the input pixel and stores the residual -// in the output pixel. -#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB) \ -static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int x; \ - assert(upper != NULL); \ - for (x = 0; x < num_pixels; ++x) { \ - const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \ - out[x] = VP8LSubPixels(in[x], pred); \ - } \ -} - #ifdef __cplusplus } // extern "C" #endif diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c index 9c36055afc..c3e8537ade 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc.c @@ -329,6 +329,15 @@ const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX] = { static float FastSLog2Slow_C(uint32_t v) { assert(v >= LOG_LOOKUP_IDX_MAX); if (v < APPROX_LOG_WITH_CORRECTION_MAX) { +#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ) + // use clz if available + const int log_cnt = BitsLog2Floor(v) - 7; + const uint32_t y = 1 << log_cnt; + int correction = 0; + const float v_f = (float)v; + const uint32_t orig_v = v; + v >>= log_cnt; +#else int log_cnt = 0; uint32_t y = 1; int correction = 0; @@ -339,6 +348,7 @@ static float FastSLog2Slow_C(uint32_t v) { v = v >> 1; y = y << 1; } while (v >= LOG_LOOKUP_IDX_MAX); +#endif // vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256 // Xf = floor(Xf) * (1 + (v % y) / v) // log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v) @@ -355,6 +365,14 @@ static float FastSLog2Slow_C(uint32_t v) { static float FastLog2Slow_C(uint32_t v) { assert(v >= LOG_LOOKUP_IDX_MAX); if (v < APPROX_LOG_WITH_CORRECTION_MAX) { +#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ) + // use clz if available + const int log_cnt = BitsLog2Floor(v) - 7; + const uint32_t y = 1 << log_cnt; + const uint32_t orig_v = v; + double log_2; + v >>= log_cnt; +#else int log_cnt = 0; uint32_t y = 1; const uint32_t orig_v = v; @@ -364,6 +382,7 @@ static float FastLog2Slow_C(uint32_t v) { v = v >> 1; y = y << 1; } while (v >= LOG_LOOKUP_IDX_MAX); +#endif log_2 = kLog2Table[v] + log_cnt; if (orig_v >= APPROX_LOG_MAX) { // Since the division is still expensive, add this correction factor only @@ -702,140 +721,6 @@ void VP8LHistogramAdd(const VP8LHistogram* const a, //------------------------------------------------------------------------------ // Image transforms. -static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) { - return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1); -} - -static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) { - return Average2(Average2(a0, a2), a1); -} - -static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1, - uint32_t a2, uint32_t a3) { - return Average2(Average2(a0, a1), Average2(a2, a3)); -} - -static WEBP_INLINE uint32_t Clip255(uint32_t a) { - if (a < 256) { - return a; - } - // return 0, when a is a negative integer. - // return 255, when a is positive. - return ~a >> 24; -} - -static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) { - return Clip255(a + b - c); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1, - uint32_t c2) { - const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24); - const int r = AddSubtractComponentFull((c0 >> 16) & 0xff, - (c1 >> 16) & 0xff, - (c2 >> 16) & 0xff); - const int g = AddSubtractComponentFull((c0 >> 8) & 0xff, - (c1 >> 8) & 0xff, - (c2 >> 8) & 0xff); - const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) { - return Clip255(a + (a - b) / 2); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1, - uint32_t c2) { - const uint32_t ave = Average2(c0, c1); - const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24); - const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff); - const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff); - const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -// gcc-4.9 on ARM generates incorrect code in Select() when Sub3() is inlined. -#if defined(__arm__) && \ - (LOCAL_GCC_VERSION == 0x409 || LOCAL_GCC_VERSION == 0x408) -# define LOCAL_INLINE __attribute__ ((noinline)) -#else -# define LOCAL_INLINE WEBP_INLINE -#endif - -static LOCAL_INLINE int Sub3(int a, int b, int c) { - const int pb = b - c; - const int pa = a - c; - return abs(pb) - abs(pa); -} - -#undef LOCAL_INLINE - -static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) { - const int pa_minus_pb = - Sub3((a >> 24) , (b >> 24) , (c >> 24) ) + - Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) + - Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) + - Sub3((a ) & 0xff, (b ) & 0xff, (c ) & 0xff); - return (pa_minus_pb <= 0) ? a : b; -} - -//------------------------------------------------------------------------------ -// Predictors - -static uint32_t Predictor2(uint32_t left, const uint32_t* const top) { - (void)left; - return top[0]; -} -static uint32_t Predictor3(uint32_t left, const uint32_t* const top) { - (void)left; - return top[1]; -} -static uint32_t Predictor4(uint32_t left, const uint32_t* const top) { - (void)left; - return top[-1]; -} -static uint32_t Predictor5(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average3(left, top[0], top[1]); - return pred; -} -static uint32_t Predictor6(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[-1]); - return pred; -} -static uint32_t Predictor7(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[0]); - return pred; -} -static uint32_t Predictor8(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[-1], top[0]); - (void)left; - return pred; -} -static uint32_t Predictor9(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[0], top[1]); - (void)left; - return pred; -} -static uint32_t Predictor10(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average4(left, top[-1], top[0], top[1]); - return pred; -} -static uint32_t Predictor11(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Select(top[0], left, top[-1]); - return pred; -} -static uint32_t Predictor12(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]); - return pred; -} -static uint32_t Predictor13(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]); - return pred; -} - -//------------------------------------------------------------------------------ - static void PredictorSub0_C(const uint32_t* in, const uint32_t* upper, int num_pixels, uint32_t* out) { int i; @@ -850,18 +735,33 @@ static void PredictorSub1_C(const uint32_t* in, const uint32_t* upper, (void)upper; } -GENERATE_PREDICTOR_SUB(Predictor2, PredictorSub2_C) -GENERATE_PREDICTOR_SUB(Predictor3, PredictorSub3_C) -GENERATE_PREDICTOR_SUB(Predictor4, PredictorSub4_C) -GENERATE_PREDICTOR_SUB(Predictor5, PredictorSub5_C) -GENERATE_PREDICTOR_SUB(Predictor6, PredictorSub6_C) -GENERATE_PREDICTOR_SUB(Predictor7, PredictorSub7_C) -GENERATE_PREDICTOR_SUB(Predictor8, PredictorSub8_C) -GENERATE_PREDICTOR_SUB(Predictor9, PredictorSub9_C) -GENERATE_PREDICTOR_SUB(Predictor10, PredictorSub10_C) -GENERATE_PREDICTOR_SUB(Predictor11, PredictorSub11_C) -GENERATE_PREDICTOR_SUB(Predictor12, PredictorSub12_C) -GENERATE_PREDICTOR_SUB(Predictor13, PredictorSub13_C) +// It subtracts the prediction from the input pixel and stores the residual +// in the output pixel. +#define GENERATE_PREDICTOR_SUB(PREDICTOR_I) \ +static void PredictorSub##PREDICTOR_I##_C(const uint32_t* in, \ + const uint32_t* upper, \ + int num_pixels, uint32_t* out) { \ + int x; \ + assert(upper != NULL); \ + for (x = 0; x < num_pixels; ++x) { \ + const uint32_t pred = \ + VP8LPredictor##PREDICTOR_I##_C(in[x - 1], upper + x); \ + out[x] = VP8LSubPixels(in[x], pred); \ + } \ +} + +GENERATE_PREDICTOR_SUB(2) +GENERATE_PREDICTOR_SUB(3) +GENERATE_PREDICTOR_SUB(4) +GENERATE_PREDICTOR_SUB(5) +GENERATE_PREDICTOR_SUB(6) +GENERATE_PREDICTOR_SUB(7) +GENERATE_PREDICTOR_SUB(8) +GENERATE_PREDICTOR_SUB(9) +GENERATE_PREDICTOR_SUB(10) +GENERATE_PREDICTOR_SUB(11) +GENERATE_PREDICTOR_SUB(12) +GENERATE_PREDICTOR_SUB(13) //------------------------------------------------------------------------------ @@ -962,10 +862,10 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8LEncDspInitSSE2(); -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { VP8LEncDspInitSSE41(); } @@ -989,7 +889,7 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { VP8LEncDspInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c index e676f6fdc9..b2f83b871c 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c @@ -232,76 +232,55 @@ static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) { //------------------------------------------------------------------------------ // Entropy -// Checks whether the X or Y contribution is worth computing and adding. -// Used in loop unrolling. -#define ANALYZE_X_OR_Y(x_or_y, j) \ - do { \ - if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \ - } while (0) - -// Checks whether the X + Y contribution is worth computing and adding. -// Used in loop unrolling. -#define ANALYZE_XY(j) \ - do { \ - if (tmp[j] != 0) { \ - retval -= VP8LFastSLog2(tmp[j]); \ - ANALYZE_X_OR_Y(X, j); \ - } \ - } while (0) +// TODO(https://crbug.com/webp/499): this function produces different results +// from the C code due to use of double/float resulting in output differences +// when compared to -noasm. +#if !(defined(WEBP_HAVE_SLOW_CLZ_CTZ) || defined(__i386__) || defined(_M_IX86)) static float CombinedShannonEntropy_SSE2(const int X[256], const int Y[256]) { int i; double retval = 0.; - int sumX, sumXY; - int32_t tmp[4]; - __m128i zero = _mm_setzero_si128(); - // Sums up X + Y, 4 ints at a time (and will merge it at the end for sumXY). - __m128i sumXY_128 = zero; - __m128i sumX_128 = zero; - - for (i = 0; i < 256; i += 4) { - const __m128i x = _mm_loadu_si128((const __m128i*)(X + i)); - const __m128i y = _mm_loadu_si128((const __m128i*)(Y + i)); - - // Check if any X is non-zero: this actually provides a speedup as X is - // usually sparse. - if (_mm_movemask_epi8(_mm_cmpeq_epi32(x, zero)) != 0xFFFF) { - const __m128i xy_128 = _mm_add_epi32(x, y); - sumXY_128 = _mm_add_epi32(sumXY_128, xy_128); - - sumX_128 = _mm_add_epi32(sumX_128, x); - - // Analyze the different X + Y. - _mm_storeu_si128((__m128i*)tmp, xy_128); - - ANALYZE_XY(0); - ANALYZE_XY(1); - ANALYZE_XY(2); - ANALYZE_XY(3); - } else { - // X is fully 0, so only deal with Y. - sumXY_128 = _mm_add_epi32(sumXY_128, y); - - ANALYZE_X_OR_Y(Y, 0); - ANALYZE_X_OR_Y(Y, 1); - ANALYZE_X_OR_Y(Y, 2); - ANALYZE_X_OR_Y(Y, 3); + int sumX = 0, sumXY = 0; + const __m128i zero = _mm_setzero_si128(); + + for (i = 0; i < 256; i += 16) { + const __m128i x0 = _mm_loadu_si128((const __m128i*)(X + i + 0)); + const __m128i y0 = _mm_loadu_si128((const __m128i*)(Y + i + 0)); + const __m128i x1 = _mm_loadu_si128((const __m128i*)(X + i + 4)); + const __m128i y1 = _mm_loadu_si128((const __m128i*)(Y + i + 4)); + const __m128i x2 = _mm_loadu_si128((const __m128i*)(X + i + 8)); + const __m128i y2 = _mm_loadu_si128((const __m128i*)(Y + i + 8)); + const __m128i x3 = _mm_loadu_si128((const __m128i*)(X + i + 12)); + const __m128i y3 = _mm_loadu_si128((const __m128i*)(Y + i + 12)); + const __m128i x4 = _mm_packs_epi16(_mm_packs_epi32(x0, x1), + _mm_packs_epi32(x2, x3)); + const __m128i y4 = _mm_packs_epi16(_mm_packs_epi32(y0, y1), + _mm_packs_epi32(y2, y3)); + const int32_t mx = _mm_movemask_epi8(_mm_cmpgt_epi8(x4, zero)); + int32_t my = _mm_movemask_epi8(_mm_cmpgt_epi8(y4, zero)) | mx; + while (my) { + const int32_t j = BitsCtz(my); + int xy; + if ((mx >> j) & 1) { + const int x = X[i + j]; + sumXY += x; + retval -= VP8LFastSLog2(x); + } + xy = X[i + j] + Y[i + j]; + sumX += xy; + retval -= VP8LFastSLog2(xy); + my &= my - 1; } } - - // Sum up sumX_128 to get sumX. - _mm_storeu_si128((__m128i*)tmp, sumX_128); - sumX = tmp[3] + tmp[2] + tmp[1] + tmp[0]; - - // Sum up sumXY_128 to get sumXY. - _mm_storeu_si128((__m128i*)tmp, sumXY_128); - sumXY = tmp[3] + tmp[2] + tmp[1] + tmp[0]; - retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY); return (float)retval; } -#undef ANALYZE_X_OR_Y -#undef ANALYZE_XY + +#else + +#define DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC // won't be faster + +#endif //------------------------------------------------------------------------------ @@ -460,20 +439,22 @@ static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper, (void)upper; } -#define GENERATE_PREDICTOR_1(X, IN) \ -static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ - const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \ - const __m128i res = _mm_sub_epi8(src, pred); \ - _mm_storeu_si128((__m128i*)&out[i], res); \ - } \ - if (i != num_pixels) { \ - VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ - } \ -} +#define GENERATE_PREDICTOR_1(X, IN) \ + static void PredictorSub##X##_SSE2(const uint32_t* const in, \ + const uint32_t* const upper, \ + int num_pixels, uint32_t* const out) { \ + int i; \ + for (i = 0; i + 4 <= num_pixels; i += 4) { \ + const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ + const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \ + const __m128i res = _mm_sub_epi8(src, pred); \ + _mm_storeu_si128((__m128i*)&out[i], res); \ + } \ + if (i != num_pixels) { \ + VP8LPredictorsSub_C[(X)](in + i, WEBP_OFFSET_PTR(upper, i), \ + num_pixels - i, out + i); \ + } \ + } GENERATE_PREDICTOR_1(1, in[i - 1]) // Predictor1: L GENERATE_PREDICTOR_1(2, upper[i]) // Predictor2: T @@ -657,7 +638,9 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) { VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2; VP8LAddVector = AddVector_SSE2; VP8LAddVectorEq = AddVectorEq_SSE2; +#if !defined(DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC) VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2; +#endif VP8LVectorMismatch = VectorMismatch_SSE2; VP8LBundleColorMap = BundleColorMap_SSE2; diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c index 719d8ed25e..ad358a6f25 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c @@ -44,46 +44,47 @@ static void SubtractGreenFromBlueAndRed_SSE41(uint32_t* argb_data, //------------------------------------------------------------------------------ // Color Transform -#define SPAN 8 +#define MK_CST_16(HI, LO) \ + _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff))) + static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride, int tile_width, int tile_height, int green_to_blue, int red_to_blue, int histo[]) { - const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue)); - const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue)); - const __m128i mask_g = _mm_set1_epi16((short)0xff00); // green mask - const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask - const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask - const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1, - -1, -1, -1, -1, -1, -1, -1); - const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, - 2, -1, 6, -1, 10, -1, 14); - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i r0 = _mm_shuffle_epi8(in0, shuffler_lo); - const __m128i r1 = _mm_shuffle_epi8(in1, shuffler_hi); - const __m128i r = _mm_or_si128(r0, r1); // r 0 - const __m128i gb0 = _mm_and_si128(in0, mask_gb); - const __m128i gb1 = _mm_and_si128(in1, mask_gb); - const __m128i gb = _mm_packus_epi32(gb0, gb1); // g b - const __m128i g = _mm_and_si128(gb, mask_g); // g 0 - const __m128i A = _mm_mulhi_epi16(r, mults_r); // x dbr - const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dbg - const __m128i C = _mm_sub_epi8(gb, B); // x b' - const __m128i D = _mm_sub_epi8(C, A); // x b'' - const __m128i E = _mm_and_si128(D, mask_b); // 0 b'' - _mm_storeu_si128((__m128i*)values, E); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; + const __m128i mult = + MK_CST_16(CST_5b(red_to_blue) + 256,CST_5b(green_to_blue)); + const __m128i perm = + _mm_setr_epi8(-1, 1, -1, 2, -1, 5, -1, 6, -1, 9, -1, 10, -1, 13, -1, 14); + if (tile_width >= 4) { + int y; + for (y = 0; y < tile_height; ++y) { + const uint32_t* const src = argb + y * stride; + const __m128i A1 = _mm_loadu_si128((const __m128i*)src); + const __m128i B1 = _mm_shuffle_epi8(A1, perm); + const __m128i C1 = _mm_mulhi_epi16(B1, mult); + const __m128i D1 = _mm_sub_epi16(A1, C1); + __m128i E = _mm_add_epi16(_mm_srli_epi32(D1, 16), D1); + int x; + for (x = 4; x + 4 <= tile_width; x += 4) { + const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x)); + __m128i B2, C2, D2; + ++histo[_mm_extract_epi8(E, 0)]; + B2 = _mm_shuffle_epi8(A2, perm); + ++histo[_mm_extract_epi8(E, 4)]; + C2 = _mm_mulhi_epi16(B2, mult); + ++histo[_mm_extract_epi8(E, 8)]; + D2 = _mm_sub_epi16(A2, C2); + ++histo[_mm_extract_epi8(E, 12)]; + E = _mm_add_epi16(_mm_srli_epi32(D2, 16), D2); + } + ++histo[_mm_extract_epi8(E, 0)]; + ++histo[_mm_extract_epi8(E, 4)]; + ++histo[_mm_extract_epi8(E, 8)]; + ++histo[_mm_extract_epi8(E, 12)]; } } { - const int left_over = tile_width & (SPAN - 1); + const int left_over = tile_width & 3; if (left_over > 0) { VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride, left_over, tile_height, @@ -95,33 +96,37 @@ static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride, static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride, int tile_width, int tile_height, int green_to_red, int histo[]) { - const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_red)); - const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask - const __m128i mask = _mm_set1_epi16(0xff); - - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i g0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0 - const __m128i g1 = _mm_and_si128(in1, mask_g); - const __m128i g = _mm_packus_epi32(g0, g1); // g 0 - const __m128i A0 = _mm_srli_epi32(in0, 16); // 0 0 | x r - const __m128i A1 = _mm_srli_epi32(in1, 16); - const __m128i A = _mm_packus_epi32(A0, A1); // x r - const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dr - const __m128i C = _mm_sub_epi8(A, B); // x r' - const __m128i D = _mm_and_si128(C, mask); // 0 r' - _mm_storeu_si128((__m128i*)values, D); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; + + const __m128i mult = MK_CST_16(0, CST_5b(green_to_red)); + const __m128i mask_g = _mm_set1_epi32(0x0000ff00); + if (tile_width >= 4) { + int y; + for (y = 0; y < tile_height; ++y) { + const uint32_t* const src = argb + y * stride; + const __m128i A1 = _mm_loadu_si128((const __m128i*)src); + const __m128i B1 = _mm_and_si128(A1, mask_g); + const __m128i C1 = _mm_madd_epi16(B1, mult); + __m128i D = _mm_sub_epi16(A1, C1); + int x; + for (x = 4; x + 4 <= tile_width; x += 4) { + const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x)); + __m128i B2, C2; + ++histo[_mm_extract_epi8(D, 2)]; + B2 = _mm_and_si128(A2, mask_g); + ++histo[_mm_extract_epi8(D, 6)]; + C2 = _mm_madd_epi16(B2, mult); + ++histo[_mm_extract_epi8(D, 10)]; + ++histo[_mm_extract_epi8(D, 14)]; + D = _mm_sub_epi16(A2, C2); + } + ++histo[_mm_extract_epi8(D, 2)]; + ++histo[_mm_extract_epi8(D, 6)]; + ++histo[_mm_extract_epi8(D, 10)]; + ++histo[_mm_extract_epi8(D, 14)]; } } { - const int left_over = tile_width & (SPAN - 1); + const int left_over = tile_width & 3; if (left_over > 0) { VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride, left_over, tile_height, green_to_red, @@ -130,6 +135,8 @@ static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride, } } +#undef MK_CST_16 + //------------------------------------------------------------------------------ // Entry point diff --git a/thirdparty/libwebp/src/dsp/lossless_sse2.c b/thirdparty/libwebp/src/dsp/lossless_sse2.c index aef0cee1b3..3a0eb440db 100644 --- a/thirdparty/libwebp/src/dsp/lossless_sse2.c +++ b/thirdparty/libwebp/src/dsp/lossless_sse2.c @@ -18,7 +18,6 @@ #include "src/dsp/common_sse2.h" #include "src/dsp/lossless.h" #include "src/dsp/lossless_common.h" -#include <assert.h> #include <emmintrin.h> //------------------------------------------------------------------------------ diff --git a/thirdparty/libwebp/src/dsp/lossless_sse41.c b/thirdparty/libwebp/src/dsp/lossless_sse41.c new file mode 100644 index 0000000000..b0d6daa7fe --- /dev/null +++ b/thirdparty/libwebp/src/dsp/lossless_sse41.c @@ -0,0 +1,132 @@ +// Copyright 2021 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// SSE41 variant of methods for lossless decoder + +#include "src/dsp/dsp.h" + +#if defined(WEBP_USE_SSE41) + +#include "src/dsp/common_sse41.h" +#include "src/dsp/lossless.h" +#include "src/dsp/lossless_common.h" + +//------------------------------------------------------------------------------ +// Color-space conversion functions + +static void TransformColorInverse_SSE41(const VP8LMultipliers* const m, + const uint32_t* const src, + int num_pixels, uint32_t* dst) { +// sign-extended multiplying constants, pre-shifted by 5. +#define CST(X) (((int16_t)(m->X << 8)) >> 5) // sign-extend + const __m128i mults_rb = _mm_set1_epi32((uint32_t)CST(green_to_red_) << 16 | + (CST(green_to_blue_) & 0xffff)); + const __m128i mults_b2 = _mm_set1_epi32(CST(red_to_blue_)); +#undef CST + const __m128i mask_ag = _mm_set1_epi32(0xff00ff00); + const __m128i perm1 = _mm_setr_epi8(-1, 1, -1, 1, -1, 5, -1, 5, + -1, 9, -1, 9, -1, 13, -1, 13); + const __m128i perm2 = _mm_setr_epi8(-1, 2, -1, -1, -1, 6, -1, -1, + -1, 10, -1, -1, -1, 14, -1, -1); + int i; + for (i = 0; i + 4 <= num_pixels; i += 4) { + const __m128i A = _mm_loadu_si128((const __m128i*)(src + i)); + const __m128i B = _mm_shuffle_epi8(A, perm1); // argb -> g0g0 + const __m128i C = _mm_mulhi_epi16(B, mults_rb); + const __m128i D = _mm_add_epi8(A, C); + const __m128i E = _mm_shuffle_epi8(D, perm2); + const __m128i F = _mm_mulhi_epi16(E, mults_b2); + const __m128i G = _mm_add_epi8(D, F); + const __m128i out = _mm_blendv_epi8(G, A, mask_ag); + _mm_storeu_si128((__m128i*)&dst[i], out); + } + // Fall-back to C-version for left-overs. + if (i != num_pixels) { + VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i); + } +} + +//------------------------------------------------------------------------------ + +#define ARGB_TO_RGB_SSE41 do { \ + while (num_pixels >= 16) { \ + const __m128i in0 = _mm_loadu_si128(in + 0); \ + const __m128i in1 = _mm_loadu_si128(in + 1); \ + const __m128i in2 = _mm_loadu_si128(in + 2); \ + const __m128i in3 = _mm_loadu_si128(in + 3); \ + const __m128i a0 = _mm_shuffle_epi8(in0, perm0); \ + const __m128i a1 = _mm_shuffle_epi8(in1, perm1); \ + const __m128i a2 = _mm_shuffle_epi8(in2, perm2); \ + const __m128i a3 = _mm_shuffle_epi8(in3, perm3); \ + const __m128i b0 = _mm_blend_epi16(a0, a1, 0xc0); \ + const __m128i b1 = _mm_blend_epi16(a1, a2, 0xf0); \ + const __m128i b2 = _mm_blend_epi16(a2, a3, 0xfc); \ + _mm_storeu_si128(out + 0, b0); \ + _mm_storeu_si128(out + 1, b1); \ + _mm_storeu_si128(out + 2, b2); \ + in += 4; \ + out += 3; \ + num_pixels -= 16; \ + } \ +} while (0) + +static void ConvertBGRAToRGB_SSE41(const uint32_t* src, int num_pixels, + uint8_t* dst) { + const __m128i* in = (const __m128i*)src; + __m128i* out = (__m128i*)dst; + const __m128i perm0 = _mm_setr_epi8(2, 1, 0, 6, 5, 4, 10, 9, + 8, 14, 13, 12, -1, -1, -1, -1); + const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39); + const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e); + const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93); + + ARGB_TO_RGB_SSE41; + + // left-overs + if (num_pixels > 0) { + VP8LConvertBGRAToRGB_C((const uint32_t*)in, num_pixels, (uint8_t*)out); + } +} + +static void ConvertBGRAToBGR_SSE41(const uint32_t* src, + int num_pixels, uint8_t* dst) { + const __m128i* in = (const __m128i*)src; + __m128i* out = (__m128i*)dst; + const __m128i perm0 = _mm_setr_epi8(0, 1, 2, 4, 5, 6, 8, 9, 10, + 12, 13, 14, -1, -1, -1, -1); + const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39); + const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e); + const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93); + + ARGB_TO_RGB_SSE41; + + // left-overs + if (num_pixels > 0) { + VP8LConvertBGRAToBGR_C((const uint32_t*)in, num_pixels, (uint8_t*)out); + } +} + +#undef ARGB_TO_RGB_SSE41 + +//------------------------------------------------------------------------------ +// Entry point + +extern void VP8LDspInitSSE41(void); + +WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitSSE41(void) { + VP8LTransformColorInverse = TransformColorInverse_SSE41; + VP8LConvertBGRAToRGB = ConvertBGRAToRGB_SSE41; + VP8LConvertBGRAToBGR = ConvertBGRAToBGR_SSE41; +} + +#else // !WEBP_USE_SSE41 + +WEBP_DSP_INIT_STUB(VP8LDspInitSSE41) + +#endif // WEBP_USE_SSE41 diff --git a/thirdparty/libwebp/src/dsp/rescaler.c b/thirdparty/libwebp/src/dsp/rescaler.c index c5a01e82df..14620ce4f1 100644 --- a/thirdparty/libwebp/src/dsp/rescaler.c +++ b/thirdparty/libwebp/src/dsp/rescaler.c @@ -38,8 +38,9 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk, int x_out = channel; // simple bilinear interpolation int accum = wrk->x_add; - int left = src[x_in]; - int right = (wrk->src_width > 1) ? src[x_in + x_stride] : left; + rescaler_t left = (rescaler_t)src[x_in]; + rescaler_t right = + (wrk->src_width > 1) ? (rescaler_t)src[x_in + x_stride] : left; x_in += x_stride; while (1) { wrk->frow[x_out] = right * wrk->x_add + (left - right) * accum; @@ -50,7 +51,7 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk, left = right; x_in += x_stride; assert(x_in < wrk->src_width * x_stride); - right = src[x_in]; + right = (rescaler_t)src[x_in]; accum += wrk->x_add; } } @@ -213,7 +214,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) { WebPRescalerImportRowShrink = WebPRescalerImportRowShrink_C; if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPRescalerDspInitSSE2(); } @@ -235,7 +236,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { WebPRescalerDspInitNEON(); diff --git a/thirdparty/libwebp/src/dsp/ssim.c b/thirdparty/libwebp/src/dsp/ssim.c index 989ce8254c..f85c2e6e5b 100644 --- a/thirdparty/libwebp/src/dsp/ssim.c +++ b/thirdparty/libwebp/src/dsp/ssim.c @@ -150,7 +150,7 @@ WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) { #endif if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { VP8SSIMDspInitSSE2(); } diff --git a/thirdparty/libwebp/src/dsp/upsampling.c b/thirdparty/libwebp/src/dsp/upsampling.c index 9b60da5bbb..87f771f3eb 100644 --- a/thirdparty/libwebp/src/dsp/upsampling.c +++ b/thirdparty/libwebp/src/dsp/upsampling.c @@ -233,12 +233,12 @@ WEBP_DSP_INIT_FUNC(WebPInitYUV444Converters) { WebPYUV444Converters[MODE_rgbA_4444] = WebPYuv444ToRgba4444_C; if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitYUV444ConvertersSSE2(); } #endif -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { WebPInitYUV444ConvertersSSE41(); } @@ -278,12 +278,12 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitUpsamplersSSE2(); } #endif -#if defined(WEBP_USE_SSE41) +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { WebPInitUpsamplersSSE41(); } @@ -300,7 +300,7 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) { #endif } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { WebPInitUpsamplersNEON(); diff --git a/thirdparty/libwebp/src/dsp/yuv.c b/thirdparty/libwebp/src/dsp/yuv.c index 14e67fc28e..48466f8b11 100644 --- a/thirdparty/libwebp/src/dsp/yuv.c +++ b/thirdparty/libwebp/src/dsp/yuv.c @@ -90,16 +90,16 @@ WEBP_DSP_INIT_FUNC(WebPInitSamplers) { // If defined, use CPUInfo() to overwrite some pointers with faster versions. if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitSamplersSSE2(); } -#endif // WEBP_USE_SSE2 -#if defined(WEBP_USE_SSE41) +#endif // WEBP_HAVE_SSE2 +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { WebPInitSamplersSSE41(); } -#endif // WEBP_USE_SSE41 +#endif // WEBP_HAVE_SSE41 #if defined(WEBP_USE_MIPS32) if (VP8GetCPUInfo(kMIPS32)) { WebPInitSamplersMIPS32(); @@ -276,26 +276,26 @@ WEBP_DSP_INIT_FUNC(WebPInitConvertARGBToYUV) { #endif if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) +#if defined(WEBP_HAVE_SSE2) if (VP8GetCPUInfo(kSSE2)) { WebPInitConvertARGBToYUVSSE2(); WebPInitSharpYUVSSE2(); } -#endif // WEBP_USE_SSE2 -#if defined(WEBP_USE_SSE41) +#endif // WEBP_HAVE_SSE2 +#if defined(WEBP_HAVE_SSE41) if (VP8GetCPUInfo(kSSE4_1)) { WebPInitConvertARGBToYUVSSE41(); } -#endif // WEBP_USE_SSE41 +#endif // WEBP_HAVE_SSE41 } -#if defined(WEBP_USE_NEON) +#if defined(WEBP_HAVE_NEON) if (WEBP_NEON_OMIT_C_CODE || (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { WebPInitConvertARGBToYUVNEON(); WebPInitSharpYUVNEON(); } -#endif // WEBP_USE_NEON +#endif // WEBP_HAVE_NEON assert(WebPConvertARGBToY != NULL); assert(WebPConvertARGBToUV != NULL); diff --git a/thirdparty/libwebp/src/enc/alpha_enc.c b/thirdparty/libwebp/src/enc/alpha_enc.c index dce9ca957d..0b54f3e6ec 100644 --- a/thirdparty/libwebp/src/enc/alpha_enc.c +++ b/thirdparty/libwebp/src/enc/alpha_enc.c @@ -303,7 +303,7 @@ static int EncodeAlpha(VP8Encoder* const enc, int ok = 1; const int reduce_levels = (quality < 100); - // quick sanity checks + // quick correctness checks assert((uint64_t)data_size == (uint64_t)width * height); // as per spec assert(enc != NULL && pic != NULL && pic->a != NULL); assert(output != NULL && output_size != NULL); @@ -361,7 +361,7 @@ static int EncodeAlpha(VP8Encoder* const enc, //------------------------------------------------------------------------------ // Main calls -static int CompressAlphaJob(void* arg1, void* dummy) { +static int CompressAlphaJob(void* arg1, void* unused) { VP8Encoder* const enc = (VP8Encoder*)arg1; const WebPConfig* config = enc->config_; uint8_t* alpha_data = NULL; @@ -375,13 +375,13 @@ static int CompressAlphaJob(void* arg1, void* dummy) { filter, effort_level, &alpha_data, &alpha_size)) { return 0; } - if (alpha_size != (uint32_t)alpha_size) { // Sanity check. + if (alpha_size != (uint32_t)alpha_size) { // Soundness check. WebPSafeFree(alpha_data); return 0; } enc->alpha_data_size_ = (uint32_t)alpha_size; enc->alpha_data_ = alpha_data; - (void)dummy; + (void)unused; return 1; } diff --git a/thirdparty/libwebp/src/enc/analysis_enc.c b/thirdparty/libwebp/src/enc/analysis_enc.c index 687757ae03..ebb784261c 100644 --- a/thirdparty/libwebp/src/enc/analysis_enc.c +++ b/thirdparty/libwebp/src/enc/analysis_enc.c @@ -126,16 +126,6 @@ static void InitHistogram(VP8Histogram* const histo) { histo->last_non_zero = 1; } -static void MergeHistograms(const VP8Histogram* const in, - VP8Histogram* const out) { - if (in->max_value > out->max_value) { - out->max_value = in->max_value; - } - if (in->last_non_zero > out->last_non_zero) { - out->last_non_zero = in->last_non_zero; - } -} - //------------------------------------------------------------------------------ // Simplified k-Means, to assign Nb segments based on alpha-histogram @@ -285,49 +275,6 @@ static int FastMBAnalyze(VP8EncIterator* const it) { return 0; } -static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it, - int best_alpha) { - uint8_t modes[16]; - const int max_mode = MAX_INTRA4_MODE; - int i4_alpha; - VP8Histogram total_histo; - int cur_histo = 0; - InitHistogram(&total_histo); - - VP8IteratorStartI4(it); - do { - int mode; - int best_mode_alpha = DEFAULT_ALPHA; - VP8Histogram histos[2]; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_]; - - VP8MakeIntra4Preds(it); - for (mode = 0; mode < max_mode; ++mode) { - int alpha; - - InitHistogram(&histos[cur_histo]); - VP8CollectHistogram(src, it->yuv_p_ + VP8I4ModeOffsets[mode], - 0, 1, &histos[cur_histo]); - alpha = GetAlpha(&histos[cur_histo]); - if (IS_BETTER_ALPHA(alpha, best_mode_alpha)) { - best_mode_alpha = alpha; - modes[it->i4_] = mode; - cur_histo ^= 1; // keep track of best histo so far. - } - } - // accumulate best histogram - MergeHistograms(&histos[cur_histo ^ 1], &total_histo); - // Note: we reuse the original samples for predictors - } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF_ENC)); - - i4_alpha = GetAlpha(&total_histo); - if (IS_BETTER_ALPHA(i4_alpha, best_alpha)) { - VP8SetIntra4Mode(it, modes); - best_alpha = i4_alpha; - } - return best_alpha; -} - static int MBAnalyzeBestUVMode(VP8EncIterator* const it) { int best_alpha = DEFAULT_ALPHA; int smallest_alpha = 0; @@ -371,13 +318,6 @@ static void MBAnalyze(VP8EncIterator* const it, best_alpha = FastMBAnalyze(it); } else { best_alpha = MBAnalyzeBestIntra16Mode(it); - if (enc->method_ >= 5) { - // We go and make a fast decision for intra4/intra16. - // It's usually not a good and definitive pick, but helps seeding the - // stats about level bit-cost. - // TODO(skal): improve criterion. - best_alpha = MBAnalyzeBestIntra4Mode(it, best_alpha); - } } best_uv_alpha = MBAnalyzeBestUVMode(it); diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.c b/thirdparty/libwebp/src/enc/backward_references_enc.c index d445b40fc5..519b36a091 100644 --- a/thirdparty/libwebp/src/enc/backward_references_enc.c +++ b/thirdparty/libwebp/src/enc/backward_references_enc.c @@ -11,13 +11,14 @@ // #include <assert.h> +#include <float.h> #include <math.h> -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" +#include "src/dsp/dsp.h" #include "src/dsp/lossless.h" #include "src/dsp/lossless_common.h" -#include "src/dsp/dsp.h" +#include "src/enc/backward_references_enc.h" +#include "src/enc/histogram_enc.h" #include "src/utils/color_cache_utils.h" #include "src/utils/utils.h" @@ -103,6 +104,20 @@ void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs) { } } +// Swaps the content of two VP8LBackwardRefs. +static void BackwardRefsSwap(VP8LBackwardRefs* const refs1, + VP8LBackwardRefs* const refs2) { + const int point_to_refs1 = + (refs1->tail_ != NULL && refs1->tail_ == &refs1->refs_); + const int point_to_refs2 = + (refs2->tail_ != NULL && refs2->tail_ == &refs2->refs_); + const VP8LBackwardRefs tmp = *refs1; + *refs1 = *refs2; + *refs2 = tmp; + if (point_to_refs2) refs1->tail_ = &refs1->refs_; + if (point_to_refs1) refs2->tail_ = &refs2->refs_; +} + void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size) { assert(refs != NULL); memset(refs, 0, sizeof(*refs)); @@ -154,6 +169,22 @@ static PixOrCopyBlock* BackwardRefsNewBlock(VP8LBackwardRefs* const refs) { return b; } +// Return 1 on success, 0 on error. +static int BackwardRefsClone(const VP8LBackwardRefs* const from, + VP8LBackwardRefs* const to) { + const PixOrCopyBlock* block_from = from->refs_; + VP8LClearBackwardRefs(to); + while (block_from != NULL) { + PixOrCopyBlock* const block_to = BackwardRefsNewBlock(to); + if (block_to == NULL) return 0; + memcpy(block_to->start_, block_from->start_, + block_from->size_ * sizeof(PixOrCopy)); + block_to->size_ = block_from->size_; + block_from = block_from->next_; + } + return 1; +} + extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs, const PixOrCopy v); void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs, @@ -753,12 +784,18 @@ static int CalculateBestCacheSize(const uint32_t* argb, int quality, } } } else { + int code, extra_bits, extra_bits_value; // We should compute the contribution of the (distance,length) // histograms but those are the same independently from the cache size. // As those constant contributions are in the end added to the other - // histogram contributions, we can safely ignore them. + // histogram contributions, we can ignore them, except for the length + // prefix that is part of the literal_ histogram. int len = PixOrCopyLength(v); uint32_t argb_prev = *argb ^ 0xffffffffu; + VP8LPrefixEncode(len, &code, &extra_bits, &extra_bits_value); + for (i = 0; i <= cache_bits_max; ++i) { + ++histos[i]->literal_[NUM_LITERAL_CODES + code]; + } // Update the color caches. do { if (*argb != argb_prev) { @@ -842,16 +879,21 @@ extern int VP8LBackwardReferencesTraceBackwards( int xsize, int ysize, const uint32_t* const argb, int cache_bits, const VP8LHashChain* const hash_chain, const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst); -static VP8LBackwardRefs* GetBackwardReferences( - int width, int height, const uint32_t* const argb, int quality, - int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* best, - VP8LBackwardRefs* worst) { - const int cache_bits_initial = *cache_bits; - double bit_cost_best = -1; +static int GetBackwardReferences(int width, int height, + const uint32_t* const argb, int quality, + int lz77_types_to_try, int cache_bits_max, + int do_no_cache, + const VP8LHashChain* const hash_chain, + VP8LBackwardRefs* const refs, + int* const cache_bits_best) { VP8LHistogram* histo = NULL; - int lz77_type, lz77_type_best = 0; + int i, lz77_type; + // Index 0 is for a color cache, index 1 for no cache (if needed). + int lz77_types_best[2] = {0, 0}; + double bit_costs_best[2] = {DBL_MAX, DBL_MAX}; VP8LHashChain hash_chain_box; + VP8LBackwardRefs* const refs_tmp = &refs[do_no_cache ? 2 : 1]; + int status = 0; memset(&hash_chain_box, 0, sizeof(hash_chain_box)); histo = VP8LAllocateHistogram(MAX_COLOR_CACHE_BITS); @@ -860,86 +902,129 @@ static VP8LBackwardRefs* GetBackwardReferences( for (lz77_type = 1; lz77_types_to_try; lz77_types_to_try &= ~lz77_type, lz77_type <<= 1) { int res = 0; - double bit_cost; - int cache_bits_tmp = cache_bits_initial; + double bit_cost = 0.; if ((lz77_types_to_try & lz77_type) == 0) continue; switch (lz77_type) { case kLZ77RLE: - res = BackwardReferencesRle(width, height, argb, 0, worst); + res = BackwardReferencesRle(width, height, argb, 0, refs_tmp); break; case kLZ77Standard: // Compute LZ77 with no cache (0 bits), as the ideal LZ77 with a color // cache is not that different in practice. - res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, worst); + res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, + refs_tmp); break; case kLZ77Box: if (!VP8LHashChainInit(&hash_chain_box, width * height)) goto Error; res = BackwardReferencesLz77Box(width, height, argb, 0, hash_chain, - &hash_chain_box, worst); + &hash_chain_box, refs_tmp); break; default: assert(0); } if (!res) goto Error; - // Next, try with a color cache and update the references. - if (!CalculateBestCacheSize(argb, quality, worst, &cache_bits_tmp)) { - goto Error; - } - if (cache_bits_tmp > 0) { - if (!BackwardRefsWithLocalCache(argb, cache_bits_tmp, worst)) { - goto Error; + // Start with the no color cache case. + for (i = 1; i >= 0; --i) { + int cache_bits = (i == 1) ? 0 : cache_bits_max; + + if (i == 1 && !do_no_cache) continue; + + if (i == 0) { + // Try with a color cache. + if (!CalculateBestCacheSize(argb, quality, refs_tmp, &cache_bits)) { + goto Error; + } + if (cache_bits > 0) { + if (!BackwardRefsWithLocalCache(argb, cache_bits, refs_tmp)) { + goto Error; + } + } } - } - // Keep the best backward references. - VP8LHistogramCreate(histo, worst, cache_bits_tmp); - bit_cost = VP8LHistogramEstimateBits(histo); - if (lz77_type_best == 0 || bit_cost < bit_cost_best) { - VP8LBackwardRefs* const tmp = worst; - worst = best; - best = tmp; - bit_cost_best = bit_cost; - *cache_bits = cache_bits_tmp; - lz77_type_best = lz77_type; + if (i == 0 && do_no_cache && cache_bits == 0) { + // No need to re-compute bit_cost as it was computed at i == 1. + } else { + VP8LHistogramCreate(histo, refs_tmp, cache_bits); + bit_cost = VP8LHistogramEstimateBits(histo); + } + + if (bit_cost < bit_costs_best[i]) { + if (i == 1) { + // Do not swap as the full cache analysis would have the wrong + // VP8LBackwardRefs to start with. + if (!BackwardRefsClone(refs_tmp, &refs[1])) goto Error; + } else { + BackwardRefsSwap(refs_tmp, &refs[0]); + } + bit_costs_best[i] = bit_cost; + lz77_types_best[i] = lz77_type; + if (i == 0) *cache_bits_best = cache_bits; + } } } - assert(lz77_type_best > 0); + assert(lz77_types_best[0] > 0); + assert(!do_no_cache || lz77_types_best[1] > 0); // Improve on simple LZ77 but only for high quality (TraceBackwards is // costly). - if ((lz77_type_best == kLZ77Standard || lz77_type_best == kLZ77Box) && - quality >= 25) { - const VP8LHashChain* const hash_chain_tmp = - (lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box; - if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits, - hash_chain_tmp, best, worst)) { - double bit_cost_trace; - VP8LHistogramCreate(histo, worst, *cache_bits); - bit_cost_trace = VP8LHistogramEstimateBits(histo); - if (bit_cost_trace < bit_cost_best) best = worst; + for (i = 1; i >= 0; --i) { + if (i == 1 && !do_no_cache) continue; + if ((lz77_types_best[i] == kLZ77Standard || + lz77_types_best[i] == kLZ77Box) && + quality >= 25) { + const VP8LHashChain* const hash_chain_tmp = + (lz77_types_best[i] == kLZ77Standard) ? hash_chain : &hash_chain_box; + const int cache_bits = (i == 1) ? 0 : *cache_bits_best; + if (VP8LBackwardReferencesTraceBackwards(width, height, argb, cache_bits, + hash_chain_tmp, &refs[i], + refs_tmp)) { + double bit_cost_trace; + VP8LHistogramCreate(histo, refs_tmp, cache_bits); + bit_cost_trace = VP8LHistogramEstimateBits(histo); + if (bit_cost_trace < bit_costs_best[i]) { + BackwardRefsSwap(refs_tmp, &refs[i]); + } + } } - } - BackwardReferences2DLocality(width, best); + BackwardReferences2DLocality(width, &refs[i]); + + if (i == 1 && lz77_types_best[0] == lz77_types_best[1] && + *cache_bits_best == 0) { + // If the best cache size is 0 and we have the same best LZ77, just copy + // the data over and stop here. + if (!BackwardRefsClone(&refs[1], &refs[0])) goto Error; + break; + } + } + status = 1; Error: VP8LHashChainClear(&hash_chain_box); VP8LFreeHistogram(histo); - return best; + return status; } -VP8LBackwardRefs* VP8LGetBackwardReferences( +WebPEncodingError VP8LGetBackwardReferences( int width, int height, const uint32_t* const argb, int quality, - int low_effort, int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2) { + int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache, + const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs, + int* const cache_bits_best) { if (low_effort) { - return GetBackwardReferencesLowEffort(width, height, argb, cache_bits, - hash_chain, refs_tmp1); + VP8LBackwardRefs* refs_best; + *cache_bits_best = cache_bits_max; + refs_best = GetBackwardReferencesLowEffort( + width, height, argb, cache_bits_best, hash_chain, refs); + if (refs_best == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY; + // Set it in first position. + BackwardRefsSwap(refs_best, &refs[0]); } else { - return GetBackwardReferences(width, height, argb, quality, - lz77_types_to_try, cache_bits, hash_chain, - refs_tmp1, refs_tmp2); + if (!GetBackwardReferences(width, height, argb, quality, lz77_types_to_try, + cache_bits_max, do_no_cache, hash_chain, refs, + cache_bits_best)) { + return VP8_ENC_ERROR_OUT_OF_MEMORY; + } } + return VP8_ENC_OK; } diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.h b/thirdparty/libwebp/src/enc/backward_references_enc.h index 103ddfdcb7..4c0267b41e 100644 --- a/thirdparty/libwebp/src/enc/backward_references_enc.h +++ b/thirdparty/libwebp/src/enc/backward_references_enc.h @@ -16,6 +16,7 @@ #include <assert.h> #include <stdlib.h> #include "src/webp/types.h" +#include "src/webp/encode.h" #include "src/webp/format_constants.h" #ifdef __cplusplus @@ -218,14 +219,19 @@ enum VP8LLZ77Type { // Evaluates best possible backward references for specified quality. // The input cache_bits to 'VP8LGetBackwardReferences' sets the maximum cache // bits to use (passing 0 implies disabling the local color cache). -// The optimal cache bits is evaluated and set for the *cache_bits parameter. -// The return value is the pointer to the best of the two backward refs viz, -// refs[0] or refs[1]. -VP8LBackwardRefs* VP8LGetBackwardReferences( +// The optimal cache bits is evaluated and set for the *cache_bits_best +// parameter with the matching refs_best. +// If do_no_cache == 0, refs is an array of 2 values and the best +// VP8LBackwardRefs is put in the first element. +// If do_no_cache != 0, refs is an array of 3 values and the best +// VP8LBackwardRefs is put in the first element, the best value with no-cache in +// the second element. +// In both cases, the last element is used as temporary internally. +WebPEncodingError VP8LGetBackwardReferences( int width, int height, const uint32_t* const argb, int quality, - int low_effort, int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2); + int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache, + const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs, + int* const cache_bits_best); #ifdef __cplusplus } diff --git a/thirdparty/libwebp/src/enc/config_enc.c b/thirdparty/libwebp/src/enc/config_enc.c index 9d4828978e..3518b41403 100644 --- a/thirdparty/libwebp/src/enc/config_enc.c +++ b/thirdparty/libwebp/src/enc/config_enc.c @@ -39,6 +39,8 @@ int WebPConfigInitInternal(WebPConfig* config, config->partitions = 0; config->segments = 4; config->pass = 1; + config->qmin = 0; + config->qmax = 100; config->show_compressed = 0; config->preprocessing = 0; config->autofilter = 0; @@ -106,6 +108,9 @@ int WebPValidateConfig(const WebPConfig* config) { if (config->filter_type < 0 || config->filter_type > 1) return 0; if (config->autofilter < 0 || config->autofilter > 1) return 0; if (config->pass < 1 || config->pass > 10) return 0; + if (config->qmin < 0 || config->qmax > 100 || config->qmin > config->qmax) { + return 0; + } if (config->show_compressed < 0 || config->show_compressed > 1) return 0; if (config->preprocessing < 0 || config->preprocessing > 7) return 0; if (config->partitions < 0 || config->partitions > 3) return 0; diff --git a/thirdparty/libwebp/src/enc/frame_enc.c b/thirdparty/libwebp/src/enc/frame_enc.c index 1aec376e44..af538d83ba 100644 --- a/thirdparty/libwebp/src/enc/frame_enc.c +++ b/thirdparty/libwebp/src/enc/frame_enc.c @@ -31,10 +31,15 @@ // we allow 2k of extra head-room in PARTITION0 limit. #define PARTITION0_SIZE_LIMIT ((VP8_MAX_PARTITION0_SIZE - 2048ULL) << 11) +static float Clamp(float v, float min, float max) { + return (v < min) ? min : (v > max) ? max : v; +} + typedef struct { // struct for organizing convergence in either size or PSNR int is_first; float dq; float q, last_q; + float qmin, qmax; double value, last_value; // PSNR or size double target; int do_size_search; @@ -47,7 +52,9 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) { s->is_first = 1; s->dq = 10.f; - s->q = s->last_q = enc->config_->quality; + s->qmin = 1.f * enc->config_->qmin; + s->qmax = 1.f * enc->config_->qmax; + s->q = s->last_q = Clamp(enc->config_->quality, s->qmin, s->qmax); s->target = do_size_search ? (double)target_size : (target_PSNR > 0.) ? target_PSNR : 40.; // default, just in case @@ -56,10 +63,6 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) { return do_size_search; } -static float Clamp(float v, float min, float max) { - return (v < min) ? min : (v > max) ? max : v; -} - static float ComputeNextQ(PassStats* const s) { float dq; if (s->is_first) { @@ -75,7 +78,7 @@ static float ComputeNextQ(PassStats* const s) { s->dq = Clamp(dq, -30.f, 30.f); s->last_q = s->q; s->last_value = s->value; - s->q = Clamp(s->q + s->dq, 0.f, 100.f); + s->q = Clamp(s->q + s->dq, s->qmin, s->qmax); return s->q; } @@ -848,9 +851,10 @@ int VP8EncTokenLoop(VP8Encoder* const enc) { } #if (DEBUG_SEARCH > 0) - printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf\n", + printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf " + " range:[%.1f, %.1f]\n", num_pass_left, stats.last_value, stats.value, - stats.last_q, stats.q, stats.dq); + stats.last_q, stats.q, stats.dq, stats.qmin, stats.qmax); #endif if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) { ++num_pass_left; diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c index a4e6bf3a98..38a0cebcab 100644 --- a/thirdparty/libwebp/src/enc/histogram_enc.c +++ b/thirdparty/libwebp/src/enc/histogram_enc.c @@ -208,6 +208,7 @@ void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo, } else if (PixOrCopyIsCacheIdx(v)) { const int literal_ix = NUM_LITERAL_CODES + NUM_LENGTH_CODES + PixOrCopyCacheIdx(v); + assert(histo->palette_code_bits_ != 0); ++histo->literal_[literal_ix]; } else { int code, extra_bits; @@ -1170,13 +1171,15 @@ static void RemoveEmptyHistograms(VP8LHistogramSet* const image_histo) { int VP8LGetHistoImageSymbols(int xsize, int ysize, const VP8LBackwardRefs* const refs, int quality, int low_effort, - int histo_bits, int cache_bits, + int histogram_bits, int cache_bits, VP8LHistogramSet* const image_histo, VP8LHistogram* const tmp_histo, uint16_t* const histogram_symbols) { int ok = 0; - const int histo_xsize = histo_bits ? VP8LSubSampleSize(xsize, histo_bits) : 1; - const int histo_ysize = histo_bits ? VP8LSubSampleSize(ysize, histo_bits) : 1; + const int histo_xsize = + histogram_bits ? VP8LSubSampleSize(xsize, histogram_bits) : 1; + const int histo_ysize = + histogram_bits ? VP8LSubSampleSize(ysize, histogram_bits) : 1; const int image_histo_raw_size = histo_xsize * histo_ysize; VP8LHistogramSet* const orig_histo = VP8LAllocateHistogramSet(image_histo_raw_size, cache_bits); @@ -1192,7 +1195,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize, if (orig_histo == NULL || map_tmp == NULL) goto Error; // Construct the histograms from backward references. - HistogramBuild(xsize, histo_bits, refs, orig_histo); + HistogramBuild(xsize, histogram_bits, refs, orig_histo); // Copies the histograms and computes its bit_cost. // histogram_symbols is optimized HistogramCopyAndAnalyze(orig_histo, image_histo, &num_used, diff --git a/thirdparty/libwebp/src/enc/histogram_enc.h b/thirdparty/libwebp/src/enc/histogram_enc.h index 54c2d21783..c3428b5d55 100644 --- a/thirdparty/libwebp/src/enc/histogram_enc.h +++ b/thirdparty/libwebp/src/enc/histogram_enc.h @@ -64,8 +64,8 @@ void VP8LHistogramCreate(VP8LHistogram* const p, const VP8LBackwardRefs* const refs, int palette_code_bits); -// Return the size of the histogram for a given palette_code_bits. -int VP8LGetHistogramSize(int palette_code_bits); +// Return the size of the histogram for a given cache_bits. +int VP8LGetHistogramSize(int cache_bits); // Set the palette_code_bits and reset the stats. // If init_arrays is true, the arrays are also filled with 0's. @@ -110,7 +110,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize, const VP8LBackwardRefs* const refs, int quality, int low_effort, int histogram_bits, int cache_bits, - VP8LHistogramSet* const image_in, + VP8LHistogramSet* const image_histo, VP8LHistogram* const tmp_histo, uint16_t* const histogram_symbols); diff --git a/thirdparty/libwebp/src/enc/picture_csp_enc.c b/thirdparty/libwebp/src/enc/picture_csp_enc.c index 718e014ed2..35eede9635 100644 --- a/thirdparty/libwebp/src/enc/picture_csp_enc.c +++ b/thirdparty/libwebp/src/enc/picture_csp_enc.c @@ -61,16 +61,14 @@ static int CheckNonOpaque(const uint8_t* alpha, int width, int height, // Checking for the presence of non-opaque alpha. int WebPPictureHasTransparency(const WebPPicture* picture) { if (picture == NULL) return 0; - if (!picture->use_argb) { - return CheckNonOpaque(picture->a, picture->width, picture->height, - 1, picture->a_stride); - } else { + if (picture->use_argb) { const int alpha_offset = ALPHA_OFFSET; return CheckNonOpaque((const uint8_t*)picture->argb + alpha_offset, picture->width, picture->height, 4, picture->argb_stride * sizeof(*picture->argb)); } - return 0; + return CheckNonOpaque(picture->a, picture->width, picture->height, + 1, picture->a_stride); } //------------------------------------------------------------------------------ @@ -90,8 +88,9 @@ int WebPPictureHasTransparency(const WebPPicture* picture) { static int kLinearToGammaTab[kGammaTabSize + 1]; static uint16_t kGammaToLinearTab[256]; static volatile int kGammaTablesOk = 0; +static void InitGammaTables(void); -static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTables(void) { +WEBP_DSP_INIT_FUNC(InitGammaTables) { if (!kGammaTablesOk) { int v; const double scale = (double)(1 << kGammaTabFix) / kGammaScale; @@ -181,8 +180,9 @@ static uint32_t kLinearToGammaTabS[kGammaTabSize + 2]; #define GAMMA_TO_LINEAR_BITS 14 static uint32_t kGammaToLinearTabS[MAX_Y_T + 1]; // size scales with Y_FIX static volatile int kGammaTablesSOk = 0; +static void InitGammaTablesS(void); -static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTablesS(void) { +WEBP_DSP_INIT_FUNC(InitGammaTablesS) { assert(2 * GAMMA_TO_LINEAR_BITS < 32); // we use uint32_t intermediate values if (!kGammaTablesSOk) { int v; diff --git a/thirdparty/libwebp/src/enc/picture_rescale_enc.c b/thirdparty/libwebp/src/enc/picture_rescale_enc.c index 58a6ae7b9d..a75f5d9c06 100644 --- a/thirdparty/libwebp/src/enc/picture_rescale_enc.c +++ b/thirdparty/libwebp/src/enc/picture_rescale_enc.c @@ -164,22 +164,25 @@ int WebPPictureCrop(WebPPicture* pic, //------------------------------------------------------------------------------ // Simple picture rescaler -static void RescalePlane(const uint8_t* src, - int src_width, int src_height, int src_stride, - uint8_t* dst, - int dst_width, int dst_height, int dst_stride, - rescaler_t* const work, - int num_channels) { +static int RescalePlane(const uint8_t* src, + int src_width, int src_height, int src_stride, + uint8_t* dst, + int dst_width, int dst_height, int dst_stride, + rescaler_t* const work, + int num_channels) { WebPRescaler rescaler; int y = 0; - WebPRescalerInit(&rescaler, src_width, src_height, - dst, dst_width, dst_height, dst_stride, - num_channels, work); + if (!WebPRescalerInit(&rescaler, src_width, src_height, + dst, dst_width, dst_height, dst_stride, + num_channels, work)) { + return 0; + } while (y < src_height) { y += WebPRescalerImport(&rescaler, src_height - y, src + y * src_stride, src_stride); WebPRescalerExport(&rescaler); } + return 1; } static void AlphaMultiplyARGB(WebPPicture* const pic, int inverse) { @@ -222,25 +225,28 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) { // If present, we need to rescale alpha first (for AlphaMultiplyY). if (pic->a != NULL) { WebPInitAlphaProcessing(); - RescalePlane(pic->a, prev_width, prev_height, pic->a_stride, - tmp.a, width, height, tmp.a_stride, work, 1); + if (!RescalePlane(pic->a, prev_width, prev_height, pic->a_stride, + tmp.a, width, height, tmp.a_stride, work, 1)) { + return 0; + } } // We take transparency into account on the luma plane only. That's not // totally exact blending, but still is a good approximation. AlphaMultiplyY(pic, 0); - RescalePlane(pic->y, prev_width, prev_height, pic->y_stride, - tmp.y, width, height, tmp.y_stride, work, 1); + if (!RescalePlane(pic->y, prev_width, prev_height, pic->y_stride, + tmp.y, width, height, tmp.y_stride, work, 1) || + !RescalePlane(pic->u, + HALVE(prev_width), HALVE(prev_height), pic->uv_stride, + tmp.u, + HALVE(width), HALVE(height), tmp.uv_stride, work, 1) || + !RescalePlane(pic->v, + HALVE(prev_width), HALVE(prev_height), pic->uv_stride, + tmp.v, + HALVE(width), HALVE(height), tmp.uv_stride, work, 1)) { + return 0; + } AlphaMultiplyY(&tmp, 1); - - RescalePlane(pic->u, - HALVE(prev_width), HALVE(prev_height), pic->uv_stride, - tmp.u, - HALVE(width), HALVE(height), tmp.uv_stride, work, 1); - RescalePlane(pic->v, - HALVE(prev_width), HALVE(prev_height), pic->uv_stride, - tmp.v, - HALVE(width), HALVE(height), tmp.uv_stride, work, 1); } else { work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work)); if (work == NULL) { @@ -252,11 +258,12 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) { // the premultiplication afterward (while preserving the alpha channel). WebPInitAlphaProcessing(); AlphaMultiplyARGB(pic, 0); - RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height, - pic->argb_stride * 4, - (uint8_t*)tmp.argb, width, height, - tmp.argb_stride * 4, - work, 4); + if (!RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height, + pic->argb_stride * 4, + (uint8_t*)tmp.argb, width, height, + tmp.argb_stride * 4, work, 4)) { + return 0; + } AlphaMultiplyARGB(&tmp, 1); } WebPPictureFree(pic); diff --git a/thirdparty/libwebp/src/enc/picture_tools_enc.c b/thirdparty/libwebp/src/enc/picture_tools_enc.c index d0e8a495da..38cb01534a 100644 --- a/thirdparty/libwebp/src/enc/picture_tools_enc.c +++ b/thirdparty/libwebp/src/enc/picture_tools_enc.c @@ -83,6 +83,19 @@ static int SmoothenBlock(const uint8_t* a_ptr, int a_stride, uint8_t* y_ptr, return (count == 0); } +void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color) { + if (pic != NULL && pic->use_argb) { + int y = pic->height; + uint32_t* argb = pic->argb; + color &= 0xffffffu; // force alpha=0 + WebPInitAlphaProcessing(); + while (y-- > 0) { + WebPAlphaReplace(argb, pic->width, color); + argb += pic->argb_stride; + } + } +} + void WebPCleanupTransparentArea(WebPPicture* pic) { int x, y, w, h; if (pic == NULL) return; @@ -165,24 +178,6 @@ void WebPCleanupTransparentArea(WebPPicture* pic) { #undef SIZE #undef SIZE2 -void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) { - int x, y, w, h; - uint32_t* argb; - assert(pic != NULL && pic->use_argb); - w = pic->width; - h = pic->height; - argb = pic->argb; - - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - if ((argb[x] & 0xff000000) == 0) { - argb[x] = 0x00000000; - } - } - argb += pic->argb_stride; - } -} - //------------------------------------------------------------------------------ // Blend color and remove transparency info diff --git a/thirdparty/libwebp/src/enc/syntax_enc.c b/thirdparty/libwebp/src/enc/syntax_enc.c index a9e5a6cf0f..e18cf650ca 100644 --- a/thirdparty/libwebp/src/enc/syntax_enc.c +++ b/thirdparty/libwebp/src/enc/syntax_enc.c @@ -349,7 +349,7 @@ int VP8EncWrite(VP8Encoder* const enc) { (enc->alpha_data_size_ & 1); riff_size += CHUNK_HEADER_SIZE + padded_alpha_size; } - // Sanity check. + // RIFF size should fit in 32-bits. if (riff_size > 0xfffffffeU) { return WebPEncodingSetError(pic, VP8_ENC_ERROR_FILE_TOO_BIG); } diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h index fedcaeea27..67e9509367 100644 --- a/thirdparty/libwebp/src/enc/vp8i_enc.h +++ b/thirdparty/libwebp/src/enc/vp8i_enc.h @@ -31,8 +31,8 @@ extern "C" { // version numbers #define ENC_MAJ_VERSION 1 -#define ENC_MIN_VERSION 1 -#define ENC_REV_VERSION 0 +#define ENC_MIN_VERSION 2 +#define ENC_REV_VERSION 1 enum { MAX_LF_LEVELS = 64, // Maximum loop filter level MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost @@ -286,8 +286,7 @@ int VP8IteratorNext(VP8EncIterator* const it); // save the yuv_out_ boundary values to top_/left_ arrays for next iterations. void VP8IteratorSaveBoundary(VP8EncIterator* const it); // Report progression based on macroblock rows. Return 0 for user-abort request. -int VP8IteratorProgress(const VP8EncIterator* const it, - int final_delta_percent); +int VP8IteratorProgress(const VP8EncIterator* const it, int delta); // Intra4x4 iterations void VP8IteratorStartI4(VP8EncIterator* const it); // returns true if not done. @@ -505,9 +504,9 @@ int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height); // Returns false in case of error (invalid param, out-of-memory). int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height); -// Clean-up the RGB samples under fully transparent area, to help lossless -// compressibility (no guarantee, though). Assumes that pic->use_argb is true. -void WebPCleanupTransparentAreaLossless(WebPPicture* const pic); +// Replace samples that are fully transparent by 'color' to help compressibility +// (no guarantee, though). Assumes pic->use_argb is true. +void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color); //------------------------------------------------------------------------------ diff --git a/thirdparty/libwebp/src/enc/vp8l_enc.c b/thirdparty/libwebp/src/enc/vp8l_enc.c index 2efd403f77..e330e716f1 100644 --- a/thirdparty/libwebp/src/enc/vp8l_enc.c +++ b/thirdparty/libwebp/src/enc/vp8l_enc.c @@ -65,25 +65,22 @@ static WEBP_INLINE void SwapColor(uint32_t* const col1, uint32_t* const col2) { *col2 = tmp; } -static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) { - // Find greedily always the closest color of the predicted color to minimize - // deltas in the palette. This reduces storage needs since the - // palette is stored with delta encoding. - uint32_t predict = 0x00000000; - int i, k; - for (i = 0; i < num_colors; ++i) { - int best_ix = i; - uint32_t best_score = ~0U; - for (k = i; k < num_colors; ++k) { - const uint32_t cur_score = PaletteColorDistance(palette[k], predict); - if (best_score > cur_score) { - best_score = cur_score; - best_ix = k; - } +static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color, + int num_colors) { + int low = 0, hi = num_colors; + if (sorted[low] == color) return low; // loop invariant: sorted[low] != color + while (1) { + const int mid = (low + hi) >> 1; + if (sorted[mid] == color) { + return mid; + } else if (sorted[mid] < color) { + low = mid; + } else { + hi = mid; } - SwapColor(&palette[best_ix], &palette[i]); - predict = palette[i]; } + assert(0); + return 0; } // The palette has been sorted by alpha. This function checks if the other @@ -92,7 +89,8 @@ static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) { // no benefit to re-organize them greedily. A monotonic development // would be spotted in green-only situations (like lossy alpha) or gray-scale // images. -static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) { +static int PaletteHasNonMonotonousDeltas(const uint32_t* const palette, + int num_colors) { uint32_t predict = 0x000000; int i; uint8_t sign_found = 0x00; @@ -115,28 +113,215 @@ static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) { return (sign_found & (sign_found << 1)) != 0; // two consequent signs. } +static void PaletteSortMinimizeDeltas(const uint32_t* const palette_sorted, + int num_colors, uint32_t* const palette) { + uint32_t predict = 0x00000000; + int i, k; + memcpy(palette, palette_sorted, num_colors * sizeof(*palette)); + if (!PaletteHasNonMonotonousDeltas(palette_sorted, num_colors)) return; + // Find greedily always the closest color of the predicted color to minimize + // deltas in the palette. This reduces storage needs since the + // palette is stored with delta encoding. + for (i = 0; i < num_colors; ++i) { + int best_ix = i; + uint32_t best_score = ~0U; + for (k = i; k < num_colors; ++k) { + const uint32_t cur_score = PaletteColorDistance(palette[k], predict); + if (best_score > cur_score) { + best_score = cur_score; + best_ix = k; + } + } + SwapColor(&palette[best_ix], &palette[i]); + predict = palette[i]; + } +} + +// Sort palette in increasing order and prepare an inverse mapping array. +static void PrepareMapToPalette(const uint32_t palette[], uint32_t num_colors, + uint32_t sorted[], uint32_t idx_map[]) { + uint32_t i; + memcpy(sorted, palette, num_colors * sizeof(*sorted)); + qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort); + for (i = 0; i < num_colors; ++i) { + idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i; + } +} + // ----------------------------------------------------------------------------- -// Palette +// Modified Zeng method from "A Survey on Palette Reordering +// Methods for Improving the Compression of Color-Indexed Images" by Armando J. +// Pinho and Antonio J. R. Neves. + +// Finds the biggest cooccurrence in the matrix. +static void CoOccurrenceFindMax(const uint32_t* const cooccurrence, + uint32_t num_colors, uint8_t* const c1, + uint8_t* const c2) { + // Find the index that is most frequently located adjacent to other + // (different) indexes. + uint32_t best_sum = 0u; + uint32_t i, j, best_cooccurrence; + *c1 = 0u; + for (i = 0; i < num_colors; ++i) { + uint32_t sum = 0; + for (j = 0; j < num_colors; ++j) sum += cooccurrence[i * num_colors + j]; + if (sum > best_sum) { + best_sum = sum; + *c1 = i; + } + } + // Find the index that is most frequently found adjacent to *c1. + *c2 = 0u; + best_cooccurrence = 0u; + for (i = 0; i < num_colors; ++i) { + if (cooccurrence[*c1 * num_colors + i] > best_cooccurrence) { + best_cooccurrence = cooccurrence[*c1 * num_colors + i]; + *c2 = i; + } + } + assert(*c1 != *c2); +} -// If number of colors in the image is less than or equal to MAX_PALETTE_SIZE, -// creates a palette and returns true, else returns false. -static int AnalyzeAndCreatePalette(const WebPPicture* const pic, - int low_effort, - uint32_t palette[MAX_PALETTE_SIZE], - int* const palette_size) { - const int num_colors = WebPGetColorPalette(pic, palette); - if (num_colors > MAX_PALETTE_SIZE) { - *palette_size = 0; - return 0; +// Builds the cooccurrence matrix +static WebPEncodingError CoOccurrenceBuild(const WebPPicture* const pic, + const uint32_t* const palette, + uint32_t num_colors, + uint32_t* cooccurrence) { + uint32_t *lines, *line_top, *line_current, *line_tmp; + int x, y; + const uint32_t* src = pic->argb; + uint32_t prev_pix = ~src[0]; + uint32_t prev_idx = 0u; + uint32_t idx_map[MAX_PALETTE_SIZE] = {0}; + uint32_t palette_sorted[MAX_PALETTE_SIZE]; + lines = (uint32_t*)WebPSafeMalloc(2 * pic->width, sizeof(*lines)); + if (lines == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY; + line_top = &lines[0]; + line_current = &lines[pic->width]; + PrepareMapToPalette(palette, num_colors, palette_sorted, idx_map); + for (y = 0; y < pic->height; ++y) { + for (x = 0; x < pic->width; ++x) { + const uint32_t pix = src[x]; + if (pix != prev_pix) { + prev_idx = idx_map[SearchColorNoIdx(palette_sorted, pix, num_colors)]; + prev_pix = pix; + } + line_current[x] = prev_idx; + // 4-connectivity is what works best as mentioned in "On the relation + // between Memon's and the modified Zeng's palette reordering methods". + if (x > 0 && prev_idx != line_current[x - 1]) { + const uint32_t left_idx = line_current[x - 1]; + ++cooccurrence[prev_idx * num_colors + left_idx]; + ++cooccurrence[left_idx * num_colors + prev_idx]; + } + if (y > 0 && prev_idx != line_top[x]) { + const uint32_t top_idx = line_top[x]; + ++cooccurrence[prev_idx * num_colors + top_idx]; + ++cooccurrence[top_idx * num_colors + prev_idx]; + } + } + line_tmp = line_top; + line_top = line_current; + line_current = line_tmp; + src += pic->argb_stride; + } + WebPSafeFree(lines); + return VP8_ENC_OK; +} + +struct Sum { + uint8_t index; + uint32_t sum; +}; + +// Implements the modified Zeng method from "A Survey on Palette Reordering +// Methods for Improving the Compression of Color-Indexed Images" by Armando J. +// Pinho and Antonio J. R. Neves. +static WebPEncodingError PaletteSortModifiedZeng( + const WebPPicture* const pic, const uint32_t* const palette_sorted, + uint32_t num_colors, uint32_t* const palette) { + uint32_t i, j, ind; + uint8_t remapping[MAX_PALETTE_SIZE]; + uint32_t* cooccurrence; + struct Sum sums[MAX_PALETTE_SIZE]; + uint32_t first, last; + uint32_t num_sums; + // TODO(vrabaud) check whether one color images should use palette or not. + if (num_colors <= 1) return VP8_ENC_OK; + // Build the co-occurrence matrix. + cooccurrence = + (uint32_t*)WebPSafeCalloc(num_colors * num_colors, sizeof(*cooccurrence)); + if (cooccurrence == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY; + if (CoOccurrenceBuild(pic, palette_sorted, num_colors, cooccurrence) != + VP8_ENC_OK) { + WebPSafeFree(cooccurrence); + return VP8_ENC_ERROR_OUT_OF_MEMORY; + } + + // Initialize the mapping list with the two best indices. + CoOccurrenceFindMax(cooccurrence, num_colors, &remapping[0], &remapping[1]); + + // We need to append and prepend to the list of remapping. To this end, we + // actually define the next start/end of the list as indices in a vector (with + // a wrap around when the end is reached). + first = 0; + last = 1; + num_sums = num_colors - 2; // -2 because we know the first two values + if (num_sums > 0) { + // Initialize the sums with the first two remappings and find the best one + struct Sum* best_sum = &sums[0]; + best_sum->index = 0u; + best_sum->sum = 0u; + for (i = 0, j = 0; i < num_colors; ++i) { + if (i == remapping[0] || i == remapping[1]) continue; + sums[j].index = i; + sums[j].sum = cooccurrence[i * num_colors + remapping[0]] + + cooccurrence[i * num_colors + remapping[1]]; + if (sums[j].sum > best_sum->sum) best_sum = &sums[j]; + ++j; + } + + while (num_sums > 0) { + const uint8_t best_index = best_sum->index; + // Compute delta to know if we need to prepend or append the best index. + int32_t delta = 0; + const int32_t n = num_colors - num_sums; + for (ind = first, j = 0; (ind + j) % num_colors != last + 1; ++j) { + const uint16_t l_j = remapping[(ind + j) % num_colors]; + delta += (n - 1 - 2 * (int32_t)j) * + (int32_t)cooccurrence[best_index * num_colors + l_j]; + } + if (delta > 0) { + first = (first == 0) ? num_colors - 1 : first - 1; + remapping[first] = best_index; + } else { + ++last; + remapping[last] = best_index; + } + // Remove best_sum from sums. + *best_sum = sums[num_sums - 1]; + --num_sums; + // Update all the sums and find the best one. + best_sum = &sums[0]; + for (i = 0; i < num_sums; ++i) { + sums[i].sum += cooccurrence[best_index * num_colors + sums[i].index]; + if (sums[i].sum > best_sum->sum) best_sum = &sums[i]; + } + } } - *palette_size = num_colors; - qsort(palette, num_colors, sizeof(*palette), PaletteCompareColorsForQsort); - if (!low_effort && PaletteHasNonMonotonousDeltas(palette, num_colors)) { - GreedyMinimizeDeltas(palette, num_colors); + assert((last + 1) % num_colors == first); + WebPSafeFree(cooccurrence); + + // Re-map the palette. + for (i = 0; i < num_colors; ++i) { + palette[i] = palette_sorted[remapping[(first + i) % num_colors]]; } - return 1; + return VP8_ENC_OK; } +// ----------------------------------------------------------------------------- +// Palette + // These five modes are evaluated and their respective entropy is computed. typedef enum { kDirect = 0, @@ -144,10 +329,18 @@ typedef enum { kSubGreen = 2, kSpatialSubGreen = 3, kPalette = 4, - kNumEntropyIx = 5 + kPaletteAndSpatial = 5, + kNumEntropyIx = 6 } EntropyIx; typedef enum { + kSortedDefault = 0, + kMinimizeDelta = 1, + kModifiedZeng = 2, + kUnusedPalette = 3, +} PaletteSorting; + +typedef enum { kHistoAlpha = 0, kHistoAlphaPred, kHistoGreen, @@ -354,14 +547,21 @@ static int GetTransformBits(int method, int histo_bits) { } // Set of parameters to be used in each iteration of the cruncher. -#define CRUNCH_CONFIGS_LZ77_MAX 2 +#define CRUNCH_SUBCONFIGS_MAX 2 +typedef struct { + int lz77_; + int do_no_cache_; +} CrunchSubConfig; typedef struct { int entropy_idx_; - int lz77s_types_to_try_[CRUNCH_CONFIGS_LZ77_MAX]; - int lz77s_types_to_try_size_; + PaletteSorting palette_sorting_type_; + CrunchSubConfig sub_configs_[CRUNCH_SUBCONFIGS_MAX]; + int sub_configs_size_; } CrunchConfig; -#define CRUNCH_CONFIGS_MAX kNumEntropyIx +// +2 because we add a palette sorting configuration for kPalette and +// kPaletteAndSpatial. +#define CRUNCH_CONFIGS_MAX (kNumEntropyIx + 2) static int EncoderAnalyze(VP8LEncoder* const enc, CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX], @@ -376,11 +576,20 @@ static int EncoderAnalyze(VP8LEncoder* const enc, int i; int use_palette; int n_lz77s; + // If set to 0, analyze the cache with the computed cache value. If 1, also + // analyze with no-cache. + int do_no_cache = 0; assert(pic != NULL && pic->argb != NULL); - use_palette = - AnalyzeAndCreatePalette(pic, low_effort, - enc->palette_, &enc->palette_size_); + // Check whether a palette is possible. + enc->palette_size_ = WebPGetColorPalette(pic, enc->palette_sorted_); + use_palette = (enc->palette_size_ <= MAX_PALETTE_SIZE); + if (!use_palette) { + enc->palette_size_ = 0; + } else { + qsort(enc->palette_sorted_, enc->palette_size_, + sizeof(*enc->palette_sorted_), PaletteCompareColorsForQsort); + } // Empirical bit sizes. enc->histo_bits_ = GetHistoBits(method, use_palette, @@ -390,6 +599,8 @@ static int EncoderAnalyze(VP8LEncoder* const enc, if (low_effort) { // AnalyzeEntropy is somewhat slow. crunch_configs[0].entropy_idx_ = use_palette ? kPalette : kSpatialSubGreen; + crunch_configs[0].palette_sorting_type_ = + use_palette ? kSortedDefault : kUnusedPalette; n_lz77s = 1; *crunch_configs_size = 1; } else { @@ -402,29 +613,59 @@ static int EncoderAnalyze(VP8LEncoder* const enc, return 0; } if (method == 6 && config->quality == 100) { + do_no_cache = 1; // Go brute force on all transforms. *crunch_configs_size = 0; for (i = 0; i < kNumEntropyIx; ++i) { - if (i != kPalette || use_palette) { + // We can only apply kPalette or kPaletteAndSpatial if we can indeed use + // a palette. + if ((i != kPalette && i != kPaletteAndSpatial) || use_palette) { assert(*crunch_configs_size < CRUNCH_CONFIGS_MAX); - crunch_configs[(*crunch_configs_size)++].entropy_idx_ = i; + crunch_configs[(*crunch_configs_size)].entropy_idx_ = i; + if (use_palette && (i == kPalette || i == kPaletteAndSpatial)) { + crunch_configs[(*crunch_configs_size)].palette_sorting_type_ = + kMinimizeDelta; + ++*crunch_configs_size; + // Also add modified Zeng's method. + crunch_configs[(*crunch_configs_size)].entropy_idx_ = i; + crunch_configs[(*crunch_configs_size)].palette_sorting_type_ = + kModifiedZeng; + } else { + crunch_configs[(*crunch_configs_size)].palette_sorting_type_ = + kUnusedPalette; + } + ++*crunch_configs_size; } } } else { // Only choose the guessed best transform. *crunch_configs_size = 1; crunch_configs[0].entropy_idx_ = min_entropy_ix; + crunch_configs[0].palette_sorting_type_ = + use_palette ? kMinimizeDelta : kUnusedPalette; + if (config->quality >= 75 && method == 5) { + // Test with and without color cache. + do_no_cache = 1; + // If we have a palette, also check in combination with spatial. + if (min_entropy_ix == kPalette) { + *crunch_configs_size = 2; + crunch_configs[1].entropy_idx_ = kPaletteAndSpatial; + crunch_configs[1].palette_sorting_type_ = kMinimizeDelta; + } + } } } // Fill in the different LZ77s. - assert(n_lz77s <= CRUNCH_CONFIGS_LZ77_MAX); + assert(n_lz77s <= CRUNCH_SUBCONFIGS_MAX); for (i = 0; i < *crunch_configs_size; ++i) { int j; for (j = 0; j < n_lz77s; ++j) { - crunch_configs[i].lz77s_types_to_try_[j] = + assert(j < CRUNCH_SUBCONFIGS_MAX); + crunch_configs[i].sub_configs_[j].lz77_ = (j == 0) ? kLZ77Standard | kLZ77RLE : kLZ77Box; + crunch_configs[i].sub_configs_[j].do_no_cache_ = do_no_cache; } - crunch_configs[i].lz77s_types_to_try_size_ = n_lz77s; + crunch_configs[i].sub_configs_size_ = n_lz77s; } return 1; } @@ -440,7 +681,7 @@ static int EncoderInit(VP8LEncoder* const enc) { int i; if (!VP8LHashChainInit(&enc->hash_chain_, pix_cnt)) return 0; - for (i = 0; i < 3; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size); + for (i = 0; i < 4; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size); return 1; } @@ -769,13 +1010,10 @@ static WebPEncodingError StoreImageToBitMask( } // Special case of EncodeImageInternal() for cache-bits=0, histo_bits=31 -static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw, - const uint32_t* const argb, - VP8LHashChain* const hash_chain, - VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2, - int width, int height, - int quality, int low_effort) { +static WebPEncodingError EncodeImageNoHuffman( + VP8LBitWriter* const bw, const uint32_t* const argb, + VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_array, + int width, int height, int quality, int low_effort) { int i; int max_tokens = 0; WebPEncodingError err = VP8_ENC_OK; @@ -798,13 +1036,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw, err = VP8_ENC_ERROR_OUT_OF_MEMORY; goto Error; } - refs = VP8LGetBackwardReferences(width, height, argb, quality, 0, - kLZ77Standard | kLZ77RLE, &cache_bits, - hash_chain, refs_tmp1, refs_tmp2); - if (refs == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } + err = VP8LGetBackwardReferences( + width, height, argb, quality, /*low_effort=*/0, kLZ77Standard | kLZ77RLE, + cache_bits, /*do_no_cache=*/0, hash_chain, refs_array, &cache_bits); + if (err != VP8_ENC_OK) goto Error; + refs = &refs_array[0]; histogram_image = VP8LAllocateHistogramSet(1, cache_bits); if (histogram_image == NULL) { err = VP8_ENC_ERROR_OUT_OF_MEMORY; @@ -860,11 +1096,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw, static WebPEncodingError EncodeImageInternal( VP8LBitWriter* const bw, const uint32_t* const argb, - VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[3], int width, + VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[4], int width, int height, int quality, int low_effort, int use_cache, const CrunchConfig* const config, int* cache_bits, int histogram_bits, size_t init_byte_position, int* const hdr_size, int* const data_size) { - WebPEncodingError err = VP8_ENC_OK; + WebPEncodingError err = VP8_ENC_ERROR_OUT_OF_MEMORY; const uint32_t histogram_image_xysize = VP8LSubSampleSize(width, histogram_bits) * VP8LSubSampleSize(height, histogram_bits); @@ -876,103 +1112,103 @@ static WebPEncodingError EncodeImageInternal( 3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree)); HuffmanTreeToken* tokens = NULL; HuffmanTreeCode* huffman_codes = NULL; - VP8LBackwardRefs* refs_best; - VP8LBackwardRefs* refs_tmp; uint16_t* const histogram_symbols = (uint16_t*)WebPSafeMalloc(histogram_image_xysize, sizeof(*histogram_symbols)); - int lz77s_idx; + int sub_configs_idx; + int cache_bits_init, write_histogram_image; VP8LBitWriter bw_init = *bw, bw_best; int hdr_size_tmp; + VP8LHashChain hash_chain_histogram; // histogram image hash chain + size_t bw_size_best = ~(size_t)0; assert(histogram_bits >= MIN_HUFFMAN_BITS); assert(histogram_bits <= MAX_HUFFMAN_BITS); assert(hdr_size != NULL); assert(data_size != NULL); - if (histogram_symbols == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; + // Make sure we can allocate the different objects. + memset(&hash_chain_histogram, 0, sizeof(hash_chain_histogram)); + if (huff_tree == NULL || histogram_symbols == NULL || + !VP8LHashChainInit(&hash_chain_histogram, histogram_image_xysize) || + !VP8LHashChainFill(hash_chain, quality, argb, width, height, + low_effort)) { goto Error; } - if (use_cache) { // If the value is different from zero, it has been set during the // palette analysis. - if (*cache_bits == 0) *cache_bits = MAX_COLOR_CACHE_BITS; + cache_bits_init = (*cache_bits == 0) ? MAX_COLOR_CACHE_BITS : *cache_bits; } else { - *cache_bits = 0; + cache_bits_init = 0; } - // 'best_refs' is the reference to the best backward refs and points to one - // of refs_array[0] or refs_array[1]. - // Calculate backward references from ARGB image. - if (huff_tree == NULL || - !VP8LHashChainFill(hash_chain, quality, argb, width, height, - low_effort) || - !VP8LBitWriterInit(&bw_best, 0) || - (config->lz77s_types_to_try_size_ > 1 && + // If several iterations will happen, clone into bw_best. + if (!VP8LBitWriterInit(&bw_best, 0) || + ((config->sub_configs_size_ > 1 || + config->sub_configs_[0].do_no_cache_) && !VP8LBitWriterClone(bw, &bw_best))) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; goto Error; } - for (lz77s_idx = 0; lz77s_idx < config->lz77s_types_to_try_size_; - ++lz77s_idx) { - refs_best = VP8LGetBackwardReferences( - width, height, argb, quality, low_effort, - config->lz77s_types_to_try_[lz77s_idx], cache_bits, hash_chain, - &refs_array[0], &refs_array[1]); - if (refs_best == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Keep the best references aside and use the other element from the first - // two as a temporary for later usage. - refs_tmp = &refs_array[refs_best == &refs_array[0] ? 1 : 0]; - - histogram_image = - VP8LAllocateHistogramSet(histogram_image_xysize, *cache_bits); - tmp_histo = VP8LAllocateHistogram(*cache_bits); - if (histogram_image == NULL || tmp_histo == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // Build histogram image and symbols from backward references. - if (!VP8LGetHistoImageSymbols(width, height, refs_best, quality, low_effort, - histogram_bits, *cache_bits, histogram_image, - tmp_histo, histogram_symbols)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Create Huffman bit lengths and codes for each histogram image. - histogram_image_size = histogram_image->size; - bit_array_size = 5 * histogram_image_size; - huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size, - sizeof(*huffman_codes)); - // Note: some histogram_image entries may point to tmp_histos[], so the - // latter need to outlive the following call to GetHuffBitLengthsAndCodes(). - if (huffman_codes == NULL || - !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Free combined histograms. - VP8LFreeHistogramSet(histogram_image); - histogram_image = NULL; - - // Free scratch histograms. - VP8LFreeHistogram(tmp_histo); - tmp_histo = NULL; + for (sub_configs_idx = 0; sub_configs_idx < config->sub_configs_size_; + ++sub_configs_idx) { + const CrunchSubConfig* const sub_config = + &config->sub_configs_[sub_configs_idx]; + int cache_bits_best, i_cache; + err = VP8LGetBackwardReferences(width, height, argb, quality, low_effort, + sub_config->lz77_, cache_bits_init, + sub_config->do_no_cache_, hash_chain, + &refs_array[0], &cache_bits_best); + if (err != VP8_ENC_OK) goto Error; - // Color Cache parameters. - if (*cache_bits > 0) { - VP8LPutBits(bw, 1, 1); - VP8LPutBits(bw, *cache_bits, 4); - } else { - VP8LPutBits(bw, 0, 1); - } + for (i_cache = 0; i_cache < (sub_config->do_no_cache_ ? 2 : 1); ++i_cache) { + const int cache_bits_tmp = (i_cache == 0) ? cache_bits_best : 0; + // Speed-up: no need to study the no-cache case if it was already studied + // in i_cache == 0. + if (i_cache == 1 && cache_bits_best == 0) break; + + // Reset the bit writer for this iteration. + VP8LBitWriterReset(&bw_init, bw); + + // Build histogram image and symbols from backward references. + histogram_image = + VP8LAllocateHistogramSet(histogram_image_xysize, cache_bits_tmp); + tmp_histo = VP8LAllocateHistogram(cache_bits_tmp); + if (histogram_image == NULL || tmp_histo == NULL || + !VP8LGetHistoImageSymbols(width, height, &refs_array[i_cache], + quality, low_effort, histogram_bits, + cache_bits_tmp, histogram_image, tmp_histo, + histogram_symbols)) { + goto Error; + } + // Create Huffman bit lengths and codes for each histogram image. + histogram_image_size = histogram_image->size; + bit_array_size = 5 * histogram_image_size; + huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size, + sizeof(*huffman_codes)); + // Note: some histogram_image entries may point to tmp_histos[], so the + // latter need to outlive the following call to + // GetHuffBitLengthsAndCodes(). + if (huffman_codes == NULL || + !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) { + goto Error; + } + // Free combined histograms. + VP8LFreeHistogramSet(histogram_image); + histogram_image = NULL; + + // Free scratch histograms. + VP8LFreeHistogram(tmp_histo); + tmp_histo = NULL; + + // Color Cache parameters. + if (cache_bits_tmp > 0) { + VP8LPutBits(bw, 1, 1); + VP8LPutBits(bw, cache_bits_tmp, 4); + } else { + VP8LPutBits(bw, 0, 1); + } - // Huffman image + meta huffman. - { - const int write_histogram_image = (histogram_image_size > 1); + // Huffman image + meta huffman. + write_histogram_image = (histogram_image_size > 1); VP8LPutBits(bw, write_histogram_image, 1); if (write_histogram_image) { uint32_t* const histogram_argb = @@ -980,10 +1216,7 @@ static WebPEncodingError EncodeImageInternal( sizeof(*histogram_argb)); int max_index = 0; uint32_t i; - if (histogram_argb == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } + if (histogram_argb == NULL) goto Error; for (i = 0; i < histogram_image_xysize; ++i) { const int symbol_index = histogram_symbols[i] & 0xffff; histogram_argb[i] = (symbol_index << 8); @@ -995,65 +1228,64 @@ static WebPEncodingError EncodeImageInternal( VP8LPutBits(bw, histogram_bits - 2, 3); err = EncodeImageNoHuffman( - bw, histogram_argb, hash_chain, refs_tmp, &refs_array[2], + bw, histogram_argb, &hash_chain_histogram, &refs_array[2], VP8LSubSampleSize(width, histogram_bits), VP8LSubSampleSize(height, histogram_bits), quality, low_effort); WebPSafeFree(histogram_argb); if (err != VP8_ENC_OK) goto Error; } - } - // Store Huffman codes. - { - int i; - int max_tokens = 0; - // Find maximum number of symbols for the huffman tree-set. - for (i = 0; i < 5 * histogram_image_size; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - if (max_tokens < codes->num_symbols) { - max_tokens = codes->num_symbols; + // Store Huffman codes. + { + int i; + int max_tokens = 0; + // Find maximum number of symbols for the huffman tree-set. + for (i = 0; i < 5 * histogram_image_size; ++i) { + HuffmanTreeCode* const codes = &huffman_codes[i]; + if (max_tokens < codes->num_symbols) { + max_tokens = codes->num_symbols; + } + } + tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens)); + if (tokens == NULL) goto Error; + for (i = 0; i < 5 * histogram_image_size; ++i) { + HuffmanTreeCode* const codes = &huffman_codes[i]; + StoreHuffmanCode(bw, huff_tree, tokens, codes); + ClearHuffmanTreeIfOnlyOneSymbol(codes); } } - tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens)); - if (tokens == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; + // Store actual literals. + hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position); + err = StoreImageToBitMask(bw, width, histogram_bits, &refs_array[i_cache], + histogram_symbols, huffman_codes); + if (err != VP8_ENC_OK) goto Error; + // Keep track of the smallest image so far. + if (VP8LBitWriterNumBytes(bw) < bw_size_best) { + bw_size_best = VP8LBitWriterNumBytes(bw); + *cache_bits = cache_bits_tmp; + *hdr_size = hdr_size_tmp; + *data_size = + (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size); + VP8LBitWriterSwap(bw, &bw_best); } - for (i = 0; i < 5 * histogram_image_size; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - StoreHuffmanCode(bw, huff_tree, tokens, codes); - ClearHuffmanTreeIfOnlyOneSymbol(codes); + WebPSafeFree(tokens); + tokens = NULL; + if (huffman_codes != NULL) { + WebPSafeFree(huffman_codes->codes); + WebPSafeFree(huffman_codes); + huffman_codes = NULL; } } - // Store actual literals. - hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position); - err = StoreImageToBitMask(bw, width, histogram_bits, refs_best, - histogram_symbols, huffman_codes); - // Keep track of the smallest image so far. - if (lz77s_idx == 0 || - VP8LBitWriterNumBytes(bw) < VP8LBitWriterNumBytes(&bw_best)) { - *hdr_size = hdr_size_tmp; - *data_size = - (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size); - VP8LBitWriterSwap(bw, &bw_best); - } - // Reset the bit writer for the following iteration if any. - if (config->lz77s_types_to_try_size_ > 1) VP8LBitWriterReset(&bw_init, bw); - WebPSafeFree(tokens); - tokens = NULL; - if (huffman_codes != NULL) { - WebPSafeFree(huffman_codes->codes); - WebPSafeFree(huffman_codes); - huffman_codes = NULL; - } } VP8LBitWriterSwap(bw, &bw_best); + err = VP8_ENC_OK; Error: WebPSafeFree(tokens); WebPSafeFree(huff_tree); VP8LFreeHistogramSet(histogram_image); VP8LFreeHistogram(tmp_histo); + VP8LHashChainClear(&hash_chain_histogram); if (huffman_codes != NULL) { WebPSafeFree(huffman_codes->codes); WebPSafeFree(huffman_codes); @@ -1095,8 +1327,7 @@ static WebPEncodingError ApplyPredictFilter(const VP8LEncoder* const enc, VP8LPutBits(bw, pred_bits - 2, 3); return EncodeImageNoHuffman( bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_, - (VP8LBackwardRefs*)&enc->refs_[0], // cast const away - (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height, + (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height, quality, low_effort); } @@ -1116,8 +1347,7 @@ static WebPEncodingError ApplyCrossColorFilter(const VP8LEncoder* const enc, VP8LPutBits(bw, ccolor_transform_bits - 2, 3); return EncodeImageNoHuffman( bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_, - (VP8LBackwardRefs*)&enc->refs_[0], // cast const away - (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height, + (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height, quality, low_effort); } @@ -1272,22 +1502,6 @@ static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) { // ----------------------------------------------------------------------------- -static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color, - int hi) { - int low = 0; - if (sorted[low] == color) return low; // loop invariant: sorted[low] != color - while (1) { - const int mid = (low + hi) >> 1; - if (sorted[mid] == color) { - return mid; - } else if (sorted[mid] < color) { - low = mid; - } else { - hi = mid; - } - } -} - #define APPLY_PALETTE_GREEDY_MAX 4 static WEBP_INLINE uint32_t SearchColorGreedy(const uint32_t palette[], @@ -1322,17 +1536,6 @@ static WEBP_INLINE uint32_t ApplyPaletteHash2(uint32_t color) { (32 - PALETTE_INV_SIZE_BITS); } -// Sort palette in increasing order and prepare an inverse mapping array. -static void PrepareMapToPalette(const uint32_t palette[], int num_colors, - uint32_t sorted[], uint32_t idx_map[]) { - int i; - memcpy(sorted, palette, num_colors * sizeof(*sorted)); - qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort); - for (i = 0; i < num_colors; ++i) { - idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i; - } -} - // Use 1 pixel cache for ARGB pixels. #define APPLY_PALETTE_FOR(COLOR_INDEX) do { \ uint32_t prev_pix = palette[0]; \ @@ -1464,8 +1667,8 @@ static WebPEncodingError EncodePalette(VP8LBitWriter* const bw, int low_effort, } tmp_palette[0] = palette[0]; return EncodeImageNoHuffman(bw, tmp_palette, &enc->hash_chain_, - &enc->refs_[0], &enc->refs_[1], palette_size, 1, - 20 /* quality */, low_effort); + &enc->refs_[0], palette_size, 1, /*quality=*/20, + low_effort); } // ----------------------------------------------------------------------------- @@ -1491,7 +1694,7 @@ static void VP8LEncoderDelete(VP8LEncoder* enc) { if (enc != NULL) { int i; VP8LHashChainClear(&enc->hash_chain_); - for (i = 0; i < 3; ++i) VP8LBackwardRefsClear(&enc->refs_[i]); + for (i = 0; i < 4; ++i) VP8LBackwardRefsClear(&enc->refs_[i]); ClearTransformBuffer(enc); WebPSafeFree(enc); } @@ -1541,7 +1744,7 @@ static int EncodeStreamHook(void* input, void* data2) { int data_size = 0; int use_delta_palette = 0; int idx; - size_t best_size = 0; + size_t best_size = ~(size_t)0; VP8LBitWriter bw_init = *bw, bw_best; (void)data2; @@ -1553,12 +1756,15 @@ static int EncodeStreamHook(void* input, void* data2) { for (idx = 0; idx < num_crunch_configs; ++idx) { const int entropy_idx = crunch_configs[idx].entropy_idx_; - enc->use_palette_ = (entropy_idx == kPalette); + enc->use_palette_ = + (entropy_idx == kPalette) || (entropy_idx == kPaletteAndSpatial); enc->use_subtract_green_ = (entropy_idx == kSubGreen) || (entropy_idx == kSpatialSubGreen); - enc->use_predict_ = - (entropy_idx == kSpatial) || (entropy_idx == kSpatialSubGreen); - if (low_effort) { + enc->use_predict_ = (entropy_idx == kSpatial) || + (entropy_idx == kSpatialSubGreen) || + (entropy_idx == kPaletteAndSpatial); + // When using a palette, R/B==0, hence no need to test for cross-color. + if (low_effort || enc->use_palette_) { enc->use_cross_color_ = 0; } else { enc->use_cross_color_ = red_and_blue_always_zero ? 0 : enc->use_predict_; @@ -1590,6 +1796,19 @@ static int EncodeStreamHook(void* input, void* data2) { // Encode palette if (enc->use_palette_) { + if (crunch_configs[idx].palette_sorting_type_ == kSortedDefault) { + // Nothing to do, we have already sorted the palette. + memcpy(enc->palette_, enc->palette_sorted_, + enc->palette_size_ * sizeof(*enc->palette_)); + } else if (crunch_configs[idx].palette_sorting_type_ == kMinimizeDelta) { + PaletteSortMinimizeDeltas(enc->palette_sorted_, enc->palette_size_, + enc->palette_); + } else { + assert(crunch_configs[idx].palette_sorting_type_ == kModifiedZeng); + err = PaletteSortModifiedZeng(enc->pic_, enc->palette_sorted_, + enc->palette_size_, enc->palette_); + if (err != VP8_ENC_OK) goto Error; + } err = EncodePalette(bw, low_effort, enc); if (err != VP8_ENC_OK) goto Error; err = MapImageFromPalette(enc, use_delta_palette); @@ -1640,7 +1859,7 @@ static int EncodeStreamHook(void* input, void* data2) { if (err != VP8_ENC_OK) goto Error; // If we are better than what we already have. - if (idx == 0 || VP8LBitWriterNumBytes(bw) < best_size) { + if (VP8LBitWriterNumBytes(bw) < best_size) { best_size = VP8LBitWriterNumBytes(bw); // Store the BitWriter. VP8LBitWriterSwap(bw, &bw_best); @@ -1754,6 +1973,8 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config, enc_side->palette_size_ = enc_main->palette_size_; memcpy(enc_side->palette_, enc_main->palette_, sizeof(enc_main->palette_)); + memcpy(enc_side->palette_sorted_, enc_main->palette_sorted_, + sizeof(enc_main->palette_sorted_)); param->enc_ = enc_side; } // Create the workers. @@ -1816,7 +2037,7 @@ Error: } #undef CRUNCH_CONFIGS_MAX -#undef CRUNCH_CONFIGS_LZ77_MAX +#undef CRUNCH_SUBCONFIGS_MAX int VP8LEncodeImage(const WebPConfig* const config, const WebPPicture* const picture) { diff --git a/thirdparty/libwebp/src/enc/vp8li_enc.h b/thirdparty/libwebp/src/enc/vp8li_enc.h index d2d0fc509c..00de48946c 100644 --- a/thirdparty/libwebp/src/enc/vp8li_enc.h +++ b/thirdparty/libwebp/src/enc/vp8li_enc.h @@ -69,9 +69,11 @@ typedef struct { int use_palette_; int palette_size_; uint32_t palette_[MAX_PALETTE_SIZE]; + // Sorted version of palette_ for cache purposes. + uint32_t palette_sorted_[MAX_PALETTE_SIZE]; // Some 'scratch' (potentially large) objects. - struct VP8LBackwardRefs refs_[3]; // Backward Refs array for temporaries. + struct VP8LBackwardRefs refs_[4]; // Backward Refs array for temporaries. VP8LHashChain hash_chain_; // HashChain data for constructing // backward references. } VP8LEncoder; diff --git a/thirdparty/libwebp/src/enc/webp_enc.c b/thirdparty/libwebp/src/enc/webp_enc.c index 9f4b10c26c..ce2db2e94b 100644 --- a/thirdparty/libwebp/src/enc/webp_enc.c +++ b/thirdparty/libwebp/src/enc/webp_enc.c @@ -400,7 +400,7 @@ int WebPEncode(const WebPConfig* config, WebPPicture* pic) { } if (!config->exact) { - WebPCleanupTransparentAreaLossless(pic); + WebPReplaceTransparentPixels(pic, 0x000000); } ok = VP8LEncodeImage(config, pic); // Sets pic->error in case of problem. diff --git a/thirdparty/libwebp/src/mux/anim_encode.c b/thirdparty/libwebp/src/mux/anim_encode.c index 7be99068f6..7078d9ae6b 100644 --- a/thirdparty/libwebp/src/mux/anim_encode.c +++ b/thirdparty/libwebp/src/mux/anim_encode.c @@ -248,9 +248,6 @@ WebPAnimEncoder* WebPAnimEncoderNewInternal( enc = (WebPAnimEncoder*)WebPSafeCalloc(1, sizeof(*enc)); if (enc == NULL) return NULL; - // sanity inits, so we can call WebPAnimEncoderDelete(): - enc->encoded_frames_ = NULL; - enc->mux_ = NULL; MarkNoError(enc); // Dimensions and options. @@ -421,7 +418,7 @@ static void MinimizeChangeRectangle(const WebPPicture* const src, const int max_allowed_diff_lossy = QualityToMaxDiff(quality); const int max_allowed_diff = is_lossless ? 0 : max_allowed_diff_lossy; - // Sanity checks. + // Assumption/correctness checks. assert(src->width == dst->width && src->height == dst->height); assert(rect->x_offset_ + rect->width_ <= dst->width); assert(rect->y_offset_ + rect->height_ <= dst->height); @@ -949,7 +946,8 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) { int new_duration; assert(enc->count_ >= 1); - assert(prev_enc_frame->sub_frame_.duration == + assert(!prev_enc_frame->is_key_frame_ || + prev_enc_frame->sub_frame_.duration == prev_enc_frame->key_frame_.duration); assert(prev_enc_frame->sub_frame_.duration == (prev_enc_frame->sub_frame_.duration & (MAX_DURATION - 1))); @@ -966,7 +964,7 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) { 0x10, 0x88, 0x88, 0x08 }; const WebPData lossless_1x1 = { - lossless_1x1_bytes, sizeof(lossless_1x1_bytes) + lossless_1x1_bytes, sizeof(lossless_1x1_bytes) }; const uint8_t lossy_1x1_bytes[] = { 0x52, 0x49, 0x46, 0x46, 0x40, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50, @@ -1358,6 +1356,12 @@ int WebPAnimEncoderAdd(WebPAnimEncoder* enc, WebPPicture* frame, int timestamp, if (!IncreasePreviousDuration(enc, (int)prev_frame_duration)) { return 0; } + // IncreasePreviousDuration() may add a frame to avoid exceeding + // MAX_DURATION which could cause CacheFrame() to over read encoded_frames_ + // before the next flush. + if (enc->count_ == enc->size_ && !FlushFrames(enc)) { + return 0; + } } else { enc->first_timestamp_ = timestamp; } diff --git a/thirdparty/libwebp/src/mux/muxedit.c b/thirdparty/libwebp/src/mux/muxedit.c index ccf14b2a0c..02c3edecd7 100644 --- a/thirdparty/libwebp/src/mux/muxedit.c +++ b/thirdparty/libwebp/src/mux/muxedit.c @@ -235,7 +235,6 @@ WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream, WebPMuxImage wpi; WebPMuxError err; - // Sanity checks. if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL || bitstream->size > MAX_CHUNK_PAYLOAD) { return WEBP_MUX_INVALID_ARGUMENT; @@ -267,7 +266,6 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info, WebPMuxImage wpi; WebPMuxError err; - // Sanity checks. if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT; if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT; diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h index ad3e1bdb97..330da66754 100644 --- a/thirdparty/libwebp/src/mux/muxi.h +++ b/thirdparty/libwebp/src/mux/muxi.h @@ -28,8 +28,8 @@ extern "C" { // Defines and constants. #define MUX_MAJ_VERSION 1 -#define MUX_MIN_VERSION 1 -#define MUX_REV_VERSION 0 +#define MUX_MIN_VERSION 2 +#define MUX_REV_VERSION 1 // Chunk object. typedef struct WebPChunk WebPChunk; diff --git a/thirdparty/libwebp/src/mux/muxread.c b/thirdparty/libwebp/src/mux/muxread.c index ae3b876bc5..80050396e1 100644 --- a/thirdparty/libwebp/src/mux/muxread.c +++ b/thirdparty/libwebp/src/mux/muxread.c @@ -56,7 +56,7 @@ static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk, uint32_t chunk_size; WebPData chunk_data; - // Sanity checks. + // Correctness checks. if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA; chunk_size = GetLE32(data + TAG_SIZE); if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA; @@ -155,7 +155,6 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data, break; default: goto Fail; - break; } subchunk_size = ChunkDiskSize(&subchunk); bytes += subchunk_size; @@ -187,7 +186,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL }; ChunkInit(&chunk); - // Sanity checks. if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) { return NULL; // version mismatch } @@ -264,7 +262,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, if (!MuxImageParse(&chunk, copy_data, wpi)) goto Err; ChunkRelease(&chunk); goto PushImage; - break; default: // A non-image chunk. if (wpi->is_partial_) goto Err; // Encountered a non-image chunk before // getting all chunks of an image. @@ -483,7 +480,6 @@ WebPMuxError WebPMuxGetFrame( WebPMuxError err; WebPMuxImage* wpi; - // Sanity checks. if (mux == NULL || frame == NULL) { return WEBP_MUX_INVALID_ARGUMENT; } diff --git a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h index 46b3880706..404b9a6d8c 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h @@ -55,7 +55,7 @@ void VP8LoadFinalBytes(VP8BitReader* const br); // makes sure br->value_ has at least BITS bits worth of data static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE -void VP8LoadNewBytes(VP8BitReader* const br) { +void VP8LoadNewBytes(VP8BitReader* WEBP_RESTRICT const br) { assert(br != NULL && br->buf_ != NULL); // Read 'BITS' bits at a time if possible. if (br->buf_ < br->buf_max_) { @@ -104,7 +104,7 @@ void VP8LoadNewBytes(VP8BitReader* const br) { } // Read a bit with proba 'prob'. Speed-critical function! -static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, +static WEBP_INLINE int VP8GetBit(VP8BitReader* WEBP_RESTRICT const br, int prob, const char label[]) { // Don't move this declaration! It makes a big speed difference to store // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't @@ -137,7 +137,8 @@ static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, // simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here) static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) { +int VP8GetSigned(VP8BitReader* WEBP_RESTRICT const br, int v, + const char label[]) { if (br->bits_ < 0) { VP8LoadNewBytes(br); } @@ -155,7 +156,7 @@ int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) { } } -static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, +static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* WEBP_RESTRICT const br, int prob, const char label[]) { // Don't move this declaration! It makes a big speed difference to store // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.c b/thirdparty/libwebp/src/utils/bit_reader_utils.c index 60271c0ae0..857cd60988 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_utils.c +++ b/thirdparty/libwebp/src/utils/bit_reader_utils.c @@ -41,14 +41,7 @@ void VP8InitBitReader(VP8BitReader* const br, br->bits_ = -8; // to load the very first 8bits br->eof_ = 0; VP8BitReaderSetBuffer(br, start, size); -// -- GODOT -- begin -#ifdef JAVASCRIPT_ENABLED // html5 required aligned reads - while(((uintptr_t)br->buf_ & 1) != 0 && !br->eof_) - VP8LoadFinalBytes(br); -#else VP8LoadNewBytes(br); -#endif -// -- GODOT -- end } void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) { diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.h b/thirdparty/libwebp/src/utils/bit_reader_utils.h index 199dacf224..e64156e318 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_utils.h @@ -58,12 +58,6 @@ extern "C" { // BITS can be any multiple of 8 from 8 to 56 (inclusive). // Pick values that fit natural register size. -// -- GODOT -- start -#ifdef JAVASCRIPT_ENABLED -#define BITS 16 -#else -// -- GODOT -- end - #if defined(__i386__) || defined(_M_IX86) // x86 32bit #define BITS 24 #elif defined(__x86_64__) || defined(_M_X64) // x86 64bit @@ -78,10 +72,6 @@ extern "C" { #define BITS 24 #endif -// -- GODOT -- start -#endif -// -- GODOT -- end - //------------------------------------------------------------------------------ // Derived types and constants: // bit_t = natural register type for storing 'value_' (which is BITS+8 bits) diff --git a/thirdparty/libwebp/src/utils/bit_writer_utils.c b/thirdparty/libwebp/src/utils/bit_writer_utils.c index bef0e31ca5..2f408508f1 100644 --- a/thirdparty/libwebp/src/utils/bit_writer_utils.c +++ b/thirdparty/libwebp/src/utils/bit_writer_utils.c @@ -278,7 +278,7 @@ void VP8LPutBitsFlushBits(VP8LBitWriter* const bw) { // If needed, make some room by flushing some bits out. if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) { const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE; - if (extra_size != (size_t)extra_size || + if (!CheckSizeOverflow(extra_size) || !VP8LBitWriterResize(bw, (size_t)extra_size)) { bw->cur_ = bw->buf_; bw->error_ = 1; @@ -314,7 +314,7 @@ void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits) { while (used >= VP8L_WRITER_BITS) { if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) { const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE; - if (extra_size != (size_t)extra_size || + if (!CheckSizeOverflow(extra_size) || !VP8LBitWriterResize(bw, (size_t)extra_size)) { bw->cur_ = bw->buf_; bw->error_ = 1; diff --git a/thirdparty/libwebp/src/utils/color_cache_utils.c b/thirdparty/libwebp/src/utils/color_cache_utils.c index b09f538e8b..7b5222b6e5 100644 --- a/thirdparty/libwebp/src/utils/color_cache_utils.c +++ b/thirdparty/libwebp/src/utils/color_cache_utils.c @@ -20,22 +20,22 @@ //------------------------------------------------------------------------------ // VP8LColorCache. -int VP8LColorCacheInit(VP8LColorCache* const cc, int hash_bits) { +int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits) { const int hash_size = 1 << hash_bits; - assert(cc != NULL); + assert(color_cache != NULL); assert(hash_bits > 0); - cc->colors_ = (uint32_t*)WebPSafeCalloc((uint64_t)hash_size, - sizeof(*cc->colors_)); - if (cc->colors_ == NULL) return 0; - cc->hash_shift_ = 32 - hash_bits; - cc->hash_bits_ = hash_bits; + color_cache->colors_ = (uint32_t*)WebPSafeCalloc( + (uint64_t)hash_size, sizeof(*color_cache->colors_)); + if (color_cache->colors_ == NULL) return 0; + color_cache->hash_shift_ = 32 - hash_bits; + color_cache->hash_bits_ = hash_bits; return 1; } -void VP8LColorCacheClear(VP8LColorCache* const cc) { - if (cc != NULL) { - WebPSafeFree(cc->colors_); - cc->colors_ = NULL; +void VP8LColorCacheClear(VP8LColorCache* const color_cache) { + if (color_cache != NULL) { + WebPSafeFree(color_cache->colors_); + color_cache->colors_ = NULL; } } diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.c b/thirdparty/libwebp/src/utils/huffman_encode_utils.c index 6f3b1bbe02..fd7a47d8f7 100644 --- a/thirdparty/libwebp/src/utils/huffman_encode_utils.c +++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.c @@ -404,8 +404,7 @@ static void ConvertBitDepthsToSymbols(HuffmanTreeCode* const tree) { // Main entry point void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit, - uint8_t* const buf_rle, - HuffmanTree* const huff_tree, + uint8_t* const buf_rle, HuffmanTree* const huff_tree, HuffmanTreeCode* const huff_code) { const int num_symbols = huff_code->num_symbols; memset(buf_rle, 0, num_symbols * sizeof(*buf_rle)); diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.h b/thirdparty/libwebp/src/utils/huffman_encode_utils.h index 3e6763ce49..3f7f1d8074 100644 --- a/thirdparty/libwebp/src/utils/huffman_encode_utils.h +++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.h @@ -51,7 +51,7 @@ int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree, // huffman code tree. void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit, uint8_t* const buf_rle, HuffmanTree* const huff_tree, - HuffmanTreeCode* const tree); + HuffmanTreeCode* const huff_code); #ifdef __cplusplus } diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.c b/thirdparty/libwebp/src/utils/rescaler_utils.c index 4bcae24af5..a0581a14b1 100644 --- a/thirdparty/libwebp/src/utils/rescaler_utils.c +++ b/thirdparty/libwebp/src/utils/rescaler_utils.c @@ -12,66 +12,74 @@ // Author: Skal (pascal.massimino@gmail.com) #include <assert.h> +#include <limits.h> #include <stdlib.h> #include <string.h> #include "src/dsp/dsp.h" #include "src/utils/rescaler_utils.h" +#include "src/utils/utils.h" //------------------------------------------------------------------------------ -void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height, - uint8_t* const dst, - int dst_width, int dst_height, int dst_stride, - int num_channels, rescaler_t* const work) { +int WebPRescalerInit(WebPRescaler* const rescaler, + int src_width, int src_height, + uint8_t* const dst, + int dst_width, int dst_height, int dst_stride, + int num_channels, rescaler_t* const work) { const int x_add = src_width, x_sub = dst_width; const int y_add = src_height, y_sub = dst_height; - wrk->x_expand = (src_width < dst_width); - wrk->y_expand = (src_height < dst_height); - wrk->src_width = src_width; - wrk->src_height = src_height; - wrk->dst_width = dst_width; - wrk->dst_height = dst_height; - wrk->src_y = 0; - wrk->dst_y = 0; - wrk->dst = dst; - wrk->dst_stride = dst_stride; - wrk->num_channels = num_channels; + const uint64_t total_size = 2ull * dst_width * num_channels * sizeof(*work); + if (!CheckSizeOverflow(total_size)) return 0; + + rescaler->x_expand = (src_width < dst_width); + rescaler->y_expand = (src_height < dst_height); + rescaler->src_width = src_width; + rescaler->src_height = src_height; + rescaler->dst_width = dst_width; + rescaler->dst_height = dst_height; + rescaler->src_y = 0; + rescaler->dst_y = 0; + rescaler->dst = dst; + rescaler->dst_stride = dst_stride; + rescaler->num_channels = num_channels; // for 'x_expand', we use bilinear interpolation - wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add; - wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub; - if (!wrk->x_expand) { // fx_scale is not used otherwise - wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub); + rescaler->x_add = rescaler->x_expand ? (x_sub - 1) : x_add; + rescaler->x_sub = rescaler->x_expand ? (x_add - 1) : x_sub; + if (!rescaler->x_expand) { // fx_scale is not used otherwise + rescaler->fx_scale = WEBP_RESCALER_FRAC(1, rescaler->x_sub); } // vertical scaling parameters - wrk->y_add = wrk->y_expand ? y_add - 1 : y_add; - wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub; - wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add; - if (!wrk->y_expand) { + rescaler->y_add = rescaler->y_expand ? y_add - 1 : y_add; + rescaler->y_sub = rescaler->y_expand ? y_sub - 1 : y_sub; + rescaler->y_accum = rescaler->y_expand ? rescaler->y_sub : rescaler->y_add; + if (!rescaler->y_expand) { // This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast. - // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and - // wrk->x_add >= 1; - const uint64_t ratio = - (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add); + // Its value is <= WEBP_RESCALER_ONE, because dst_height <= rescaler->y_add + // and rescaler->x_add >= 1; + const uint64_t num = (uint64_t)dst_height * WEBP_RESCALER_ONE; + const uint64_t den = (uint64_t)rescaler->x_add * rescaler->y_add; + const uint64_t ratio = num / den; if (ratio != (uint32_t)ratio) { // When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the // current fixed-point precision. This happens when src_height == - // wrk->y_add (which == src_height), and wrk->x_add == 1. + // rescaler->y_add (which == src_height), and rescaler->x_add == 1. // => We special-case fxy_scale = 0, in WebPRescalerExportRow(). - wrk->fxy_scale = 0; + rescaler->fxy_scale = 0; } else { - wrk->fxy_scale = (uint32_t)ratio; + rescaler->fxy_scale = (uint32_t)ratio; } - wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub); + rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->y_sub); } else { - wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add); - // wrk->fxy_scale is unused here. + rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->x_add); + // rescaler->fxy_scale is unused here. } - wrk->irow = work; - wrk->frow = work + num_channels * dst_width; - memset(work, 0, 2 * dst_width * num_channels * sizeof(*work)); + rescaler->irow = work; + rescaler->frow = work + num_channels * dst_width; + memset(work, 0, (size_t)total_size); WebPRescalerDspInit(); + return 1; } int WebPRescalerGetScaledDimensions(int src_width, int src_height, @@ -82,6 +90,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height, { int width = *scaled_width; int height = *scaled_height; + const int max_size = INT_MAX / 2; // if width is unspecified, scale original proportionally to height ratio. if (width == 0 && src_height > 0) { @@ -94,7 +103,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height, (int)(((uint64_t)src_height * width + src_width - 1) / src_width); } // Check if the overall dimensions still make sense. - if (width <= 0 || height <= 0) { + if (width <= 0 || height <= 0 || width > max_size || height > max_size) { return 0; } @@ -107,31 +116,34 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height, //------------------------------------------------------------------------------ // all-in-one calls -int WebPRescaleNeededLines(const WebPRescaler* const wrk, int max_num_lines) { - const int num_lines = (wrk->y_accum + wrk->y_sub - 1) / wrk->y_sub; +int WebPRescaleNeededLines(const WebPRescaler* const rescaler, + int max_num_lines) { + const int num_lines = + (rescaler->y_accum + rescaler->y_sub - 1) / rescaler->y_sub; return (num_lines > max_num_lines) ? max_num_lines : num_lines; } -int WebPRescalerImport(WebPRescaler* const wrk, int num_lines, +int WebPRescalerImport(WebPRescaler* const rescaler, int num_lines, const uint8_t* src, int src_stride) { int total_imported = 0; - while (total_imported < num_lines && !WebPRescalerHasPendingOutput(wrk)) { - if (wrk->y_expand) { - rescaler_t* const tmp = wrk->irow; - wrk->irow = wrk->frow; - wrk->frow = tmp; + while (total_imported < num_lines && + !WebPRescalerHasPendingOutput(rescaler)) { + if (rescaler->y_expand) { + rescaler_t* const tmp = rescaler->irow; + rescaler->irow = rescaler->frow; + rescaler->frow = tmp; } - WebPRescalerImportRow(wrk, src); - if (!wrk->y_expand) { // Accumulate the contribution of the new row. + WebPRescalerImportRow(rescaler, src); + if (!rescaler->y_expand) { // Accumulate the contribution of the new row. int x; - for (x = 0; x < wrk->num_channels * wrk->dst_width; ++x) { - wrk->irow[x] += wrk->frow[x]; + for (x = 0; x < rescaler->num_channels * rescaler->dst_width; ++x) { + rescaler->irow[x] += rescaler->frow[x]; } } - ++wrk->src_y; + ++rescaler->src_y; src += src_stride; ++total_imported; - wrk->y_accum -= wrk->y_sub; + rescaler->y_accum -= rescaler->y_sub; } return total_imported; } diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.h b/thirdparty/libwebp/src/utils/rescaler_utils.h index ca41e42c4a..ef201ef86c 100644 --- a/thirdparty/libwebp/src/utils/rescaler_utils.h +++ b/thirdparty/libwebp/src/utils/rescaler_utils.h @@ -47,12 +47,13 @@ struct WebPRescaler { }; // Initialize a rescaler given scratch area 'work' and dimensions of src & dst. -void WebPRescalerInit(WebPRescaler* const rescaler, - int src_width, int src_height, - uint8_t* const dst, - int dst_width, int dst_height, int dst_stride, - int num_channels, - rescaler_t* const work); +// Returns false in case of error. +int WebPRescalerInit(WebPRescaler* const rescaler, + int src_width, int src_height, + uint8_t* const dst, + int dst_width, int dst_height, int dst_stride, + int num_channels, + rescaler_t* const work); // If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value // will be calculated preserving the aspect ratio, otherwise the values are diff --git a/thirdparty/libwebp/src/utils/utils.c b/thirdparty/libwebp/src/utils/utils.c index 764f752b82..9e464c16ce 100644 --- a/thirdparty/libwebp/src/utils/utils.c +++ b/thirdparty/libwebp/src/utils/utils.c @@ -101,6 +101,9 @@ static void Increment(int* const v) { #if defined(MALLOC_LIMIT) { const char* const malloc_limit_str = getenv("MALLOC_LIMIT"); +#if MALLOC_LIMIT > 1 + mem_limit = (size_t)MALLOC_LIMIT; +#endif if (malloc_limit_str != NULL) { mem_limit = atoi(malloc_limit_str); } @@ -169,16 +172,16 @@ static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) { const uint64_t total_size = nmemb * size; if (nmemb == 0) return 1; if ((uint64_t)size > WEBP_MAX_ALLOCABLE_MEMORY / nmemb) return 0; - if (total_size != (size_t)total_size) return 0; + if (!CheckSizeOverflow(total_size)) return 0; #if defined(PRINT_MEM_INFO) && defined(MALLOC_FAIL_AT) if (countdown_to_fail > 0 && --countdown_to_fail == 0) { return 0; // fake fail! } #endif -#if defined(MALLOC_LIMIT) +#if defined(PRINT_MEM_INFO) && defined(MALLOC_LIMIT) if (mem_limit > 0) { const uint64_t new_total_mem = (uint64_t)total_mem + total_size; - if (new_total_mem != (size_t)new_total_mem || + if (!CheckSizeOverflow(new_total_mem) || new_total_mem > mem_limit) { return 0; // fake fail! } @@ -231,7 +234,7 @@ void WebPFree(void* ptr) { void WebPCopyPlane(const uint8_t* src, int src_stride, uint8_t* dst, int dst_stride, int width, int height) { assert(src != NULL && dst != NULL); - assert(src_stride >= width && dst_stride >= width); + assert(abs(src_stride) >= width && abs(dst_stride) >= width); while (height-- > 0) { memcpy(dst, src, width); src += src_stride; diff --git a/thirdparty/libwebp/src/utils/utils.h b/thirdparty/libwebp/src/utils/utils.h index 2a3ec92678..ef04f108fe 100644 --- a/thirdparty/libwebp/src/utils/utils.h +++ b/thirdparty/libwebp/src/utils/utils.h @@ -42,6 +42,10 @@ extern "C" { #endif #endif // WEBP_MAX_ALLOCABLE_MEMORY +static WEBP_INLINE int CheckSizeOverflow(uint64_t size) { + return size == (size_t)size; +} + // size-checking safe malloc/calloc: verify that the requested size is not too // large, or return NULL. You don't need to call these for constructs like // malloc(sizeof(foo)), but only if there's picture-dependent size involved @@ -107,24 +111,33 @@ static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) { PutLE16(data + 2, (int)(val >> 16)); } -// Returns (int)floor(log2(n)). n must be > 0. // use GNU builtins where available. #if defined(__GNUC__) && \ ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) +// Returns (int)floor(log2(n)). n must be > 0. static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return 31 ^ __builtin_clz(n); } +// counts the number of trailing zero +static WEBP_INLINE int BitsCtz(uint32_t n) { return __builtin_ctz(n); } #elif defined(_MSC_VER) && _MSC_VER > 1310 && \ (defined(_M_X64) || defined(_M_IX86)) #include <intrin.h> #pragma intrinsic(_BitScanReverse) +#pragma intrinsic(_BitScanForward) static WEBP_INLINE int BitsLog2Floor(uint32_t n) { - unsigned long first_set_bit; + unsigned long first_set_bit; // NOLINT (runtime/int) _BitScanReverse(&first_set_bit, n); return first_set_bit; } -#else // default: use the C-version. +static WEBP_INLINE int BitsCtz(uint32_t n) { + unsigned long first_set_bit; // NOLINT (runtime/int) + _BitScanForward(&first_set_bit, n); + return first_set_bit; +} +#else // default: use the (slow) C-version. +#define WEBP_HAVE_SLOW_CLZ_CTZ // signal that the Clz/Ctz function are slow // Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either // based on table or not. Can be used as fallback if clz() is not available. #define WEBP_NEED_LOG_TABLE_8BIT @@ -139,6 +152,15 @@ static WEBP_INLINE int WebPLog2FloorC(uint32_t n) { } static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); } + +static WEBP_INLINE int BitsCtz(uint32_t n) { + int i; + for (i = 0; i < 32; ++i, n >>= 1) { + if (n & 1) return i; + } + return 32; +} + #endif //------------------------------------------------------------------------------ diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h index 80dd0ef0cc..44fcd64a84 100644 --- a/thirdparty/libwebp/src/webp/decode.h +++ b/thirdparty/libwebp/src/webp/decode.h @@ -453,7 +453,7 @@ struct WebPDecoderOptions { int scaled_width, scaled_height; // final resolution int use_threads; // if true, use multi-threaded decoding int dithering_strength; // dithering strength (0=Off, 100=full) - int flip; // flip output vertically + int flip; // if true, flip output vertically int alpha_dithering_strength; // alpha dithering strength in [0..100] uint32_t pad[5]; // padding for later use diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h index 655166e7d4..b4c599df87 100644 --- a/thirdparty/libwebp/src/webp/encode.h +++ b/thirdparty/libwebp/src/webp/encode.h @@ -148,7 +148,8 @@ struct WebPConfig { int use_delta_palette; // reserved for future lossless feature int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion - uint32_t pad[2]; // padding for later use + int qmin; // minimum permissible quality factor + int qmax; // maximum permissible quality factor }; // Enumerate some predefined settings for WebPConfig, depending on the type @@ -291,6 +292,11 @@ typedef enum WebPEncodingError { #define WEBP_MAX_DIMENSION 16383 // Main exchange structure (input samples, output bytes, statistics) +// +// Once WebPPictureInit() has been called, it's ok to make all the INPUT fields +// (use_argb, y/u/v, argb, ...) point to user-owned data, even if +// WebPPictureAlloc() has been called. Depending on the value use_argb, +// it's guaranteed that either *argb or *y/*u/*v content will be kept untouched. struct WebPPicture { // INPUT ////////////// diff --git a/thirdparty/meshoptimizer/clusterizer.cpp b/thirdparty/meshoptimizer/clusterizer.cpp index f8aad7b49c..b1f7b359c1 100644 --- a/thirdparty/meshoptimizer/clusterizer.cpp +++ b/thirdparty/meshoptimizer/clusterizer.cpp @@ -368,8 +368,7 @@ static size_t kdtreeBuild(size_t offset, KDNode* nodes, size_t node_count, const } // split axis is one where the variance is largest - unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1 - : 2; + unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1 : 2; float split = mean[axis]; size_t middle = kdtreePartition(indices, count, points, stride, axis, split); diff --git a/thirdparty/meshoptimizer/meshoptimizer.h b/thirdparty/meshoptimizer/meshoptimizer.h index e44b99ce52..a420eb1098 100644 --- a/thirdparty/meshoptimizer/meshoptimizer.h +++ b/thirdparty/meshoptimizer/meshoptimizer.h @@ -278,9 +278,30 @@ MESHOPTIMIZER_API int meshopt_decodeVertexBuffer(void* destination, size_t verte * meshopt_decodeFilterExp decodes exponential encoding of floating-point data with 8-bit exponent and 24-bit integer mantissa as 2^E*M. * Each 32-bit component is decoded in isolation; stride must be divisible by 4. */ -MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size); -MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size); -MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size); +MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride); +MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride); +MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride); + +/** + * Vertex buffer filter encoders + * These functions can be used to encode data in a format that meshopt_decodeFilter can decode + * + * meshopt_encodeFilterOct encodes unit vectors with K-bit (K <= 16) signed X/Y as an output. + * Each component is stored as an 8-bit or 16-bit normalized integer; stride must be equal to 4 or 8. W is preserved as is. + * Input data must contain 4 floats for every vector (count*4 total). + * + * meshopt_encodeFilterQuat encodes unit quaternions with K-bit (4 <= K <= 16) component encoding. + * Each component is stored as an 16-bit integer; stride must be equal to 8. + * Input data must contain 4 floats for every quaternion (count*4 total). + * + * meshopt_encodeFilterExp encodes arbitrary (finite) floating-point data with 8-bit exponent and K-bit integer mantissa (1 <= K <= 24). + * Mantissa is shared between all components of a given vector as defined by stride; stride must be divisible by 4. + * Input data must contain stride/4 floats for every vector (count*stride/4 total). + * When individual (scalar) encoding is desired, simply pass stride=4 and adjust count accordingly. + */ +MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data); +MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterQuat(void* destination, size_t count, size_t stride, int bits, const float* data); +MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterExp(void* destination, size_t count, size_t stride, int bits, const float* data); /** * Experimental: Mesh simplifier @@ -305,7 +326,7 @@ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifyWithAttributes(unsigned int* d /** * Experimental: Mesh simplifier (sloppy) - * Reduces the number of triangles in the mesh, sacrificing mesh apperance for simplification performance + * Reduces the number of triangles in the mesh, sacrificing mesh appearance for simplification performance * The algorithm doesn't preserve mesh topology but can stop short of the target goal based on target error. * Returns the number of indices after simplification, with destination containing new index data * The resulting index buffer references vertices from the original vertex buffer. diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp index cf5db4e119..ccc99edb1a 100644 --- a/thirdparty/meshoptimizer/simplifier.cpp +++ b/thirdparty/meshoptimizer/simplifier.cpp @@ -358,7 +358,7 @@ static void classifyVertices(unsigned char* result, unsigned int* loop, unsigned #if TRACE printf("locked: many open edges %d, disconnected seam %d, many seam edges %d, many wedges %d\n", - int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3])); + int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3])); #endif } @@ -1114,8 +1114,8 @@ static size_t performEdgeCollapses(unsigned int* collapse_remap, unsigned char* float error_goal_perfect = edge_collapse_goal < collapse_count ? collapses[collapse_order[edge_collapse_goal]].error : 0.f; printf("removed %d triangles, error %e (goal %e); evaluated %d/%d collapses (done %d, skipped %d, invalid %d)\n", - int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect), - int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2])); + int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect), + int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2])); #endif return edge_collapses; @@ -1473,7 +1473,7 @@ size_t meshopt_simplifyWithAttributes(unsigned int* destination, const unsigned kinds[vertex_kind[i]] += remap[i] == i; printf("kinds: manifold %d, border %d, seam %d, complex %d, locked %d\n", - int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked])); + int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked])); #endif Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count); @@ -1649,9 +1649,9 @@ size_t meshopt_simplifySloppy(unsigned int* destination, const unsigned int* ind #if TRACE printf("pass %d (%s): grid size %d, triangles %d, %s\n", - pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary", - grid_size, int(triangles), - (triangles <= target_index_count / 3) ? "under" : "over"); + pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary", + grid_size, int(triangles), + (triangles <= target_index_count / 3) ? "under" : "over"); #endif float tip = interpolate(float(target_index_count / 3), float(min_grid), float(min_triangles), float(grid_size), float(triangles), float(max_grid), float(max_triangles)); @@ -1778,9 +1778,9 @@ size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_pos #if TRACE printf("pass %d (%s): grid size %d, vertices %d, %s\n", - pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary", - grid_size, int(vertices), - (vertices <= target_vertex_count) ? "under" : "over"); + pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary", + grid_size, int(vertices), + (vertices <= target_vertex_count) ? "under" : "over"); #endif float tip = interpolate(float(target_vertex_count), float(min_grid), float(min_vertices), float(grid_size), float(vertices), float(max_grid), float(max_vertices)); diff --git a/thirdparty/meshoptimizer/vertexcodec.cpp b/thirdparty/meshoptimizer/vertexcodec.cpp index 5f3ec204ab..7925ea862c 100644 --- a/thirdparty/meshoptimizer/vertexcodec.cpp +++ b/thirdparty/meshoptimizer/vertexcodec.cpp @@ -77,6 +77,8 @@ #endif #ifdef SIMD_WASM +#undef __DEPRECATED +#pragma clang diagnostic ignored "-Wdeprecated-declarations" #include <wasm_simd128.h> #endif @@ -1028,7 +1030,7 @@ static unsigned int getCpuFeatures() return cpuinfo[2]; } -unsigned int cpuid = getCpuFeatures(); +static unsigned int cpuid = getCpuFeatures(); #endif } // namespace meshopt diff --git a/thirdparty/meshoptimizer/vertexfilter.cpp b/thirdparty/meshoptimizer/vertexfilter.cpp index 39946f46ed..606a280aa9 100644 --- a/thirdparty/meshoptimizer/vertexfilter.cpp +++ b/thirdparty/meshoptimizer/vertexfilter.cpp @@ -52,6 +52,7 @@ #endif #ifdef SIMD_WASM +#undef __DEPRECATED #include <wasm_simd128.h> #endif @@ -160,7 +161,8 @@ static void decodeFilterExp(unsigned int* data, size_t count) #endif #if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM) -template <typename T> static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride) +template <typename T> +static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride) { assert(stride <= 4); @@ -791,52 +793,170 @@ static void decodeFilterExpSimd(unsigned int* data, size_t count) } // namespace meshopt -void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size) +void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride) { using namespace meshopt; - assert(vertex_size == 4 || vertex_size == 8); + assert(stride == 4 || stride == 8); #if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM) - if (vertex_size == 4) - dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), vertex_count, 4); + if (stride == 4) + dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), count, 4); else - dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), vertex_count, 4); + dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), count, 4); #else - if (vertex_size == 4) - decodeFilterOct(static_cast<signed char*>(buffer), vertex_count); + if (stride == 4) + decodeFilterOct(static_cast<signed char*>(buffer), count); else - decodeFilterOct(static_cast<short*>(buffer), vertex_count); + decodeFilterOct(static_cast<short*>(buffer), count); #endif } -void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size) +void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride) { using namespace meshopt; - assert(vertex_size == 8); - (void)vertex_size; + assert(stride == 8); + (void)stride; #if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM) - dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), vertex_count, 4); + dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), count, 4); #else - decodeFilterQuat(static_cast<short*>(buffer), vertex_count); + decodeFilterQuat(static_cast<short*>(buffer), count); #endif } -void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size) +void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride) { using namespace meshopt; - assert(vertex_size % 4 == 0); + assert(stride > 0 && stride % 4 == 0); #if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM) - dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4), 1); + dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), count * (stride / 4), 1); #else - decodeFilterExp(static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4)); + decodeFilterExp(static_cast<unsigned int*>(buffer), count * (stride / 4)); #endif } +void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data) +{ + assert(stride == 4 || stride == 8); + assert(bits >= 1 && bits <= 16); + + signed char* d8 = static_cast<signed char*>(destination); + short* d16 = static_cast<short*>(destination); + + int bytebits = int(stride * 2); + + for (size_t i = 0; i < count; ++i) + { + const float* n = &data[i * 4]; + + // octahedral encoding of a unit vector + float nx = n[0], ny = n[1], nz = n[2], nw = n[3]; + float nl = fabsf(nx) + fabsf(ny) + fabsf(nz); + float ns = nl == 0.f ? 0.f : 1.f / nl; + + nx *= ns; + ny *= ns; + + float u = (nz >= 0.f) ? nx : (1 - fabsf(ny)) * (nx >= 0.f ? 1.f : -1.f); + float v = (nz >= 0.f) ? ny : (1 - fabsf(nx)) * (ny >= 0.f ? 1.f : -1.f); + + int fu = meshopt_quantizeSnorm(u, bits); + int fv = meshopt_quantizeSnorm(v, bits); + int fo = meshopt_quantizeSnorm(1.f, bits); + int fw = meshopt_quantizeSnorm(nw, bytebits); + + if (stride == 4) + { + d8[i * 4 + 0] = (signed char)(fu); + d8[i * 4 + 1] = (signed char)(fv); + d8[i * 4 + 2] = (signed char)(fo); + d8[i * 4 + 3] = (signed char)(fw); + } + else + { + d16[i * 4 + 0] = short(fu); + d16[i * 4 + 1] = short(fv); + d16[i * 4 + 2] = short(fo); + d16[i * 4 + 3] = short(fw); + } + } +} + +void meshopt_encodeFilterQuat(void* destination_, size_t count, size_t stride, int bits, const float* data) +{ + assert(stride == 8); + assert(bits >= 4 && bits <= 16); + (void)stride; + + short* destination = static_cast<short*>(destination_); + + const float scaler = sqrtf(2.f); + + for (size_t i = 0; i < count; ++i) + { + const float* q = &data[i * 4]; + short* d = &destination[i * 4]; + + // establish maximum quaternion component + int qc = 0; + qc = fabsf(q[1]) > fabsf(q[qc]) ? 1 : qc; + qc = fabsf(q[2]) > fabsf(q[qc]) ? 2 : qc; + qc = fabsf(q[3]) > fabsf(q[qc]) ? 3 : qc; + + // we use double-cover properties to discard the sign + float sign = q[qc] < 0.f ? -1.f : 1.f; + + // note: we always encode a cyclical swizzle to be able to recover the order via rotation + d[0] = short(meshopt_quantizeSnorm(q[(qc + 1) & 3] * scaler * sign, bits)); + d[1] = short(meshopt_quantizeSnorm(q[(qc + 2) & 3] * scaler * sign, bits)); + d[2] = short(meshopt_quantizeSnorm(q[(qc + 3) & 3] * scaler * sign, bits)); + d[3] = short((meshopt_quantizeSnorm(1.f, bits) & ~3) | qc); + } +} + +void meshopt_encodeFilterExp(void* destination_, size_t count, size_t stride, int bits, const float* data) +{ + assert(stride > 0 && stride % 4 == 0); + assert(bits >= 1 && bits <= 24); + + unsigned int* destination = static_cast<unsigned int*>(destination_); + size_t stride_float = stride / sizeof(float); + + for (size_t i = 0; i < count; ++i) + { + const float* v = &data[i * stride_float]; + unsigned int* d = &destination[i * stride_float]; + + // use maximum exponent to encode values; this guarantess that mantissa is [-1, 1] + int exp = -100; + + for (size_t j = 0; j < stride_float; ++j) + { + int e; + frexp(v[j], &e); + + exp = (exp < e) ? e : exp; + } + + // note that we additionally scale the mantissa to make it a K-bit signed integer (K-1 bits for magnitude) + exp -= (bits - 1); + + // compute renormalized rounded mantissa for each component + int mmask = (1 << 24) - 1; + + for (size_t j = 0; j < stride_float; ++j) + { + int m = int(ldexp(v[j], -exp) + (v[j] >= 0 ? 0.5f : -0.5f)); + + d[j] = (m & mmask) | (unsigned(exp) << 24); + } + } +} + #undef SIMD_SSE #undef SIMD_NEON #undef SIMD_WASM diff --git a/thirdparty/miniupnpc/LICENSE b/thirdparty/miniupnpc/LICENSE index 6ddd381baa..fe9118c07e 100644 --- a/thirdparty/miniupnpc/LICENSE +++ b/thirdparty/miniupnpc/LICENSE @@ -1,4 +1,4 @@ -MiniUPnPc +MiniUPnP Project Copyright (c) 2005-2020, Thomas BERNARD All rights reserved. @@ -24,4 +24,3 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h b/thirdparty/miniupnpc/include/igd_desc_parse.h index 0de546b697..0de546b697 100644 --- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h +++ b/thirdparty/miniupnpc/include/igd_desc_parse.h diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h b/thirdparty/miniupnpc/include/miniupnpc.h index 3aef8ea443..a10bd950a8 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h +++ b/thirdparty/miniupnpc/include/miniupnpc.h @@ -1,4 +1,4 @@ -/* $Id: miniupnpc.h,v 1.58 2021/03/02 23:49:52 nanard Exp $ */ +/* $Id: miniupnpc.h,v 1.59 2021/09/28 21:39:17 nanard Exp $ */ /* vim: tabstop=4 shiftwidth=4 noexpandtab * Project: miniupnp * http://miniupnp.free.fr/ @@ -20,7 +20,7 @@ #define UPNPDISCOVER_MEMORY_ERROR (-102) /* versions : */ -#define MINIUPNPC_VERSION "2.2.2" +#define MINIUPNPC_VERSION "2.2.3" #define MINIUPNPC_API_VERSION 17 /* Source port: diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h b/thirdparty/miniupnpc/include/miniupnpc_declspec.h index 40adb922ec..40adb922ec 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h +++ b/thirdparty/miniupnpc/include/miniupnpc_declspec.h diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h b/thirdparty/miniupnpc/include/miniupnpctypes.h index 307ce39699..26ed4f0059 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h +++ b/thirdparty/miniupnpc/include/miniupnpctypes.h @@ -1,13 +1,15 @@ /* $Id: miniupnpctypes.h,v 1.1 2011/02/15 11:10:40 nanard Exp $ */ /* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org * Author : Thomas Bernard - * Copyright (c) 2011 Thomas Bernard + * Copyright (c) 2021 Thomas Bernard * This software is subject to the conditions detailed in the * LICENCE file provided within this distribution */ #ifndef MINIUPNPCTYPES_H_INCLUDED #define MINIUPNPCTYPES_H_INCLUDED -#if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) +/* Use unsigned long long when available : + * strtoull is C99 */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define UNSIGNED_INTEGER unsigned long long #define STRTOUI strtoull #else diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.h b/thirdparty/miniupnpc/include/miniwget.h index f5572c2544..f5572c2544 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniwget.h +++ b/thirdparty/miniupnpc/include/miniwget.h diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h b/thirdparty/miniupnpc/include/portlistingparse.h index e3957a3f4c..e3957a3f4c 100644 --- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h +++ b/thirdparty/miniupnpc/include/portlistingparse.h diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h b/thirdparty/miniupnpc/include/upnpcommands.h index 1b6d447732..1b6d447732 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h +++ b/thirdparty/miniupnpc/include/upnpcommands.h diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.h b/thirdparty/miniupnpc/include/upnpdev.h index 9b2cb431ba..171d495be3 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpdev.h +++ b/thirdparty/miniupnpc/include/upnpdev.h @@ -1,8 +1,8 @@ -/* $Id: upnpdev.h,v 1.3 2020/05/29 15:57:42 nanard Exp $ */ +/* $Id: upnpdev.h,v 1.4 2021/08/21 09:45:01 nanard Exp $ */ /* Project : miniupnp * Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ * Author : Thomas BERNARD - * copyright (c) 2005-2020 Thomas Bernard + * copyright (c) 2005-2021 Thomas Bernard * This software is subjet to the conditions detailed in the * provided LICENSE file. */ #ifndef UPNPDEV_H_INCLUDED @@ -20,7 +20,7 @@ struct UPNPDev { char * st; char * usn; unsigned int scope_id; -#if defined(__STDC_VERSION) && __STDC_VERSION__ >= 199901L +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 flexible array member */ char buffer[]; #elif defined(__GNUC__) diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h b/thirdparty/miniupnpc/include/upnpreplyparse.h index 6badd15b26..6badd15b26 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h +++ b/thirdparty/miniupnpc/include/upnpreplyparse.h diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c b/thirdparty/miniupnpc/src/addr_is_reserved.c index 7e586d7da2..18c6424201 100644 --- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c +++ b/thirdparty/miniupnpc/src/addr_is_reserved.c @@ -56,7 +56,7 @@ int addr_is_reserved(const char * addr_str) uint32_t addr_n, address; size_t i; -#if defined(_WIN32) && (!defined(_WIN32_WINNT_VISTA) || (_WIN32_WINNT < _WIN32_WINNT_VISTA)) +#if defined(_WIN32) && _WIN32_WINNT < 0x0600 // _WIN32_WINNT_VISTA addr_n = inet_addr(addr_str); if (addr_n == INADDR_NONE) return 1; diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h b/thirdparty/miniupnpc/src/addr_is_reserved.h index f8b5d66a09..f8b5d66a09 100644 --- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h +++ b/thirdparty/miniupnpc/src/addr_is_reserved.h diff --git a/thirdparty/miniupnpc/miniupnpc/codelength.h b/thirdparty/miniupnpc/src/codelength.h index ea0b005ffe..ea0b005ffe 100644 --- a/thirdparty/miniupnpc/miniupnpc/codelength.h +++ b/thirdparty/miniupnpc/src/codelength.h diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.c b/thirdparty/miniupnpc/src/connecthostport.c index 79f832b8db..79f832b8db 100644 --- a/thirdparty/miniupnpc/miniupnpc/connecthostport.c +++ b/thirdparty/miniupnpc/src/connecthostport.c diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.h b/thirdparty/miniupnpc/src/connecthostport.h index 701816b5b6..701816b5b6 100644 --- a/thirdparty/miniupnpc/miniupnpc/connecthostport.h +++ b/thirdparty/miniupnpc/src/connecthostport.h diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c b/thirdparty/miniupnpc/src/igd_desc_parse.c index d2999ad011..d2999ad011 100644 --- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c +++ b/thirdparty/miniupnpc/src/igd_desc_parse.c diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.c b/thirdparty/miniupnpc/src/minisoap.c index 78606672d5..78606672d5 100644 --- a/thirdparty/miniupnpc/miniupnpc/minisoap.c +++ b/thirdparty/miniupnpc/src/minisoap.c diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.h b/thirdparty/miniupnpc/src/minisoap.h index d6a45d03ba..d6a45d03ba 100644 --- a/thirdparty/miniupnpc/miniupnpc/minisoap.h +++ b/thirdparty/miniupnpc/src/minisoap.h diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.c b/thirdparty/miniupnpc/src/minissdpc.c index 5d3a0fd049..edebb1600a 100644 --- a/thirdparty/miniupnpc/miniupnpc/minissdpc.c +++ b/thirdparty/miniupnpc/src/minissdpc.c @@ -1,4 +1,4 @@ -/* $Id: minissdpc.c,v 1.47 2021/03/02 23:38:30 nanard Exp $ */ +/* $Id: minissdpc.c,v 1.49 2021/05/13 11:00:36 nanard Exp $ */ /* vim: tabstop=4 shiftwidth=4 noexpandtab * Project : miniupnp * Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ @@ -460,7 +460,7 @@ parseMSEARCHReply(const char * reply, int size, static int upnp_gettimeofday(struct timeval * tv) { #if defined(_WIN32) -#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA) +#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA ULONGLONG ts = GetTickCount64(); #else DWORD ts = GetTickCount(); @@ -469,14 +469,29 @@ static int upnp_gettimeofday(struct timeval * tv) tv->tv_usec = (ts % 1000) * 1000; return 0; /* success */ #elif defined(CLOCK_MONOTONIC_FAST) || defined(CLOCK_MONOTONIC) - struct timespec ts; - int ret_code = clock_gettime(UPNP_CLOCKID, &ts); - if (ret_code == 0) +#if defined(__APPLE__) +#if defined(__clang__) + if (__builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)) { +#else /* !defined(__clang__) */ + if (clock_gettime != NULL) { +#endif /* defined(__clang__) */ +#endif /* defined(__APPLE__) */ + struct timespec ts; + int ret_code = clock_gettime(UPNP_CLOCKID, &ts); + if (ret_code == 0) + { + tv->tv_sec = ts.tv_sec; + tv->tv_usec = ts.tv_nsec / 1000; + } + return ret_code; +#if defined(__APPLE__) + } + else { - tv->tv_sec = ts.tv_sec; - tv->tv_usec = ts.tv_nsec / 1000; + /* fall-back for earlier Apple platforms */ + return gettimeofday(tv, NULL); } - return ret_code; +#endif /* defined(__APPLE__) */ #else return gettimeofday(tv, NULL); #endif @@ -705,7 +720,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[], } } - if(multicastif) + if(multicastif && multicastif[0] != '\0') { if(ipv6) { #if !defined(_WIN32) @@ -732,7 +747,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[], } else { struct in_addr mc_if; #if defined(_WIN32) -#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA) +#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA InetPtonA(AF_INET, multicastif, &mc_if); #else mc_if.s_addr = inet_addr(multicastif); /* old Windows SDK do not support InetPtoA() */ diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.h b/thirdparty/miniupnpc/src/minissdpc.h index c99f929b9e..c99f929b9e 100644 --- a/thirdparty/miniupnpc/miniupnpc/minissdpc.h +++ b/thirdparty/miniupnpc/src/minissdpc.h diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c b/thirdparty/miniupnpc/src/miniupnpc.c index 696af93237..696af93237 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c +++ b/thirdparty/miniupnpc/src/miniupnpc.c diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h index 5986e58c76..5986e58c76 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h +++ b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h b/thirdparty/miniupnpc/src/miniupnpcstrings.h index 7b3d04074a..eefbc8dbdd 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h +++ b/thirdparty/miniupnpc/src/miniupnpcstrings.h @@ -4,7 +4,7 @@ #include "core/version.h" #define OS_STRING VERSION_NAME "/1.0" -#define MINIUPNPC_VERSION_STRING "2.2.2" +#define MINIUPNPC_VERSION_STRING "2.2.3" #if 0 /* according to "UPnP Device Architecture 1.0" */ diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.c b/thirdparty/miniupnpc/src/miniwget.c index d5b7970632..d5b7970632 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniwget.c +++ b/thirdparty/miniupnpc/src/miniwget.c diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h b/thirdparty/miniupnpc/src/miniwget_private.h index e4eaac8085..e4eaac8085 100644 --- a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h +++ b/thirdparty/miniupnpc/src/miniwget_private.h diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.c b/thirdparty/miniupnpc/src/minixml.c index ed2d3c759c..ed2d3c759c 100644 --- a/thirdparty/miniupnpc/miniupnpc/minixml.c +++ b/thirdparty/miniupnpc/src/minixml.c diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.h b/thirdparty/miniupnpc/src/minixml.h index 2e60397388..2e60397388 100644 --- a/thirdparty/miniupnpc/miniupnpc/minixml.h +++ b/thirdparty/miniupnpc/src/minixml.h diff --git a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c b/thirdparty/miniupnpc/src/minixmlvalid.c index dad1488122..dad1488122 100644 --- a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c +++ b/thirdparty/miniupnpc/src/minixmlvalid.c diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c b/thirdparty/miniupnpc/src/portlistingparse.c index 162cf8b7ec..162cf8b7ec 100644 --- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c +++ b/thirdparty/miniupnpc/src/portlistingparse.c diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.c b/thirdparty/miniupnpc/src/receivedata.c index 7f187f6e56..7f187f6e56 100644 --- a/thirdparty/miniupnpc/miniupnpc/receivedata.c +++ b/thirdparty/miniupnpc/src/receivedata.c diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.h b/thirdparty/miniupnpc/src/receivedata.h index c9fdc561f8..c9fdc561f8 100644 --- a/thirdparty/miniupnpc/miniupnpc/receivedata.h +++ b/thirdparty/miniupnpc/src/receivedata.h diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c b/thirdparty/miniupnpc/src/upnpcommands.c index 1e1ee6786f..1e1ee6786f 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c +++ b/thirdparty/miniupnpc/src/upnpcommands.c diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.c b/thirdparty/miniupnpc/src/upnpdev.c index d89a9934c3..d89a9934c3 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpdev.c +++ b/thirdparty/miniupnpc/src/upnpdev.c diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c b/thirdparty/miniupnpc/src/upnpreplyparse.c index 4d06f0585d..4d06f0585d 100644 --- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c +++ b/thirdparty/miniupnpc/src/upnpreplyparse.c diff --git a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h b/thirdparty/miniupnpc/src/win32_snprintf.h index 1fc284ecff..1fc284ecff 100644 --- a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h +++ b/thirdparty/miniupnpc/src/win32_snprintf.h diff --git a/thirdparty/pcre2/AUTHORS b/thirdparty/pcre2/AUTHORS index f001cb770e..bec8a1e5ad 100644 --- a/thirdparty/pcre2/AUTHORS +++ b/thirdparty/pcre2/AUTHORS @@ -5,10 +5,10 @@ Written by: Philip Hazel Email local part: Philip.Hazel Email domain: gmail.com -University of Cambridge Computing Service, +Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2020 University of Cambridge +Copyright (c) 1997-2021 University of Cambridge All rights reserved @@ -19,7 +19,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2010-2020 Zoltan Herczeg +Copyright(c) 2010-2021 Zoltan Herczeg All rights reserved. @@ -30,7 +30,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2009-2020 Zoltan Herczeg +Copyright(c) 2009-2021 Zoltan Herczeg All rights reserved. #### diff --git a/thirdparty/pcre2/LICENCE b/thirdparty/pcre2/LICENCE index 155d073127..b1ec61be44 100644 --- a/thirdparty/pcre2/LICENCE +++ b/thirdparty/pcre2/LICENCE @@ -23,10 +23,10 @@ Written by: Philip Hazel Email local part: Philip.Hazel Email domain: gmail.com -University of Cambridge Computing Service, +Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2020 University of Cambridge +Copyright (c) 1997-2021 University of Cambridge All rights reserved. @@ -37,7 +37,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2010-2020 Zoltan Herczeg +Copyright(c) 2010-2021 Zoltan Herczeg All rights reserved. @@ -48,7 +48,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2009-2020 Zoltan Herczeg +Copyright(c) 2009-2021 Zoltan Herczeg All rights reserved. diff --git a/thirdparty/pcre2/src/config.h b/thirdparty/pcre2/src/config.h index 10f4104790..a13593715e 100644 --- a/thirdparty/pcre2/src/config.h +++ b/thirdparty/pcre2/src/config.h @@ -85,8 +85,8 @@ sure both macros are undefined; an emulation function will then be used. */ /* Define to 1 if you have the `memmove' function. */ /* #undef HAVE_MEMMOVE */ -/* Define to 1 if you have the <memory.h> header file. */ -/* #undef HAVE_MEMORY_H */ +/* Define to 1 if you have the <minix/config.h> header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ /* Define to 1 if you have the `mkostemp' function. */ /* #undef HAVE_MKOSTEMP */ @@ -103,12 +103,18 @@ sure both macros are undefined; an emulation function will then be used. */ /* Define to 1 if you have the <readline/readline.h> header file. */ /* #undef HAVE_READLINE_READLINE_H */ +/* Define to 1 if you have the `realpath' function. */ +/* #undef HAVE_REALPATH */ + /* Define to 1 if you have the `secure_getenv' function. */ /* #undef HAVE_SECURE_GETENV */ /* Define to 1 if you have the <stdint.h> header file. */ /* #undef HAVE_STDINT_H */ +/* Define to 1 if you have the <stdio.h> header file. */ +/* #undef HAVE_STDIO_H */ + /* Define to 1 if you have the <stdlib.h> header file. */ /* #undef HAVE_STDLIB_H */ @@ -136,6 +142,9 @@ sure both macros are undefined; an emulation function will then be used. */ /* Define to 1 if the compiler supports simple visibility declarations. */ /* #undef HAVE_VISIBILITY */ +/* Define to 1 if you have the <wchar.h> header file. */ +/* #undef HAVE_WCHAR_H */ + /* Define to 1 if you have the <windows.h> header file. */ /* #undef HAVE_WINDOWS_H */ @@ -224,7 +233,7 @@ sure both macros are undefined; an emulation function will then be used. */ #define PACKAGE_NAME "PCRE2" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PCRE2 10.36" +#define PACKAGE_STRING "PCRE2 10.39" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pcre2" @@ -233,7 +242,7 @@ sure both macros are undefined; an emulation function will then be used. */ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "10.36" +#define PACKAGE_VERSION "10.39" /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested parentheses (of any kind) in a pattern. This limits the amount of system @@ -286,7 +295,9 @@ sure both macros are undefined; an emulation function will then be used. */ unless SUPPORT_JIT is also defined. */ /* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */ -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ /* #undef STDC_HEADERS */ /* Define to any value to enable support for Just-In-Time compiling. */ @@ -340,35 +351,91 @@ sure both macros are undefined; an emulation function will then be used. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif -/* Enable threading extensions on Solaris. */ +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ #endif /* Version number of package */ -#define VERSION "10.36" - -/* Define to 1 if on MINIX. */ -/* #undef _MINIX */ - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -/* #undef _POSIX_1_SOURCE */ - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -/* #undef _POSIX_SOURCE */ +#define VERSION "10.39" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ diff --git a/thirdparty/pcre2/src/pcre2.h b/thirdparty/pcre2/src/pcre2.h index f204ec8180..90a97d9cb7 100644 --- a/thirdparty/pcre2/src/pcre2.h +++ b/thirdparty/pcre2/src/pcre2.h @@ -5,7 +5,7 @@ /* This is the public header file for the PCRE library, second API, to be #included by applications that call PCRE2 functions. - Copyright (c) 2016-2020 University of Cambridge + Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 36 +#define PCRE2_MINOR 39 #define PCRE2_PRERELEASE -#define PCRE2_DATE 2020-12-04 +#define PCRE2_DATE 2021-10-29 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate @@ -84,8 +84,8 @@ set, we ensure here that it has no effect. */ /* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do not have stdint.h, which is why we use inttypes.h, which according to the C -standard is a superset of stdint.h. If none of these headers are available, -the relevant values must be provided by some other means. */ +standard is a superset of stdint.h. If inttypes.h is not available the build +will break and the relevant values must be provided by some other means. */ #include <limits.h> #include <stdlib.h> @@ -152,6 +152,7 @@ D is inspected during pcre2_dfa_match() execution #define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */ #define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */ #define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */ +#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 0x00000040u /* C */ /* These are for pcre2_jit_compile(). */ @@ -311,6 +312,7 @@ pcre2_pattern_convert(). */ #define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196 #define PCRE2_ERROR_TOO_MANY_CAPTURES 197 #define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED 198 +#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199 /* "Expected" matching error codes: no match and partial match. */ diff --git a/thirdparty/pcre2/src/pcre2_auto_possess.c b/thirdparty/pcre2/src/pcre2_auto_possess.c index c64cf856d1..e5e0895682 100644 --- a/thirdparty/pcre2/src/pcre2_auto_possess.c +++ b/thirdparty/pcre2/src/pcre2_auto_possess.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -490,6 +490,7 @@ switch(c) list[2] = (uint32_t)(end - code); return end; } + return NULL; /* Opcode not accepted */ } @@ -1186,12 +1187,16 @@ for (;;) c = *repeat_opcode; if (c >= OP_CRSTAR && c <= OP_CRMINRANGE) { - /* end must not be NULL. */ - end = get_chr_property_list(code, utf, ucp, cb->fcc, list); + /* The return from get_chr_property_list() will never be NULL when + *code (aka c) is one of the three class opcodes. However, gcc with + -fanalyzer notes that a NULL return is possible, and grumbles. Hence we + put in a check. */ + end = get_chr_property_list(code, utf, ucp, cb->fcc, list); list[1] = (c & 1) == 0; - if (compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit)) + if (end != NULL && + compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit)) { switch (c) { diff --git a/thirdparty/pcre2/src/pcre2_compile.c b/thirdparty/pcre2/src/pcre2_compile.c index e811f12f02..383159be76 100644 --- a/thirdparty/pcre2/src/pcre2_compile.c +++ b/thirdparty/pcre2/src/pcre2_compile.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -137,7 +137,7 @@ static BOOL static int check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *, - compile_block *); + compile_block *, int *); /************************************************* @@ -782,12 +782,15 @@ are allowed. */ #define PUBLIC_COMPILE_EXTRA_OPTIONS \ (PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS| \ PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES|PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL| \ - PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX) + PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX| \ + PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) /* Compile time error code numbers. They are given names so that they can more easily be tracked. When a new number is added, the tables called eint1 and eint2 in pcre2posix.c may need to be updated, and a new error text must be -added to compile_error_texts in pcre2_error.c. */ +added to compile_error_texts in pcre2_error.c. Also, the error codes in +pcre2.h.in must be updated - their values are exactly 100 greater than these +values. */ enum { ERR0 = COMPILE_ERROR_BASE, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, @@ -799,7 +802,7 @@ enum { ERR0 = COMPILE_ERROR_BASE, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90, - ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98 }; + ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99 }; /* This is a table of start-of-pattern options such as (*UTF) and settings such as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward @@ -1398,32 +1401,47 @@ static BOOL read_repeat_counts(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *minp, uint32_t *maxp, int *errorcodeptr) { -PCRE2_SPTR p = *ptrptr; +PCRE2_SPTR p; BOOL yield = FALSE; +BOOL had_comma = FALSE; int32_t min = 0; int32_t max = REPEAT_UNLIMITED; /* This value is larger than MAX_REPEAT_COUNT */ -/* NB read_number() initializes the error code to zero. The only error is for a -number that is too big. */ +/* Check the syntax */ + +*errorcodeptr = 0; +for (p = *ptrptr;; p++) + { + uint32_t c; + if (p >= ptrend) return FALSE; + c = *p; + if (IS_DIGIT(c)) continue; + if (c == CHAR_RIGHT_CURLY_BRACKET) break; + if (c == CHAR_COMMA) + { + if (had_comma) return FALSE; + had_comma = TRUE; + } + else return FALSE; + } + +/* The only error from read_number() is for a number that is too big. */ +p = *ptrptr; if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &min, errorcodeptr)) goto EXIT; -if (p >= ptrend) goto EXIT; - if (*p == CHAR_RIGHT_CURLY_BRACKET) { p++; max = min; } - else { - if (*p++ != CHAR_COMMA || p >= ptrend) goto EXIT; - if (*p != CHAR_RIGHT_CURLY_BRACKET) + if (*(++p) != CHAR_RIGHT_CURLY_BRACKET) { if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max, - errorcodeptr) || p >= ptrend || *p != CHAR_RIGHT_CURLY_BRACKET) + errorcodeptr)) goto EXIT; if (max < min) { @@ -1438,11 +1456,10 @@ yield = TRUE; if (minp != NULL) *minp = (uint32_t)min; if (maxp != NULL) *maxp = (uint32_t)max; -/* Update the pattern pointer on success, or after an error, but not when -the result is "not a repeat quantifier". */ +/* Update the pattern pointer */ EXIT: -if (yield || *errorcodeptr != 0) *ptrptr = p; +*ptrptr = p; return yield; } @@ -1776,19 +1793,23 @@ else { oldptr = ptr; ptr--; /* Back to the digit */ - if (!read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, ERR61, &s, - errorcodeptr)) - break; - /* \1 to \9 are always back references. \8x and \9x are too; \1x to \7x + /* As we know we are at a digit, the only possible error from + read_number() is a number that is too large to be a group number. In this + case we fall through handle this as not a group reference. If we have + read a small enough number, check for a back reference. + + \1 to \9 are always back references. \8x and \9x are too; \1x to \7x are octal escapes if there are not that many previous captures. */ - if (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount) + if (read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, 0, &s, errorcodeptr) && + (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount)) { if (s > (int)MAX_GROUP_NUMBER) *errorcodeptr = ERR61; else escape = -s; /* Indicates a back reference */ break; } + ptr = oldptr; /* Put the pointer back and fall through */ } @@ -7781,6 +7802,16 @@ for (;; pptr++) } #endif + /* \K is forbidden in lookarounds since 10.38 because that's what Perl has + done. However, there's an option, in case anyone was relying on it. */ + + if (cb->assert_depth > 0 && meta_arg == ESC_K && + (cb->cx->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0) + { + *errorcodeptr = ERR99; + return 0; + } + /* For the rest (including \X when Unicode is supported - if not it's faulted at parse time), the OP value is the escape value when PCRE2_UCP is not set; if it is set, these escapes do not show up here because they are @@ -9130,7 +9161,7 @@ for (;; pptr++) case META_LOOKAHEAD: case META_LOOKAHEADNOT: case META_LOOKAHEAD_NA: - *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb); + *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb, lcptr); if (*errcodeptr != 0) return -1; /* Ignore any qualifiers that follow a lookahead assertion. */ @@ -9470,16 +9501,16 @@ Arguments retptr if not NULL, return the ket pointer here recurses chain of recurse_check to catch mutual recursion cb points to the compile block + lcptr points to loop counter Returns: 0 on success, or an errorcode (cb->erroroffset will be set) */ static int check_lookbehinds(uint32_t *pptr, uint32_t **retptr, - parsed_recurse_check *recurses, compile_block *cb) + parsed_recurse_check *recurses, compile_block *cb, int *lcptr) { int errorcode = 0; -int loopcount = 0; int nestlevel = 0; cb->erroroffset = PCRE2_UNSET; @@ -9605,7 +9636,7 @@ for (; *pptr != META_END; pptr++) case META_LOOKBEHIND: case META_LOOKBEHINDNOT: case META_LOOKBEHIND_NA: - if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, recurses, cb)) + if (!set_lookbehind_lengths(&pptr, &errorcode, lcptr, recurses, cb)) return errorcode; break; } @@ -10060,7 +10091,8 @@ lengths. */ if (has_lookbehind) { - errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb); + int loopcount = 0; + errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb, &loopcount); if (errorcode != 0) goto HAD_CB_ERROR; } diff --git a/thirdparty/pcre2/src/pcre2_dfa_match.c b/thirdparty/pcre2/src/pcre2_dfa_match.c index 625695b7cb..060dc7669a 100644 --- a/thirdparty/pcre2/src/pcre2_dfa_match.c +++ b/thirdparty/pcre2/src/pcre2_dfa_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -3256,8 +3256,8 @@ BOOL has_first_cu = FALSE; BOOL has_req_cu = FALSE; #if PCRE2_CODE_UNIT_WIDTH == 8 -BOOL memchr_not_found_first_cu = FALSE; -BOOL memchr_not_found_first_cu2 = FALSE; +PCRE2_SPTR memchr_found_first_cu = NULL; +PCRE2_SPTR memchr_found_first_cu2 = NULL; #endif PCRE2_UCHAR first_cu = 0; @@ -3648,13 +3648,7 @@ for (;;) } } - /* Not anchored. Advance to a unique first code unit if there is one. In - 8-bit mode, the use of memchr() gives a big speed up, even though we have - to call it twice in caseless mode, in order to find the earliest occurrence - of the character in either of its cases. If a call to memchr() that - searches the rest of the subject fails to find one case, remember that in - order not to keep on repeating the search. This can make a huge difference - when the strings are very long and only one case is present. */ + /* Not anchored. Advance to a unique first code unit if there is one. */ else { @@ -3662,43 +3656,68 @@ for (;;) { if (first_cu != first_cu2) /* Caseless */ { + /* In 16-bit and 32_bit modes we have to do our own search, so can + look for both cases at once. */ + #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && (smc = UCHAR21TEST(start_match)) != first_cu && - smc != first_cu2) + smc != first_cu2) start_match++; +#else + /* In 8-bit mode, the use of memchr() gives a big speed up, even + though we have to call it twice in order to find the earliest + occurrence of the code unit in either of its cases. Caching is used + to remember the positions of previously found code units. This can + make a huge difference when the strings are very long and only one + case is actually present. */ -#else /* 8-bit code units */ PCRE2_SPTR pp1 = NULL; PCRE2_SPTR pp2 = NULL; - PCRE2_SIZE cu2size = end_subject - start_match; + PCRE2_SIZE searchlength = end_subject - start_match; - if (!memchr_not_found_first_cu) + /* If we haven't got a previously found position for first_cu, or if + the current starting position is later, we need to do a search. If + the code unit is not found, set it to the end. */ + + if (memchr_found_first_cu == NULL || + start_match > memchr_found_first_cu) { - pp1 = memchr(start_match, first_cu, end_subject - start_match); - if (pp1 == NULL) memchr_not_found_first_cu = TRUE; - else cu2size = pp1 - start_match; + pp1 = memchr(start_match, first_cu, searchlength); + memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1; } - /* If pp1 is not NULL, we have arranged to search only as far as pp1, - to see if the other case is earlier, so we can set "not found" only - when both searches have returned NULL. */ + /* If the start is before a previously found position, use the + previous position, or NULL if a previous search failed. */ + + else pp1 = (memchr_found_first_cu == end_subject)? NULL : + memchr_found_first_cu; - if (!memchr_not_found_first_cu2) + /* Do the same thing for the other case. */ + + if (memchr_found_first_cu2 == NULL || + start_match > memchr_found_first_cu2) { - pp2 = memchr(start_match, first_cu2, cu2size); - memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL); + pp2 = memchr(start_match, first_cu2, searchlength); + memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2; } + else pp2 = (memchr_found_first_cu2 == end_subject)? NULL : + memchr_found_first_cu2; + + /* Set the start to the end of the subject if neither case was found. + Otherwise, use the earlier found point. */ + if (pp1 == NULL) start_match = (pp2 == NULL)? end_subject : pp2; else start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2; -#endif + +#endif /* 8-bit handling */ } - /* The caseful case */ + /* The caseful case is much simpler. */ else { diff --git a/thirdparty/pcre2/src/pcre2_error.c b/thirdparty/pcre2/src/pcre2_error.c index c61648cb7f..3dee63d0db 100644 --- a/thirdparty/pcre2/src/pcre2_error.c +++ b/thirdparty/pcre2/src/pcre2_error.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -186,6 +186,7 @@ static const unsigned char compile_error_texts[] = "script runs require Unicode support, which this version of PCRE2 does not have\0" "too many capturing groups (maximum 65535)\0" "atomic assertion expected after (?( or (?(?C)\0" + "\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\0" ; /* Match-time and UTF error texts are in the same format. */ diff --git a/thirdparty/pcre2/src/pcre2_jit_compile.c b/thirdparty/pcre2/src/pcre2_jit_compile.c index 1977d28aa5..db2ce65598 100644 --- a/thirdparty/pcre2/src/pcre2_jit_compile.c +++ b/thirdparty/pcre2/src/pcre2_jit_compile.c @@ -1226,7 +1226,7 @@ while (cc < ccend) return TRUE; } -#define EARLY_FAIL_ENHANCE_MAX (1 + 1) +#define EARLY_FAIL_ENHANCE_MAX (1 + 3) /* start: @@ -1236,23 +1236,28 @@ start: return: current number of iterators enhanced with fast fail */ -static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start) +static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, + sljit_s32 depth, int start, BOOL fast_forward_allowed) { +PCRE2_SPTR begin = cc; PCRE2_SPTR next_alt; PCRE2_SPTR end; PCRE2_SPTR accelerated_start; +BOOL prev_fast_forward_allowed; int result = 0; int count; -BOOL fast_forward_allowed = TRUE; SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA); SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0); SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX); +next_alt = cc + GET(cc, 1); +if (*next_alt == OP_ALT) + fast_forward_allowed = FALSE; + do { count = start; - next_alt = cc + GET(cc, 1); cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0); while (TRUE) @@ -1475,31 +1480,20 @@ do case OP_CBRA: end = cc + GET(cc, 1); - if (*end == OP_KET && PRIVATE_DATA(end) == 0) - { - if (*cc == OP_CBRA) - { - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - break; - cc += IMM2_SIZE; - } - - cc += 1 + LINK_SIZE; - continue; - } - + prev_fast_forward_allowed = fast_forward_allowed; fast_forward_allowed = FALSE; if (depth >= 4) break; end = bracketend(cc) - (1 + LINK_SIZE); - if (*end != OP_KET || PRIVATE_DATA(end) != 0) + if (*end != OP_KET || (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)) break; - if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - break; + count = detect_early_fail(common, cc, private_data_start, depth + 1, count, prev_fast_forward_allowed); + + if (PRIVATE_DATA(cc) != 0) + common->private_data_ptrs[begin - common->start] = 1; - count = detect_early_fail(common, cc, private_data_start, depth + 1, count); if (count < EARLY_FAIL_ENHANCE_MAX) { cc = end + (1 + LINK_SIZE); @@ -1521,7 +1515,7 @@ do { count++; - if (fast_forward_allowed && *next_alt == OP_KET) + if (fast_forward_allowed) { common->fast_forward_bc_ptr = accelerated_start; common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip; @@ -1555,6 +1549,8 @@ do return EARLY_FAIL_ENHANCE_MAX; } + /* Cannot be part of a repeat. */ + common->private_data_ptrs[begin - common->start] = 1; count++; if (count < EARLY_FAIL_ENHANCE_MAX) @@ -1569,8 +1565,8 @@ do else if (result < count) result = count; - fast_forward_allowed = FALSE; cc = next_alt; + next_alt = cc + GET(cc, 1); } while (*cc == OP_ALT); @@ -1620,11 +1616,12 @@ sljit_sw length = end - begin; sljit_s32 min, max, i; /* Detect fixed iterations first. */ -if (end[-(1 + LINK_SIZE)] != OP_KET) +if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0) return FALSE; -/* Already detected repeat. */ -if (common->private_data_ptrs[end - common->start - LINK_SIZE] != 0) +/* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/ + * Skip the check of the second part. */ +if (PRIVATE_DATA(end - LINK_SIZE) == 0) return TRUE; next = end; @@ -1763,6 +1760,7 @@ while (cc < ccend) if (private_data_ptr > SLJIT_MAX_LOCAL_SIZE) break; + /* When the bracket is prefixed by a zero iteration, skip the repeat check (at this point). */ if (repeat_check && (*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA || *cc == OP_COND)) { if (detect_repeat(common, cc)) @@ -1813,6 +1811,7 @@ while (cc < ccend) case OP_COND: /* Might be a hidden SCOND. */ + common->private_data_ptrs[cc - common->start] = 0; alternative = cc + GET(cc, 1); if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) { @@ -4203,9 +4202,6 @@ TMP2 is not used. Otherwise TMP2 must contain the start of the subject buffer, and it is destroyed. Does not modify STR_PTR for invalid character sequences. */ DEFINE_COMPILER; -SLJIT_UNUSED_ARG(backtracks); -SLJIT_UNUSED_ARG(must_be_valid); - #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 struct sljit_jump *jump; #endif @@ -4279,6 +4275,10 @@ if (common->invalid_utf && !must_be_valid) } #endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */ #endif /* SUPPORT_UNICODE */ + +SLJIT_UNUSED_ARG(backtracks); +SLJIT_UNUSED_ARG(must_be_valid); + OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); } @@ -8141,7 +8141,7 @@ switch(type) } else OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); - add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); if (!common->endonly) compile_simple_assertion_matchingpath(common, OP_EODN, cc, backtracks); @@ -8161,7 +8161,7 @@ switch(type) } else OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); - add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); check_partial(common, FALSE); jump[0] = JUMP(SLJIT_JUMP); JUMPHERE(jump[1]); @@ -8201,14 +8201,14 @@ switch(type) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); - add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } else { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); - add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } return cc; @@ -8227,7 +8227,7 @@ switch(type) jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0); OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); } - add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); jump[0] = JUMP(SLJIT_JUMP); JUMPHERE(jump[1]); @@ -9581,11 +9581,11 @@ free_stack(common, callout_arg_size); /* Check return value. */ OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); -add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER32)); +add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER)); if (common->abort_label == NULL) - add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL32) /* SIG_LESS */); + add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */); else - JUMPTO(SLJIT_NOT_EQUAL32 /* SIG_LESS */, common->abort_label); + JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->abort_label); return cc + callout_length; } @@ -11232,7 +11232,7 @@ early_fail_type = (early_fail_ptr & 0x7); early_fail_ptr >>= 3; /* During recursion, these optimizations are disabled. */ -if (common->early_fail_start_ptr == 0) +if (common->early_fail_start_ptr == 0 && common->fast_forward_bc_ptr == NULL) { early_fail_ptr = 0; early_fail_type = type_skip; @@ -13661,9 +13661,11 @@ if (!common->private_data_ptrs) memset(common->private_data_ptrs, 0, total_length * sizeof(sljit_s32)); private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw); -set_private_data_ptrs(common, &private_data_size, ccend); + if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back) - detect_early_fail(common, common->start, &private_data_size, 0, 0); + detect_early_fail(common, common->start, &private_data_size, 0, 0, TRUE); + +set_private_data_ptrs(common, &private_data_size, ccend); SLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr); @@ -14130,6 +14132,10 @@ PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION pcre2_jit_compile(pcre2_code *code, uint32_t options) { pcre2_real_code *re = (pcre2_real_code *)code; +#ifdef SUPPORT_JIT +executable_functions *functions; +static int executable_allocator_is_working = 0; +#endif if (code == NULL) return PCRE2_ERROR_NULL; @@ -14164,8 +14170,7 @@ actions are needed: */ #ifdef SUPPORT_JIT -executable_functions *functions = (executable_functions *)re->executable_jit; -static int executable_allocator_is_working = 0; +functions = (executable_functions *)re->executable_jit; #endif if ((options & PCRE2_JIT_INVALID_UTF) != 0) diff --git a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h index 5673d338c0..aa029cce38 100644 --- a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h +++ b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h @@ -39,7 +39,29 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND) +#if !(defined SUPPORT_VALGRIND) + +#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ + || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)) + +typedef enum { + vector_compare_match1, + vector_compare_match1i, + vector_compare_match2, +} vector_compare_type; + +static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void) +{ +#if PCRE2_CODE_UNIT_WIDTH == 8 +return 15; +#elif PCRE2_CODE_UNIT_WIDTH == 16 +return 7; +#elif PCRE2_CODE_UNIT_WIDTH == 32 +return 3; +#else +#error "Unsupported unit width" +#endif +} #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 static struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg) @@ -56,6 +78,10 @@ return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00); } #endif +#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */ + +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) + static sljit_s32 character_to_int32(PCRE2_UCHAR chr) { sljit_u32 value = chr; @@ -97,13 +123,7 @@ instruction[4] = (sljit_u8)offset; sljit_emit_op_custom(compiler, instruction, 5); } -typedef enum { - sse2_compare_match1, - sse2_compare_match1i, - sse2_compare_match2, -} sse2_compare_type; - -static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, sse2_compare_type compare_type, +static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type, int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind) { sljit_u8 instruction[4]; @@ -112,11 +132,11 @@ instruction[1] = 0x0f; SLJIT_ASSERT(step >= 0 && step <= 3); -if (compare_type != sse2_compare_match2) +if (compare_type != vector_compare_match2) { if (step == 0) { - if (compare_type == sse2_compare_match1i) + if (compare_type == vector_compare_match1i) { /* POR xmm1, xmm2/m128 */ /* instruction[0] = 0x66; */ @@ -185,14 +205,14 @@ switch (step) static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset) { DEFINE_COMPILER; +sljit_u8 instruction[8]; struct sljit_label *start; #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 struct sljit_label *restart; #endif struct sljit_jump *quit; struct sljit_jump *partial_quit[2]; -sse2_compare_type compare_type = sse2_compare_match1; -sljit_u8 instruction[8]; +vector_compare_type compare_type = vector_compare_match1; sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); sljit_s32 data_ind = 0; @@ -207,12 +227,12 @@ SLJIT_UNUSED_ARG(offset); if (char1 != char2) { bit = char1 ^ char2; - compare_type = sse2_compare_match1i; + compare_type = vector_compare_match1i; if (!is_powerof2(bit)) { bit = 0; - compare_type = sse2_compare_match2; + compare_type = vector_compare_match2; } } @@ -349,11 +369,11 @@ if (common->utf && offset > 0) static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2) { DEFINE_COMPILER; +sljit_u8 instruction[8]; struct sljit_label *start; struct sljit_jump *quit; jump_list *not_found = NULL; -sse2_compare_type compare_type = sse2_compare_match1; -sljit_u8 instruction[8]; +vector_compare_type compare_type = vector_compare_match1; sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); sljit_s32 data_ind = 0; @@ -366,12 +386,12 @@ int i; if (char1 != char2) { bit = char1 ^ char2; - compare_type = sse2_compare_match1i; + compare_type = vector_compare_match1i; if (!is_powerof2(bit)) { bit = 0; - compare_type = sse2_compare_match2; + compare_type = vector_compare_match2; } } @@ -476,27 +496,15 @@ return not_found; #ifndef _WIN64 -static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void) -{ -#if PCRE2_CODE_UNIT_WIDTH == 8 -return 15; -#elif PCRE2_CODE_UNIT_WIDTH == 16 -return 7; -#elif PCRE2_CODE_UNIT_WIDTH == 32 -return 3; -#else -#error "Unsupported unit width" -#endif -} - #define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SSE2)) static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1, PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b) { DEFINE_COMPILER; -sse2_compare_type compare1_type = sse2_compare_match1; -sse2_compare_type compare2_type = sse2_compare_match1; +sljit_u8 instruction[8]; +vector_compare_type compare1_type = vector_compare_match1; +vector_compare_type compare2_type = vector_compare_match1; sljit_u32 bit1 = 0; sljit_u32 bit2 = 0; sljit_u32 diff = IN_UCHARS(offs1 - offs2); @@ -516,7 +524,6 @@ struct sljit_label *start; struct sljit_label *restart; #endif struct sljit_jump *jump[2]; -sljit_u8 instruction[8]; int i; SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2); @@ -549,13 +556,13 @@ else bit1 = char1a ^ char1b; if (is_powerof2(bit1)) { - compare1_type = sse2_compare_match1i; + compare1_type = vector_compare_match1i; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1)); } else { - compare1_type = sse2_compare_match2; + compare1_type = vector_compare_match2; bit1 = 0; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b)); @@ -578,13 +585,13 @@ else bit2 = char2a ^ char2b; if (is_powerof2(bit2)) { - compare2_type = sse2_compare_match1i; + compare2_type = vector_compare_match1i; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2)); } else { - compare2_type = sse2_compare_match2; + compare2_type = vector_compare_match2; bit2 = 0; OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b)); @@ -731,9 +738,6 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); -if (common->match_end_ptr != 0) - OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); - #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) { @@ -760,7 +764,7 @@ if (common->match_end_ptr != 0) #undef SSE2_COMPARE_TYPE_INDEX -#endif /* SLJIT_CONFIG_X86 && !SUPPORT_VALGRIND */ +#endif /* SLJIT_CONFIG_X86 */ #if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__)) @@ -1121,3 +1125,734 @@ JUMPHERE(partial_quit); } #endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */ + +#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) + +#if PCRE2_CODE_UNIT_WIDTH == 8 +#define VECTOR_ELEMENT_SIZE 0 +#elif PCRE2_CODE_UNIT_WIDTH == 16 +#define VECTOR_ELEMENT_SIZE 1 +#elif PCRE2_CODE_UNIT_WIDTH == 32 +#define VECTOR_ELEMENT_SIZE 2 +#else +#error "Unsupported unit width" +#endif + +static void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg, + sljit_s32 base_reg, sljit_s32 index_reg) +{ +sljit_u16 instruction[3]; + +instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg); +instruction[1] = (sljit_u16)(base_reg << 12); +instruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06)); + +sljit_emit_op_custom(compiler, instruction, 6); +} + +#if PCRE2_CODE_UNIT_WIDTH == 32 + +static void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg, + PCRE2_UCHAR chr, sljit_s32 tmp_general_reg) +{ +sljit_u16 instruction[3]; + +SLJIT_ASSERT(step >= 0 && step <= 1); + +if (chr < 0x7fff) + { + if (step == 1) + return; + + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4)); + instruction[1] = (sljit_u16)chr; + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +if (step == 0) + { + OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr); + + /* VLVG */ + instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(tmp_general_reg)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +/* VREP */ +instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg); +instruction[1] = 0; +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d); +sljit_emit_op_custom(compiler, instruction, 6); +} + +#endif + +static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type, + int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind) +{ +sljit_u16 instruction[3]; + +SLJIT_ASSERT(step >= 0 && step <= 2); + +if (step == 1) + { + /* VCEQ */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp1_ind << 12); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } + +if (compare_type != vector_compare_match2) + { + if (step == 0 && compare_type == vector_compare_match1i) + { + /* VO */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp2_ind << 12); + instruction[2] = (sljit_u16)((0xe << 8) | 0x6a); + sljit_emit_op_custom(compiler, instruction, 6); + } + return; + } + +switch (step) + { + case 0: + /* VCEQ */ + instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(cmp2_ind << 12); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8); + sljit_emit_op_custom(compiler, instruction, 6); + return; + + case 2: + /* VO */ + instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind); + instruction[1] = (sljit_u16)(tmp_ind << 12); + instruction[2] = (sljit_u16)((0xe << 8) | 0x6a); + sljit_emit_op_custom(compiler, instruction, 6); + return; + } +} + +#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1 + +static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +struct sljit_label *restart; +#endif +struct sljit_jump *quit; +struct sljit_jump *partial_quit[2]; +vector_compare_type compare_type = vector_compare_match1; +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); +sljit_s32 data_ind = 0; +sljit_s32 tmp_ind = 1; +sljit_s32 cmp1_ind = 2; +sljit_s32 cmp2_ind = 3; +sljit_s32 zero_ind = 4; +sljit_u32 bit = 0; +int i; + +SLJIT_UNUSED_ARG(offset); + +if (char1 != char2) + { + bit = char1 ^ char2; + compare_type = vector_compare_match1i; + + if (!is_powerof2(bit)) + { + bit = 0; + compare_type = vector_compare_match2; + } + } + +partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); +if (common->mode == PCRE2_JIT_COMPLETE) + add_jump(compiler, &common->failed_match, partial_quit[0]); + +/* First part (unaligned start) */ + +OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4)); +instruction[1] = (sljit_u16)(char1 | bit); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1 != char2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4)); + instruction[1] = (sljit_u16)(bit != 0 ? bit : char2); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1); + + if (char1 != char2) + replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1); + } + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +if (compare_type == vector_compare_match2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + } + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +restart = LABEL(); +#endif + +load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0); +OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); +quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0); + +OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16); + +/* Second part (aligned) */ +start = LABEL(); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16); + +partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); +if (common->mode == PCRE2_JIT_COMPLETE) + add_jump(compiler, &common->failed_match, partial_quit[1]); + +load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW); +JUMPTO(SLJIT_OVERFLOW, start); + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); + +JUMPHERE(quit); + +if (common->mode != PCRE2_JIT_COMPLETE) + { + JUMPHERE(partial_quit[0]); + JUMPHERE(partial_quit[1]); + OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); + } +else + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +if (common->utf && offset > 0) + { + SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE); + + OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset)); + + quit = jump_if_utf_char_start(compiler, TMP1); + + OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + + OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16); + JUMPTO(SLJIT_JUMP, restart); + + JUMPHERE(quit); + } +#endif +} + +#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1 + +static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +struct sljit_jump *quit; +jump_list *not_found = NULL; +vector_compare_type compare_type = vector_compare_match1; +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 tmp3_reg_ind = sljit_get_register_index(TMP3); +sljit_s32 data_ind = 0; +sljit_s32 tmp_ind = 1; +sljit_s32 cmp1_ind = 2; +sljit_s32 cmp2_ind = 3; +sljit_s32 zero_ind = 4; +sljit_u32 bit = 0; +int i; + +if (char1 != char2) + { + bit = char1 ^ char2; + compare_type = vector_compare_match1i; + + if (!is_powerof2(bit)) + { + bit = 0; + compare_type = vector_compare_match2; + } + } + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +/* First part (unaligned start) */ + +OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4)); +instruction[1] = (sljit_u16)(char1 | bit); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1 != char2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4)); + instruction[1] = (sljit_u16)(bit != 0 ? bit : char2); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3); + + if (char1 != char2) + replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3); + } + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +if (compare_type == vector_compare_match2) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); + instruction[1] = 0; + instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); + sljit_emit_op_custom(compiler, instruction, 6); + } + +load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0); +OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0); +quit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0); + +OP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16); + +/* Second part (aligned) */ +start = LABEL(); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16); + +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0); + +if (compare_type != vector_compare_match2) + { + if (compare_type == vector_compare_match1i) + fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFEE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80); + sljit_emit_op_custom(compiler, instruction, 6); + } +else + { + for (i = 0; i < 3; i++) + fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind); + + /* VFENE */ + instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind); + instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); + instruction[2] = (sljit_u16)((0xe << 8) | 0x81); + sljit_emit_op_custom(compiler, instruction, 6); + } + +sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW); +JUMPTO(SLJIT_OVERFLOW, start); + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0); + +JUMPHERE(quit); +add_jump(compiler, ¬_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0)); + +return not_found; +} + +#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1 + +static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1, + PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b) +{ +DEFINE_COMPILER; +sljit_u16 instruction[3]; +struct sljit_label *start; +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +struct sljit_label *restart; +#endif +struct sljit_jump *quit; +struct sljit_jump *jump[2]; +vector_compare_type compare1_type = vector_compare_match1; +vector_compare_type compare2_type = vector_compare_match1; +sljit_u32 bit1 = 0; +sljit_u32 bit2 = 0; +sljit_s32 diff = IN_UCHARS(offs2 - offs1); +sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1); +sljit_s32 tmp2_reg_ind = sljit_get_register_index(TMP2); +sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR); +sljit_s32 data1_ind = 0; +sljit_s32 data2_ind = 1; +sljit_s32 tmp1_ind = 2; +sljit_s32 tmp2_ind = 3; +sljit_s32 cmp1a_ind = 4; +sljit_s32 cmp1b_ind = 5; +sljit_s32 cmp2a_ind = 6; +sljit_s32 cmp2b_ind = 7; +sljit_s32 zero_ind = 8; +int i; + +SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2); +SLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset())); +SLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0); + +if (char1a != char1b) + { + bit1 = char1a ^ char1b; + compare1_type = vector_compare_match1i; + + if (!is_powerof2(bit1)) + { + bit1 = 0; + compare1_type = vector_compare_match2; + } + } + +if (char2a != char2b) + { + bit2 = char2a ^ char2b; + compare2_type = vector_compare_match1i; + + if (!is_powerof2(bit2)) + { + bit2 = 0; + compare2_type = vector_compare_match2; + } + } + +/* Initialize. */ +if (common->match_end_ptr != 0) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); + OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); + OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); + + OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + CMOV(SLJIT_LESS, STR_END, TMP1, 0); + } + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1)); +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); +OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15); + +#if PCRE2_CODE_UNIT_WIDTH != 32 + +OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4)); +instruction[1] = (sljit_u16)(char1a | bit1); +instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +if (char1a != char1b) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4)); + instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4)); +instruction[1] = (sljit_u16)(char2a | bit2); +/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ +sljit_emit_op_custom(compiler, instruction, 6); + +if (char2a != char2b) + { + /* VREPI */ + instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4)); + instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b); + /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */ + sljit_emit_op_custom(compiler, instruction, 6); + } + +#else /* PCRE2_CODE_UNIT_WIDTH == 32 */ + +for (int i = 0; i < 2; i++) + { + replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1); + + if (char1a != char1b) + replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1); + + replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1); + + if (char2a != char2b) + replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1); + } + +OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + +#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */ + +/* VREPI */ +instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4)); +instruction[1] = 0; +instruction[2] = (sljit_u16)((0x8 << 8) | 0x45); +sljit_emit_op_custom(compiler, instruction, 6); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +restart = LABEL(); +#endif + +jump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0); +load_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0); +jump[1] = JUMP(SLJIT_JUMP); +JUMPHERE(jump[0]); +load_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0); +JUMPHERE(jump[1]); + +load_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0); +OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16); + +for (i = 0; i < 3; i++) + { + fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind); + fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind); + } + +/* VN */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)(data2_ind << 12); +instruction[2] = (sljit_u16)((0xe << 8) | 0x68); +sljit_emit_op_custom(compiler, instruction, 6); + +/* VFENE */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); +instruction[2] = (sljit_u16)((0xe << 8) | 0x81); +sljit_emit_op_custom(compiler, instruction, 6); + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); +quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0); + +OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16); +OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff); + +/* Main loop. */ +start = LABEL(); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16); +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +load_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0); +load_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind); + +for (i = 0; i < 3; i++) + { + fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind); + fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind); + } + +/* VN */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)(data2_ind << 12); +instruction[2] = (sljit_u16)((0xe << 8) | 0x68); +sljit_emit_op_custom(compiler, instruction, 6); + +/* VFENE */ +instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind); +instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4)); +instruction[2] = (sljit_u16)((0xe << 8) | 0x81); +sljit_emit_op_custom(compiler, instruction, 6); + +sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW); +JUMPTO(SLJIT_OVERFLOW, start); + +/* VLGVB */ +instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind); +instruction[1] = 7; +instruction[2] = (sljit_u16)((0x4 << 8) | 0x21); +sljit_emit_op_custom(compiler, instruction, 6); + +OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); + +JUMPHERE(quit); + +add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + +#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 +if (common->utf) + { + SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE); + + OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1)); + + quit = jump_if_utf_char_start(compiler, TMP1); + + OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0)); + + /* TMP1 contains diff. */ + OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15); + OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff); + JUMPTO(SLJIT_JUMP, restart); + + JUMPHERE(quit); + } +#endif + +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1)); + +if (common->match_end_ptr != 0) + OP1(SLJIT_MOV, STR_END, 0, TMP3, 0); +} + +#endif /* SLJIT_CONFIG_S390X */ + +#endif /* !SUPPORT_VALGRIND */ diff --git a/thirdparty/pcre2/src/pcre2_match.c b/thirdparty/pcre2/src/pcre2_match.c index e3f78c2ca3..f28cdbb47a 100644 --- a/thirdparty/pcre2/src/pcre2_match.c +++ b/thirdparty/pcre2/src/pcre2_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2015-2020 University of Cambridge + New API code Copyright (c) 2015-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -818,10 +818,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); /* N is now the frame of the recursion; the previous frame is at the OP_RECURSE position. Go back there, copying the current subject position - and mark, and move on past the OP_RECURSE. */ + and mark, and the start_match position (\K might have changed it), and + then move on past the OP_RECURSE. */ P->eptr = Feptr; P->mark = Fmark; + P->start_match = Fstart_match; F = P; Fecode += 1 + LINK_SIZE; continue; @@ -6115,8 +6117,8 @@ BOOL has_req_cu = FALSE; BOOL startline; #if PCRE2_CODE_UNIT_WIDTH == 8 -BOOL memchr_not_found_first_cu; -BOOL memchr_not_found_first_cu2; +PCRE2_SPTR memchr_found_first_cu; +PCRE2_SPTR memchr_found_first_cu2; #endif PCRE2_UCHAR first_cu = 0; @@ -6710,8 +6712,8 @@ start_partial = match_partial = NULL; mb->hitend = FALSE; #if PCRE2_CODE_UNIT_WIDTH == 8 -memchr_not_found_first_cu = FALSE; -memchr_not_found_first_cu2 = FALSE; +memchr_found_first_cu = NULL; +memchr_found_first_cu2 = NULL; #endif for(;;) @@ -6780,13 +6782,7 @@ for(;;) } } - /* Not anchored. Advance to a unique first code unit if there is one. In - 8-bit mode, the use of memchr() gives a big speed up, even though we have - to call it twice in caseless mode, in order to find the earliest occurrence - of the character in either of its cases. If a call to memchr() that - searches the rest of the subject fails to find one case, remember that in - order not to keep on repeating the search. This can make a huge difference - when the strings are very long and only one case is present. */ + /* Not anchored. Advance to a unique first code unit if there is one. */ else { @@ -6794,43 +6790,68 @@ for(;;) { if (first_cu != first_cu2) /* Caseless */ { + /* In 16-bit and 32_bit modes we have to do our own search, so can + look for both cases at once. */ + #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && (smc = UCHAR21TEST(start_match)) != first_cu && - smc != first_cu2) + smc != first_cu2) start_match++; +#else + /* In 8-bit mode, the use of memchr() gives a big speed up, even + though we have to call it twice in order to find the earliest + occurrence of the code unit in either of its cases. Caching is used + to remember the positions of previously found code units. This can + make a huge difference when the strings are very long and only one + case is actually present. */ -#else /* 8-bit code units */ PCRE2_SPTR pp1 = NULL; PCRE2_SPTR pp2 = NULL; - PCRE2_SIZE cu2size = end_subject - start_match; + PCRE2_SIZE searchlength = end_subject - start_match; - if (!memchr_not_found_first_cu) + /* If we haven't got a previously found position for first_cu, or if + the current starting position is later, we need to do a search. If + the code unit is not found, set it to the end. */ + + if (memchr_found_first_cu == NULL || + start_match > memchr_found_first_cu) { - pp1 = memchr(start_match, first_cu, end_subject - start_match); - if (pp1 == NULL) memchr_not_found_first_cu = TRUE; - else cu2size = pp1 - start_match; + pp1 = memchr(start_match, first_cu, searchlength); + memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1; } - /* If pp1 is not NULL, we have arranged to search only as far as pp1, - to see if the other case is earlier, so we can set "not found" only - when both searches have returned NULL. */ + /* If the start is before a previously found position, use the + previous position, or NULL if a previous search failed. */ + + else pp1 = (memchr_found_first_cu == end_subject)? NULL : + memchr_found_first_cu; - if (!memchr_not_found_first_cu2) + /* Do the same thing for the other case. */ + + if (memchr_found_first_cu2 == NULL || + start_match > memchr_found_first_cu2) { - pp2 = memchr(start_match, first_cu2, cu2size); - memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL); + pp2 = memchr(start_match, first_cu2, searchlength); + memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2; } + else pp2 = (memchr_found_first_cu2 == end_subject)? NULL : + memchr_found_first_cu2; + + /* Set the start to the end of the subject if neither case was found. + Otherwise, use the earlier found point. */ + if (pp1 == NULL) start_match = (pp2 == NULL)? end_subject : pp2; else start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2; -#endif + +#endif /* 8-bit handling */ } - /* The caseful case */ + /* The caseful case is much simpler. */ else { diff --git a/thirdparty/pcre2/src/pcre2_tables.c b/thirdparty/pcre2/src/pcre2_tables.c index b10de45efb..c164e976e0 100644 --- a/thirdparty/pcre2/src/pcre2_tables.c +++ b/thirdparty/pcre2/src/pcre2_tables.c @@ -273,6 +273,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Cs0 STR_C STR_s "\0" #define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0" #define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0" +#define STRING_Cypro_Minoan0 STR_C STR_y STR_p STR_r STR_o STR_UNDERSCORE STR_M STR_i STR_n STR_o STR_a STR_n "\0" #define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0" #define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0" #define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0" @@ -371,6 +372,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Old_Sogdian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0" #define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0" #define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0" +#define STRING_Old_Uyghur0 STR_O STR_l STR_d STR_UNDERSCORE STR_U STR_y STR_g STR_h STR_u STR_r "\0" #define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0" #define STRING_Osage0 STR_O STR_s STR_a STR_g STR_e "\0" #define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0" @@ -415,6 +417,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0" #define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0" #define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0" +#define STRING_Tangsa0 STR_T STR_a STR_n STR_g STR_s STR_a "\0" #define STRING_Tangut0 STR_T STR_a STR_n STR_g STR_u STR_t "\0" #define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0" #define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0" @@ -422,9 +425,11 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */ #define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0" #define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0" #define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0" +#define STRING_Toto0 STR_T STR_o STR_t STR_o "\0" #define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0" #define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0" #define STRING_Vai0 STR_V STR_a STR_i "\0" +#define STRING_Vithkuqi0 STR_V STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0" #define STRING_Wancho0 STR_W STR_a STR_n STR_c STR_h STR_o "\0" #define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0" #define STRING_Xan0 STR_X STR_a STR_n "\0" @@ -476,6 +481,7 @@ const char PRIV(utt_names)[] = STRING_Cs0 STRING_Cuneiform0 STRING_Cypriot0 + STRING_Cypro_Minoan0 STRING_Cyrillic0 STRING_Deseret0 STRING_Devanagari0 @@ -574,6 +580,7 @@ const char PRIV(utt_names)[] = STRING_Old_Sogdian0 STRING_Old_South_Arabian0 STRING_Old_Turkic0 + STRING_Old_Uyghur0 STRING_Oriya0 STRING_Osage0 STRING_Osmanya0 @@ -618,6 +625,7 @@ const char PRIV(utt_names)[] = STRING_Tai_Viet0 STRING_Takri0 STRING_Tamil0 + STRING_Tangsa0 STRING_Tangut0 STRING_Telugu0 STRING_Thaana0 @@ -625,9 +633,11 @@ const char PRIV(utt_names)[] = STRING_Tibetan0 STRING_Tifinagh0 STRING_Tirhuta0 + STRING_Toto0 STRING_Ugaritic0 STRING_Unknown0 STRING_Vai0 + STRING_Vithkuqi0 STRING_Wancho0 STRING_Warang_Citi0 STRING_Xan0 @@ -679,172 +689,177 @@ const ucp_type_table PRIV(utt)[] = { { 255, PT_PC, ucp_Cs }, { 258, PT_SC, ucp_Cuneiform }, { 268, PT_SC, ucp_Cypriot }, - { 276, PT_SC, ucp_Cyrillic }, - { 285, PT_SC, ucp_Deseret }, - { 293, PT_SC, ucp_Devanagari }, - { 304, PT_SC, ucp_Dives_Akuru }, - { 316, PT_SC, ucp_Dogra }, - { 322, PT_SC, ucp_Duployan }, - { 331, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 352, PT_SC, ucp_Elbasan }, - { 360, PT_SC, ucp_Elymaic }, - { 368, PT_SC, ucp_Ethiopic }, - { 377, PT_SC, ucp_Georgian }, - { 386, PT_SC, ucp_Glagolitic }, - { 397, PT_SC, ucp_Gothic }, - { 404, PT_SC, ucp_Grantha }, - { 412, PT_SC, ucp_Greek }, - { 418, PT_SC, ucp_Gujarati }, - { 427, PT_SC, ucp_Gunjala_Gondi }, - { 441, PT_SC, ucp_Gurmukhi }, - { 450, PT_SC, ucp_Han }, - { 454, PT_SC, ucp_Hangul }, - { 461, PT_SC, ucp_Hanifi_Rohingya }, - { 477, PT_SC, ucp_Hanunoo }, - { 485, PT_SC, ucp_Hatran }, - { 492, PT_SC, ucp_Hebrew }, - { 499, PT_SC, ucp_Hiragana }, - { 508, PT_SC, ucp_Imperial_Aramaic }, - { 525, PT_SC, ucp_Inherited }, - { 535, PT_SC, ucp_Inscriptional_Pahlavi }, - { 557, PT_SC, ucp_Inscriptional_Parthian }, - { 580, PT_SC, ucp_Javanese }, - { 589, PT_SC, ucp_Kaithi }, - { 596, PT_SC, ucp_Kannada }, - { 604, PT_SC, ucp_Katakana }, - { 613, PT_SC, ucp_Kayah_Li }, - { 622, PT_SC, ucp_Kharoshthi }, - { 633, PT_SC, ucp_Khitan_Small_Script }, - { 653, PT_SC, ucp_Khmer }, - { 659, PT_SC, ucp_Khojki }, - { 666, PT_SC, ucp_Khudawadi }, - { 676, PT_GC, ucp_L }, - { 678, PT_LAMP, 0 }, - { 681, PT_SC, ucp_Lao }, - { 685, PT_SC, ucp_Latin }, - { 691, PT_SC, ucp_Lepcha }, - { 698, PT_SC, ucp_Limbu }, - { 704, PT_SC, ucp_Linear_A }, - { 713, PT_SC, ucp_Linear_B }, - { 722, PT_SC, ucp_Lisu }, - { 727, PT_PC, ucp_Ll }, - { 730, PT_PC, ucp_Lm }, - { 733, PT_PC, ucp_Lo }, - { 736, PT_PC, ucp_Lt }, - { 739, PT_PC, ucp_Lu }, - { 742, PT_SC, ucp_Lycian }, - { 749, PT_SC, ucp_Lydian }, - { 756, PT_GC, ucp_M }, - { 758, PT_SC, ucp_Mahajani }, - { 767, PT_SC, ucp_Makasar }, - { 775, PT_SC, ucp_Malayalam }, - { 785, PT_SC, ucp_Mandaic }, - { 793, PT_SC, ucp_Manichaean }, - { 804, PT_SC, ucp_Marchen }, - { 812, PT_SC, ucp_Masaram_Gondi }, - { 826, PT_PC, ucp_Mc }, - { 829, PT_PC, ucp_Me }, - { 832, PT_SC, ucp_Medefaidrin }, - { 844, PT_SC, ucp_Meetei_Mayek }, - { 857, PT_SC, ucp_Mende_Kikakui }, - { 871, PT_SC, ucp_Meroitic_Cursive }, - { 888, PT_SC, ucp_Meroitic_Hieroglyphs }, - { 909, PT_SC, ucp_Miao }, - { 914, PT_PC, ucp_Mn }, - { 917, PT_SC, ucp_Modi }, - { 922, PT_SC, ucp_Mongolian }, - { 932, PT_SC, ucp_Mro }, - { 936, PT_SC, ucp_Multani }, - { 944, PT_SC, ucp_Myanmar }, - { 952, PT_GC, ucp_N }, - { 954, PT_SC, ucp_Nabataean }, - { 964, PT_SC, ucp_Nandinagari }, - { 976, PT_PC, ucp_Nd }, - { 979, PT_SC, ucp_New_Tai_Lue }, - { 991, PT_SC, ucp_Newa }, - { 996, PT_SC, ucp_Nko }, - { 1000, PT_PC, ucp_Nl }, - { 1003, PT_PC, ucp_No }, - { 1006, PT_SC, ucp_Nushu }, - { 1012, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 1035, PT_SC, ucp_Ogham }, - { 1041, PT_SC, ucp_Ol_Chiki }, - { 1050, PT_SC, ucp_Old_Hungarian }, - { 1064, PT_SC, ucp_Old_Italic }, - { 1075, PT_SC, ucp_Old_North_Arabian }, - { 1093, PT_SC, ucp_Old_Permic }, - { 1104, PT_SC, ucp_Old_Persian }, - { 1116, PT_SC, ucp_Old_Sogdian }, - { 1128, PT_SC, ucp_Old_South_Arabian }, - { 1146, PT_SC, ucp_Old_Turkic }, - { 1157, PT_SC, ucp_Oriya }, - { 1163, PT_SC, ucp_Osage }, - { 1169, PT_SC, ucp_Osmanya }, - { 1177, PT_GC, ucp_P }, - { 1179, PT_SC, ucp_Pahawh_Hmong }, - { 1192, PT_SC, ucp_Palmyrene }, - { 1202, PT_SC, ucp_Pau_Cin_Hau }, - { 1214, PT_PC, ucp_Pc }, - { 1217, PT_PC, ucp_Pd }, - { 1220, PT_PC, ucp_Pe }, - { 1223, PT_PC, ucp_Pf }, - { 1226, PT_SC, ucp_Phags_Pa }, - { 1235, PT_SC, ucp_Phoenician }, - { 1246, PT_PC, ucp_Pi }, - { 1249, PT_PC, ucp_Po }, - { 1252, PT_PC, ucp_Ps }, - { 1255, PT_SC, ucp_Psalter_Pahlavi }, - { 1271, PT_SC, ucp_Rejang }, - { 1278, PT_SC, ucp_Runic }, - { 1284, PT_GC, ucp_S }, - { 1286, PT_SC, ucp_Samaritan }, - { 1296, PT_SC, ucp_Saurashtra }, - { 1307, PT_PC, ucp_Sc }, - { 1310, PT_SC, ucp_Sharada }, - { 1318, PT_SC, ucp_Shavian }, - { 1326, PT_SC, ucp_Siddham }, - { 1334, PT_SC, ucp_SignWriting }, - { 1346, PT_SC, ucp_Sinhala }, - { 1354, PT_PC, ucp_Sk }, - { 1357, PT_PC, ucp_Sm }, - { 1360, PT_PC, ucp_So }, - { 1363, PT_SC, ucp_Sogdian }, - { 1371, PT_SC, ucp_Sora_Sompeng }, - { 1384, PT_SC, ucp_Soyombo }, - { 1392, PT_SC, ucp_Sundanese }, - { 1402, PT_SC, ucp_Syloti_Nagri }, - { 1415, PT_SC, ucp_Syriac }, - { 1422, PT_SC, ucp_Tagalog }, - { 1430, PT_SC, ucp_Tagbanwa }, - { 1439, PT_SC, ucp_Tai_Le }, - { 1446, PT_SC, ucp_Tai_Tham }, - { 1455, PT_SC, ucp_Tai_Viet }, - { 1464, PT_SC, ucp_Takri }, - { 1470, PT_SC, ucp_Tamil }, - { 1476, PT_SC, ucp_Tangut }, - { 1483, PT_SC, ucp_Telugu }, - { 1490, PT_SC, ucp_Thaana }, - { 1497, PT_SC, ucp_Thai }, - { 1502, PT_SC, ucp_Tibetan }, - { 1510, PT_SC, ucp_Tifinagh }, - { 1519, PT_SC, ucp_Tirhuta }, - { 1527, PT_SC, ucp_Ugaritic }, - { 1536, PT_SC, ucp_Unknown }, - { 1544, PT_SC, ucp_Vai }, - { 1548, PT_SC, ucp_Wancho }, - { 1555, PT_SC, ucp_Warang_Citi }, - { 1567, PT_ALNUM, 0 }, - { 1571, PT_PXSPACE, 0 }, - { 1575, PT_SPACE, 0 }, - { 1579, PT_UCNC, 0 }, - { 1583, PT_WORD, 0 }, - { 1587, PT_SC, ucp_Yezidi }, - { 1594, PT_SC, ucp_Yi }, - { 1597, PT_GC, ucp_Z }, - { 1599, PT_SC, ucp_Zanabazar_Square }, - { 1616, PT_PC, ucp_Zl }, - { 1619, PT_PC, ucp_Zp }, - { 1622, PT_PC, ucp_Zs } + { 276, PT_SC, ucp_Cypro_Minoan }, + { 289, PT_SC, ucp_Cyrillic }, + { 298, PT_SC, ucp_Deseret }, + { 306, PT_SC, ucp_Devanagari }, + { 317, PT_SC, ucp_Dives_Akuru }, + { 329, PT_SC, ucp_Dogra }, + { 335, PT_SC, ucp_Duployan }, + { 344, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 365, PT_SC, ucp_Elbasan }, + { 373, PT_SC, ucp_Elymaic }, + { 381, PT_SC, ucp_Ethiopic }, + { 390, PT_SC, ucp_Georgian }, + { 399, PT_SC, ucp_Glagolitic }, + { 410, PT_SC, ucp_Gothic }, + { 417, PT_SC, ucp_Grantha }, + { 425, PT_SC, ucp_Greek }, + { 431, PT_SC, ucp_Gujarati }, + { 440, PT_SC, ucp_Gunjala_Gondi }, + { 454, PT_SC, ucp_Gurmukhi }, + { 463, PT_SC, ucp_Han }, + { 467, PT_SC, ucp_Hangul }, + { 474, PT_SC, ucp_Hanifi_Rohingya }, + { 490, PT_SC, ucp_Hanunoo }, + { 498, PT_SC, ucp_Hatran }, + { 505, PT_SC, ucp_Hebrew }, + { 512, PT_SC, ucp_Hiragana }, + { 521, PT_SC, ucp_Imperial_Aramaic }, + { 538, PT_SC, ucp_Inherited }, + { 548, PT_SC, ucp_Inscriptional_Pahlavi }, + { 570, PT_SC, ucp_Inscriptional_Parthian }, + { 593, PT_SC, ucp_Javanese }, + { 602, PT_SC, ucp_Kaithi }, + { 609, PT_SC, ucp_Kannada }, + { 617, PT_SC, ucp_Katakana }, + { 626, PT_SC, ucp_Kayah_Li }, + { 635, PT_SC, ucp_Kharoshthi }, + { 646, PT_SC, ucp_Khitan_Small_Script }, + { 666, PT_SC, ucp_Khmer }, + { 672, PT_SC, ucp_Khojki }, + { 679, PT_SC, ucp_Khudawadi }, + { 689, PT_GC, ucp_L }, + { 691, PT_LAMP, 0 }, + { 694, PT_SC, ucp_Lao }, + { 698, PT_SC, ucp_Latin }, + { 704, PT_SC, ucp_Lepcha }, + { 711, PT_SC, ucp_Limbu }, + { 717, PT_SC, ucp_Linear_A }, + { 726, PT_SC, ucp_Linear_B }, + { 735, PT_SC, ucp_Lisu }, + { 740, PT_PC, ucp_Ll }, + { 743, PT_PC, ucp_Lm }, + { 746, PT_PC, ucp_Lo }, + { 749, PT_PC, ucp_Lt }, + { 752, PT_PC, ucp_Lu }, + { 755, PT_SC, ucp_Lycian }, + { 762, PT_SC, ucp_Lydian }, + { 769, PT_GC, ucp_M }, + { 771, PT_SC, ucp_Mahajani }, + { 780, PT_SC, ucp_Makasar }, + { 788, PT_SC, ucp_Malayalam }, + { 798, PT_SC, ucp_Mandaic }, + { 806, PT_SC, ucp_Manichaean }, + { 817, PT_SC, ucp_Marchen }, + { 825, PT_SC, ucp_Masaram_Gondi }, + { 839, PT_PC, ucp_Mc }, + { 842, PT_PC, ucp_Me }, + { 845, PT_SC, ucp_Medefaidrin }, + { 857, PT_SC, ucp_Meetei_Mayek }, + { 870, PT_SC, ucp_Mende_Kikakui }, + { 884, PT_SC, ucp_Meroitic_Cursive }, + { 901, PT_SC, ucp_Meroitic_Hieroglyphs }, + { 922, PT_SC, ucp_Miao }, + { 927, PT_PC, ucp_Mn }, + { 930, PT_SC, ucp_Modi }, + { 935, PT_SC, ucp_Mongolian }, + { 945, PT_SC, ucp_Mro }, + { 949, PT_SC, ucp_Multani }, + { 957, PT_SC, ucp_Myanmar }, + { 965, PT_GC, ucp_N }, + { 967, PT_SC, ucp_Nabataean }, + { 977, PT_SC, ucp_Nandinagari }, + { 989, PT_PC, ucp_Nd }, + { 992, PT_SC, ucp_New_Tai_Lue }, + { 1004, PT_SC, ucp_Newa }, + { 1009, PT_SC, ucp_Nko }, + { 1013, PT_PC, ucp_Nl }, + { 1016, PT_PC, ucp_No }, + { 1019, PT_SC, ucp_Nushu }, + { 1025, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1048, PT_SC, ucp_Ogham }, + { 1054, PT_SC, ucp_Ol_Chiki }, + { 1063, PT_SC, ucp_Old_Hungarian }, + { 1077, PT_SC, ucp_Old_Italic }, + { 1088, PT_SC, ucp_Old_North_Arabian }, + { 1106, PT_SC, ucp_Old_Permic }, + { 1117, PT_SC, ucp_Old_Persian }, + { 1129, PT_SC, ucp_Old_Sogdian }, + { 1141, PT_SC, ucp_Old_South_Arabian }, + { 1159, PT_SC, ucp_Old_Turkic }, + { 1170, PT_SC, ucp_Old_Uyghur }, + { 1181, PT_SC, ucp_Oriya }, + { 1187, PT_SC, ucp_Osage }, + { 1193, PT_SC, ucp_Osmanya }, + { 1201, PT_GC, ucp_P }, + { 1203, PT_SC, ucp_Pahawh_Hmong }, + { 1216, PT_SC, ucp_Palmyrene }, + { 1226, PT_SC, ucp_Pau_Cin_Hau }, + { 1238, PT_PC, ucp_Pc }, + { 1241, PT_PC, ucp_Pd }, + { 1244, PT_PC, ucp_Pe }, + { 1247, PT_PC, ucp_Pf }, + { 1250, PT_SC, ucp_Phags_Pa }, + { 1259, PT_SC, ucp_Phoenician }, + { 1270, PT_PC, ucp_Pi }, + { 1273, PT_PC, ucp_Po }, + { 1276, PT_PC, ucp_Ps }, + { 1279, PT_SC, ucp_Psalter_Pahlavi }, + { 1295, PT_SC, ucp_Rejang }, + { 1302, PT_SC, ucp_Runic }, + { 1308, PT_GC, ucp_S }, + { 1310, PT_SC, ucp_Samaritan }, + { 1320, PT_SC, ucp_Saurashtra }, + { 1331, PT_PC, ucp_Sc }, + { 1334, PT_SC, ucp_Sharada }, + { 1342, PT_SC, ucp_Shavian }, + { 1350, PT_SC, ucp_Siddham }, + { 1358, PT_SC, ucp_SignWriting }, + { 1370, PT_SC, ucp_Sinhala }, + { 1378, PT_PC, ucp_Sk }, + { 1381, PT_PC, ucp_Sm }, + { 1384, PT_PC, ucp_So }, + { 1387, PT_SC, ucp_Sogdian }, + { 1395, PT_SC, ucp_Sora_Sompeng }, + { 1408, PT_SC, ucp_Soyombo }, + { 1416, PT_SC, ucp_Sundanese }, + { 1426, PT_SC, ucp_Syloti_Nagri }, + { 1439, PT_SC, ucp_Syriac }, + { 1446, PT_SC, ucp_Tagalog }, + { 1454, PT_SC, ucp_Tagbanwa }, + { 1463, PT_SC, ucp_Tai_Le }, + { 1470, PT_SC, ucp_Tai_Tham }, + { 1479, PT_SC, ucp_Tai_Viet }, + { 1488, PT_SC, ucp_Takri }, + { 1494, PT_SC, ucp_Tamil }, + { 1500, PT_SC, ucp_Tangsa }, + { 1507, PT_SC, ucp_Tangut }, + { 1514, PT_SC, ucp_Telugu }, + { 1521, PT_SC, ucp_Thaana }, + { 1528, PT_SC, ucp_Thai }, + { 1533, PT_SC, ucp_Tibetan }, + { 1541, PT_SC, ucp_Tifinagh }, + { 1550, PT_SC, ucp_Tirhuta }, + { 1558, PT_SC, ucp_Toto }, + { 1563, PT_SC, ucp_Ugaritic }, + { 1572, PT_SC, ucp_Unknown }, + { 1580, PT_SC, ucp_Vai }, + { 1584, PT_SC, ucp_Vithkuqi }, + { 1593, PT_SC, ucp_Wancho }, + { 1600, PT_SC, ucp_Warang_Citi }, + { 1612, PT_ALNUM, 0 }, + { 1616, PT_PXSPACE, 0 }, + { 1620, PT_SPACE, 0 }, + { 1624, PT_UCNC, 0 }, + { 1628, PT_WORD, 0 }, + { 1632, PT_SC, ucp_Yezidi }, + { 1639, PT_SC, ucp_Yi }, + { 1642, PT_GC, ucp_Z }, + { 1644, PT_SC, ucp_Zanabazar_Square }, + { 1661, PT_PC, ucp_Zl }, + { 1664, PT_PC, ucp_Zp }, + { 1667, PT_PC, ucp_Zs } }; const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); diff --git a/thirdparty/pcre2/src/pcre2_ucd.c b/thirdparty/pcre2/src/pcre2_ucd.c index 46e23ff06b..0b8ac75bd4 100644 --- a/thirdparty/pcre2/src/pcre2_ucd.c +++ b/thirdparty/pcre2/src/pcre2_ucd.c @@ -20,7 +20,7 @@ needed. */ /* Unicode character database. */ /* This file was autogenerated by the MultiStage2.py script. */ -/* Total size: 101044 bytes, block size: 128. */ +/* Total size: 102844 bytes, block size: 128. */ /* The tables herein are needed only when UCP support is built, and in PCRE2 that happens automatically with UTF support. @@ -39,7 +39,7 @@ const uint16_t PRIV(ucd_stage2)[] = {0}; const uint32_t PRIV(ucd_caseless_sets)[] = {0}; #else -const char *PRIV(unicode_version) = "13.0.0"; +const char *PRIV(unicode_version) = "14.0.0"; /* If the 32-bit library is run in non-32-bit mode, character values greater than 0x10ffff may be encountered. For these we set up a @@ -116,16 +116,16 @@ set of decimal digits. It is used to ensure that all the digits in a script run come from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { - 65, /* Number of subsequent values */ + 66, /* Number of subsequent values */ 0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef, 0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9, 0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89, 0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909, 0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9, - 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59, - 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959, - 0x1fbf9, + 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16ac9, + 0x16b59, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, + 0x1e959, 0x1fbf9, }; /* This vector is a list of lists of scripts for the Script Extension @@ -135,55 +135,59 @@ const uint8_t PRIV(ucd_script_sets)[] = { /* 0 */ 0, /* 1 */ 1, 11, 0, /* 4 */ 1, 144, 0, - /* 7 */ 1, 50, 0, - /* 10 */ 1, 56, 0, - /* 13 */ 3, 15, 0, - /* 16 */ 4, 23, 0, - /* 19 */ 6, 84, 0, - /* 22 */ 12, 36, 0, - /* 25 */ 13, 18, 0, - /* 28 */ 13, 34, 0, - /* 31 */ 13, 118, 0, - /* 34 */ 13, 50, 0, - /* 37 */ 15, 107, 0, - /* 40 */ 15, 150, 0, - /* 43 */ 15, 100, 0, - /* 46 */ 15, 54, 0, - /* 49 */ 17, 34, 0, - /* 52 */ 107, 54, 0, - /* 55 */ 21, 108, 0, - /* 58 */ 22, 129, 0, - /* 61 */ 23, 34, 0, - /* 64 */ 27, 30, 0, - /* 67 */ 29, 150, 0, - /* 70 */ 34, 38, 0, - /* 73 */ 38, 65, 0, - /* 76 */ 1, 50, 56, 0, - /* 80 */ 1, 56, 156, 0, - /* 84 */ 3, 96, 49, 0, - /* 88 */ 96, 39, 53, 0, - /* 92 */ 12, 110, 36, 0, - /* 96 */ 15, 107, 29, 0, - /* 100 */ 15, 107, 34, 0, - /* 104 */ 23, 27, 30, 0, - /* 108 */ 69, 34, 39, 0, - /* 112 */ 3, 15, 107, 29, 0, - /* 117 */ 7, 25, 52, 51, 0, - /* 122 */ 15, 142, 85, 111, 0, - /* 127 */ 1, 144, 50, 56, 156, 0, - /* 133 */ 4, 24, 23, 27, 30, 0, - /* 139 */ 4, 24, 23, 27, 30, 61, 0, - /* 146 */ 15, 29, 37, 44, 54, 55, 0, - /* 153 */ 132, 1, 95, 112, 121, 144, 148, 50, 0, - /* 162 */ 3, 15, 107, 29, 150, 44, 55, 124, 0, - /* 171 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0, - /* 183 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0, - /* 196 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0, - /* 210 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0, - /* 224 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0, - /* 239 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 260 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 282 */ + /* 7 */ 1, 64, 0, + /* 10 */ 1, 50, 0, + /* 13 */ 1, 56, 0, + /* 16 */ 3, 15, 0, + /* 19 */ 4, 23, 0, + /* 22 */ 6, 84, 0, + /* 25 */ 12, 36, 0, + /* 28 */ 13, 18, 0, + /* 31 */ 13, 34, 0, + /* 34 */ 13, 118, 0, + /* 37 */ 13, 50, 0, + /* 40 */ 15, 107, 0, + /* 43 */ 15, 150, 0, + /* 46 */ 15, 100, 0, + /* 49 */ 15, 54, 0, + /* 52 */ 17, 34, 0, + /* 55 */ 107, 54, 0, + /* 58 */ 21, 108, 0, + /* 61 */ 22, 129, 0, + /* 64 */ 23, 34, 0, + /* 67 */ 27, 30, 0, + /* 70 */ 29, 150, 0, + /* 73 */ 34, 38, 0, + /* 76 */ 112, 158, 0, + /* 79 */ 38, 65, 0, + /* 82 */ 1, 50, 56, 0, + /* 86 */ 1, 56, 156, 0, + /* 90 */ 3, 96, 49, 0, + /* 94 */ 96, 39, 53, 0, + /* 98 */ 157, 12, 36, 0, + /* 102 */ 12, 110, 36, 0, + /* 106 */ 15, 107, 29, 0, + /* 110 */ 15, 107, 34, 0, + /* 114 */ 23, 27, 30, 0, + /* 118 */ 69, 34, 39, 0, + /* 122 */ 3, 15, 107, 29, 0, + /* 127 */ 7, 25, 52, 51, 0, + /* 132 */ 15, 142, 85, 111, 0, + /* 137 */ 4, 24, 23, 27, 30, 0, + /* 143 */ 1, 64, 144, 50, 56, 156, 0, + /* 150 */ 4, 24, 23, 27, 30, 61, 0, + /* 157 */ 15, 29, 37, 44, 54, 55, 0, + /* 164 */ 132, 1, 64, 144, 50, 56, 156, 0, + /* 172 */ 3, 15, 107, 29, 150, 44, 55, 124, 0, + /* 181 */ 132, 1, 95, 112, 158, 121, 144, 148, 50, 0, + /* 191 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0, + /* 203 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0, + /* 216 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0, + /* 230 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0, + /* 244 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0, + /* 259 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, + /* 280 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, + /* 302 */ }; /* These are the main two-stage UCD tables. The fields in each record are: @@ -192,7 +196,7 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero (32 bits, signed), script extension (16 bits, signed), and a dummy 16-bit field to make the whole thing a multiple of 4 bytes. */ -const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */ +const ucd_record PRIV(ucd_records)[] = { /* 11964 bytes, record size 12 */ { 10, 0, 2, 0, 0, 10, 256, }, /* 0 */ { 10, 0, 2, 0, 0, 10, 0, }, /* 1 */ { 10, 0, 1, 0, 0, 10, 0, }, /* 2 */ @@ -390,9 +394,9 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */ { 13, 9, 12, 88, 1, 13, 0, }, /* 194 */ { 13, 5, 12, 88, -1, 13, 0, }, /* 195 */ { 13, 26, 12, 0, 0, 13, 0, }, /* 196 */ - { 13, 12, 3, 0, 0, -31, 0, }, /* 197 */ - { 13, 12, 3, 0, 0, -25, 0, }, /* 198 */ - { 28, 12, 3, 0, 0, -28, 0, }, /* 199 */ + { 13, 12, 3, 0, 0, -34, 0, }, /* 197 */ + { 13, 12, 3, 0, 0, -28, 0, }, /* 198 */ + { 28, 12, 3, 0, 0, -31, 0, }, /* 199 */ { 13, 11, 3, 0, 0, 13, 0, }, /* 200 */ { 13, 9, 12, 0, 15, 13, 0, }, /* 201 */ { 13, 5, 12, 0, -15, 13, 0, }, /* 202 */ @@ -413,761 +417,783 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */ { 1, 25, 12, 0, 0, 1, 0, }, /* 217 */ { 1, 21, 12, 0, 0, 1, 0, }, /* 218 */ { 1, 23, 12, 0, 0, 1, 0, }, /* 219 */ - { 10, 21, 12, 0, 0, -127, 0, }, /* 220 */ + { 10, 21, 12, 0, 0, -143, 0, }, /* 220 */ { 1, 26, 12, 0, 0, 1, 0, }, /* 221 */ { 1, 12, 3, 0, 0, 1, 0, }, /* 222 */ - { 1, 1, 2, 0, 0, -76, 0, }, /* 223 */ - { 1, 7, 12, 0, 0, 1, 0, }, /* 224 */ - { 10, 6, 12, 0, 0, -153, 0, }, /* 225 */ - { 28, 12, 3, 0, 0, -7, 0, }, /* 226 */ - { 1, 13, 12, 0, 0, -80, 0, }, /* 227 */ - { 1, 21, 12, 0, 0, -4, 0, }, /* 228 */ - { 1, 6, 12, 0, 0, 1, 0, }, /* 229 */ - { 1, 13, 12, 0, 0, 1, 0, }, /* 230 */ - { 50, 21, 12, 0, 0, 50, 0, }, /* 231 */ - { 50, 1, 4, 0, 0, 50, 0, }, /* 232 */ - { 50, 7, 12, 0, 0, 50, 0, }, /* 233 */ - { 50, 12, 3, 0, 0, 50, 0, }, /* 234 */ - { 56, 7, 12, 0, 0, 56, 0, }, /* 235 */ - { 56, 12, 3, 0, 0, 56, 0, }, /* 236 */ - { 64, 13, 12, 0, 0, 64, 0, }, /* 237 */ - { 64, 7, 12, 0, 0, 64, 0, }, /* 238 */ - { 64, 12, 3, 0, 0, 64, 0, }, /* 239 */ - { 64, 6, 12, 0, 0, 64, 0, }, /* 240 */ - { 64, 26, 12, 0, 0, 64, 0, }, /* 241 */ - { 64, 21, 12, 0, 0, 64, 0, }, /* 242 */ - { 64, 23, 12, 0, 0, 64, 0, }, /* 243 */ - { 90, 7, 12, 0, 0, 90, 0, }, /* 244 */ - { 90, 12, 3, 0, 0, 90, 0, }, /* 245 */ - { 90, 6, 12, 0, 0, 90, 0, }, /* 246 */ - { 90, 21, 12, 0, 0, 90, 0, }, /* 247 */ - { 95, 7, 12, 0, 0, 95, 0, }, /* 248 */ - { 95, 12, 3, 0, 0, 95, 0, }, /* 249 */ - { 95, 21, 12, 0, 0, 95, 0, }, /* 250 */ - { 15, 12, 3, 0, 0, 15, 0, }, /* 251 */ - { 15, 10, 5, 0, 0, 15, 0, }, /* 252 */ - { 15, 7, 12, 0, 0, 15, 0, }, /* 253 */ - { 28, 12, 3, 0, 0, -196, 0, }, /* 254 */ - { 28, 12, 3, 0, 0, -183, 0, }, /* 255 */ - { 10, 21, 12, 0, 0, -239, 0, }, /* 256 */ - { 10, 21, 12, 0, 0, -260, 0, }, /* 257 */ - { 15, 13, 12, 0, 0, -122, 0, }, /* 258 */ - { 15, 21, 12, 0, 0, 15, 0, }, /* 259 */ - { 15, 6, 12, 0, 0, 15, 0, }, /* 260 */ - { 3, 7, 12, 0, 0, 3, 0, }, /* 261 */ - { 3, 12, 3, 0, 0, 3, 0, }, /* 262 */ - { 3, 10, 5, 0, 0, 3, 0, }, /* 263 */ - { 3, 10, 3, 0, 0, 3, 0, }, /* 264 */ - { 3, 13, 12, 0, 0, -84, 0, }, /* 265 */ - { 3, 23, 12, 0, 0, 3, 0, }, /* 266 */ - { 3, 15, 12, 0, 0, 3, 0, }, /* 267 */ - { 3, 26, 12, 0, 0, 3, 0, }, /* 268 */ - { 3, 21, 12, 0, 0, 3, 0, }, /* 269 */ - { 22, 12, 3, 0, 0, 22, 0, }, /* 270 */ - { 22, 10, 5, 0, 0, 22, 0, }, /* 271 */ - { 22, 7, 12, 0, 0, 22, 0, }, /* 272 */ - { 22, 13, 12, 0, 0, -58, 0, }, /* 273 */ - { 22, 21, 12, 0, 0, 22, 0, }, /* 274 */ - { 21, 12, 3, 0, 0, 21, 0, }, /* 275 */ - { 21, 10, 5, 0, 0, 21, 0, }, /* 276 */ - { 21, 7, 12, 0, 0, 21, 0, }, /* 277 */ - { 21, 13, 12, 0, 0, -55, 0, }, /* 278 */ - { 21, 21, 12, 0, 0, 21, 0, }, /* 279 */ - { 21, 23, 12, 0, 0, 21, 0, }, /* 280 */ - { 44, 12, 3, 0, 0, 44, 0, }, /* 281 */ - { 44, 10, 5, 0, 0, 44, 0, }, /* 282 */ - { 44, 7, 12, 0, 0, 44, 0, }, /* 283 */ - { 44, 10, 3, 0, 0, 44, 0, }, /* 284 */ - { 44, 13, 12, 0, 0, 44, 0, }, /* 285 */ - { 44, 26, 12, 0, 0, 44, 0, }, /* 286 */ - { 44, 15, 12, 0, 0, 44, 0, }, /* 287 */ - { 54, 12, 3, 0, 0, 54, 0, }, /* 288 */ - { 54, 7, 12, 0, 0, 54, 0, }, /* 289 */ - { 54, 10, 3, 0, 0, 54, 0, }, /* 290 */ - { 54, 10, 5, 0, 0, 54, 0, }, /* 291 */ - { 54, 13, 12, 0, 0, -52, 0, }, /* 292 */ - { 54, 15, 12, 0, 0, -52, 0, }, /* 293 */ - { 54, 26, 12, 0, 0, -52, 0, }, /* 294 */ - { 54, 26, 12, 0, 0, 54, 0, }, /* 295 */ - { 54, 23, 12, 0, 0, 54, 0, }, /* 296 */ - { 55, 12, 3, 0, 0, 55, 0, }, /* 297 */ - { 55, 10, 5, 0, 0, 55, 0, }, /* 298 */ - { 55, 7, 12, 0, 0, 55, 0, }, /* 299 */ - { 55, 13, 12, 0, 0, 55, 0, }, /* 300 */ - { 55, 21, 12, 0, 0, 55, 0, }, /* 301 */ - { 55, 15, 12, 0, 0, 55, 0, }, /* 302 */ - { 55, 26, 12, 0, 0, 55, 0, }, /* 303 */ - { 29, 7, 12, 0, 0, 29, 0, }, /* 304 */ - { 29, 12, 3, 0, 0, 29, 0, }, /* 305 */ - { 29, 10, 5, 0, 0, 29, 0, }, /* 306 */ - { 29, 21, 12, 0, 0, 29, 0, }, /* 307 */ - { 29, 10, 3, 0, 0, 29, 0, }, /* 308 */ - { 29, 13, 12, 0, 0, -67, 0, }, /* 309 */ - { 37, 12, 3, 0, 0, 37, 0, }, /* 310 */ - { 37, 10, 5, 0, 0, 37, 0, }, /* 311 */ - { 37, 7, 12, 0, 0, 37, 0, }, /* 312 */ - { 37, 10, 3, 0, 0, 37, 0, }, /* 313 */ - { 37, 7, 4, 0, 0, 37, 0, }, /* 314 */ - { 37, 26, 12, 0, 0, 37, 0, }, /* 315 */ - { 37, 15, 12, 0, 0, 37, 0, }, /* 316 */ - { 37, 13, 12, 0, 0, 37, 0, }, /* 317 */ - { 48, 12, 3, 0, 0, 48, 0, }, /* 318 */ - { 48, 10, 5, 0, 0, 48, 0, }, /* 319 */ - { 48, 7, 12, 0, 0, 48, 0, }, /* 320 */ - { 48, 10, 3, 0, 0, 48, 0, }, /* 321 */ - { 48, 13, 12, 0, 0, 48, 0, }, /* 322 */ - { 48, 21, 12, 0, 0, 48, 0, }, /* 323 */ - { 57, 7, 12, 0, 0, 57, 0, }, /* 324 */ - { 57, 12, 3, 0, 0, 57, 0, }, /* 325 */ - { 57, 7, 5, 0, 0, 57, 0, }, /* 326 */ - { 57, 6, 12, 0, 0, 57, 0, }, /* 327 */ - { 57, 21, 12, 0, 0, 57, 0, }, /* 328 */ - { 57, 13, 12, 0, 0, 57, 0, }, /* 329 */ - { 33, 7, 12, 0, 0, 33, 0, }, /* 330 */ - { 33, 12, 3, 0, 0, 33, 0, }, /* 331 */ - { 33, 7, 5, 0, 0, 33, 0, }, /* 332 */ - { 33, 6, 12, 0, 0, 33, 0, }, /* 333 */ - { 33, 13, 12, 0, 0, 33, 0, }, /* 334 */ - { 58, 7, 12, 0, 0, 58, 0, }, /* 335 */ - { 58, 26, 12, 0, 0, 58, 0, }, /* 336 */ - { 58, 21, 12, 0, 0, 58, 0, }, /* 337 */ - { 58, 12, 3, 0, 0, 58, 0, }, /* 338 */ - { 58, 13, 12, 0, 0, 58, 0, }, /* 339 */ - { 58, 15, 12, 0, 0, 58, 0, }, /* 340 */ - { 58, 22, 12, 0, 0, 58, 0, }, /* 341 */ - { 58, 18, 12, 0, 0, 58, 0, }, /* 342 */ - { 58, 10, 5, 0, 0, 58, 0, }, /* 343 */ - { 39, 7, 12, 0, 0, 39, 0, }, /* 344 */ - { 39, 10, 12, 0, 0, 39, 0, }, /* 345 */ - { 39, 12, 3, 0, 0, 39, 0, }, /* 346 */ - { 39, 10, 5, 0, 0, 39, 0, }, /* 347 */ - { 39, 13, 12, 0, 0, -88, 0, }, /* 348 */ - { 39, 21, 12, 0, 0, 39, 0, }, /* 349 */ - { 39, 13, 12, 0, 0, 39, 0, }, /* 350 */ - { 39, 26, 12, 0, 0, 39, 0, }, /* 351 */ - { 17, 9, 12, 0, 7264, 17, 0, }, /* 352 */ - { 17, 5, 12, 0, 3008, 17, 0, }, /* 353 */ - { 10, 21, 12, 0, 0, -49, 0, }, /* 354 */ - { 17, 6, 12, 0, 0, 17, 0, }, /* 355 */ - { 24, 7, 6, 0, 0, 24, 0, }, /* 356 */ - { 24, 7, 7, 0, 0, 24, 0, }, /* 357 */ - { 24, 7, 8, 0, 0, 24, 0, }, /* 358 */ - { 16, 7, 12, 0, 0, 16, 0, }, /* 359 */ - { 16, 12, 3, 0, 0, 16, 0, }, /* 360 */ - { 16, 21, 12, 0, 0, 16, 0, }, /* 361 */ - { 16, 15, 12, 0, 0, 16, 0, }, /* 362 */ - { 16, 26, 12, 0, 0, 16, 0, }, /* 363 */ - { 9, 9, 12, 0, 38864, 9, 0, }, /* 364 */ - { 9, 9, 12, 0, 8, 9, 0, }, /* 365 */ - { 9, 5, 12, 0, -8, 9, 0, }, /* 366 */ - { 8, 17, 12, 0, 0, 8, 0, }, /* 367 */ - { 8, 7, 12, 0, 0, 8, 0, }, /* 368 */ - { 8, 26, 12, 0, 0, 8, 0, }, /* 369 */ - { 8, 21, 12, 0, 0, 8, 0, }, /* 370 */ - { 41, 29, 12, 0, 0, 41, 0, }, /* 371 */ - { 41, 7, 12, 0, 0, 41, 0, }, /* 372 */ - { 41, 22, 12, 0, 0, 41, 0, }, /* 373 */ - { 41, 18, 12, 0, 0, 41, 0, }, /* 374 */ - { 46, 7, 12, 0, 0, 46, 0, }, /* 375 */ - { 46, 14, 12, 0, 0, 46, 0, }, /* 376 */ - { 51, 7, 12, 0, 0, 51, 0, }, /* 377 */ - { 51, 12, 3, 0, 0, 51, 0, }, /* 378 */ - { 25, 7, 12, 0, 0, 25, 0, }, /* 379 */ - { 25, 12, 3, 0, 0, 25, 0, }, /* 380 */ - { 10, 21, 12, 0, 0, -117, 0, }, /* 381 */ - { 7, 7, 12, 0, 0, 7, 0, }, /* 382 */ - { 7, 12, 3, 0, 0, 7, 0, }, /* 383 */ - { 52, 7, 12, 0, 0, 52, 0, }, /* 384 */ - { 52, 12, 3, 0, 0, 52, 0, }, /* 385 */ - { 32, 7, 12, 0, 0, 32, 0, }, /* 386 */ - { 32, 12, 3, 0, 0, 32, 0, }, /* 387 */ - { 32, 10, 5, 0, 0, 32, 0, }, /* 388 */ - { 32, 21, 12, 0, 0, 32, 0, }, /* 389 */ - { 32, 6, 12, 0, 0, 32, 0, }, /* 390 */ - { 32, 23, 12, 0, 0, 32, 0, }, /* 391 */ - { 32, 13, 12, 0, 0, 32, 0, }, /* 392 */ - { 32, 15, 12, 0, 0, 32, 0, }, /* 393 */ - { 38, 21, 12, 0, 0, 38, 0, }, /* 394 */ - { 10, 21, 12, 0, 0, -73, 0, }, /* 395 */ - { 38, 17, 12, 0, 0, 38, 0, }, /* 396 */ - { 38, 12, 3, 0, 0, 38, 0, }, /* 397 */ - { 38, 1, 2, 0, 0, 38, 0, }, /* 398 */ - { 38, 13, 12, 0, 0, 38, 0, }, /* 399 */ - { 38, 7, 12, 0, 0, 38, 0, }, /* 400 */ - { 38, 6, 12, 0, 0, 38, 0, }, /* 401 */ - { 35, 7, 12, 0, 0, 35, 0, }, /* 402 */ - { 35, 12, 3, 0, 0, 35, 0, }, /* 403 */ - { 35, 10, 5, 0, 0, 35, 0, }, /* 404 */ - { 35, 26, 12, 0, 0, 35, 0, }, /* 405 */ - { 35, 21, 12, 0, 0, 35, 0, }, /* 406 */ - { 35, 13, 12, 0, 0, 35, 0, }, /* 407 */ - { 53, 7, 12, 0, 0, 53, 0, }, /* 408 */ - { 40, 7, 12, 0, 0, 40, 0, }, /* 409 */ - { 40, 13, 12, 0, 0, 40, 0, }, /* 410 */ - { 40, 15, 12, 0, 0, 40, 0, }, /* 411 */ - { 40, 26, 12, 0, 0, 40, 0, }, /* 412 */ - { 32, 26, 12, 0, 0, 32, 0, }, /* 413 */ - { 6, 7, 12, 0, 0, 6, 0, }, /* 414 */ - { 6, 12, 3, 0, 0, 6, 0, }, /* 415 */ - { 6, 10, 5, 0, 0, 6, 0, }, /* 416 */ - { 6, 21, 12, 0, 0, 6, 0, }, /* 417 */ - { 91, 7, 12, 0, 0, 91, 0, }, /* 418 */ - { 91, 10, 5, 0, 0, 91, 0, }, /* 419 */ - { 91, 12, 3, 0, 0, 91, 0, }, /* 420 */ - { 91, 10, 12, 0, 0, 91, 0, }, /* 421 */ - { 91, 13, 12, 0, 0, 91, 0, }, /* 422 */ - { 91, 21, 12, 0, 0, 91, 0, }, /* 423 */ - { 91, 6, 12, 0, 0, 91, 0, }, /* 424 */ - { 28, 11, 3, 0, 0, 28, 0, }, /* 425 */ - { 62, 12, 3, 0, 0, 62, 0, }, /* 426 */ - { 62, 10, 5, 0, 0, 62, 0, }, /* 427 */ - { 62, 7, 12, 0, 0, 62, 0, }, /* 428 */ - { 62, 10, 3, 0, 0, 62, 0, }, /* 429 */ - { 62, 13, 12, 0, 0, 62, 0, }, /* 430 */ - { 62, 21, 12, 0, 0, 62, 0, }, /* 431 */ - { 62, 26, 12, 0, 0, 62, 0, }, /* 432 */ - { 76, 12, 3, 0, 0, 76, 0, }, /* 433 */ - { 76, 10, 5, 0, 0, 76, 0, }, /* 434 */ - { 76, 7, 12, 0, 0, 76, 0, }, /* 435 */ - { 76, 13, 12, 0, 0, 76, 0, }, /* 436 */ - { 93, 7, 12, 0, 0, 93, 0, }, /* 437 */ - { 93, 12, 3, 0, 0, 93, 0, }, /* 438 */ - { 93, 10, 5, 0, 0, 93, 0, }, /* 439 */ - { 93, 21, 12, 0, 0, 93, 0, }, /* 440 */ - { 70, 7, 12, 0, 0, 70, 0, }, /* 441 */ - { 70, 10, 5, 0, 0, 70, 0, }, /* 442 */ - { 70, 12, 3, 0, 0, 70, 0, }, /* 443 */ - { 70, 21, 12, 0, 0, 70, 0, }, /* 444 */ - { 70, 13, 12, 0, 0, 70, 0, }, /* 445 */ - { 73, 13, 12, 0, 0, 73, 0, }, /* 446 */ - { 73, 7, 12, 0, 0, 73, 0, }, /* 447 */ - { 73, 6, 12, 0, 0, 73, 0, }, /* 448 */ - { 73, 21, 12, 0, 0, 73, 0, }, /* 449 */ - { 13, 5, 12, 63, -6222, 13, 0, }, /* 450 */ - { 13, 5, 12, 67, -6221, 13, 0, }, /* 451 */ - { 13, 5, 12, 71, -6212, 13, 0, }, /* 452 */ - { 13, 5, 12, 75, -6210, 13, 0, }, /* 453 */ - { 13, 5, 12, 79, -6210, 13, 0, }, /* 454 */ - { 13, 5, 12, 79, -6211, 13, 0, }, /* 455 */ - { 13, 5, 12, 84, -6204, 13, 0, }, /* 456 */ - { 13, 5, 12, 88, -6180, 13, 0, }, /* 457 */ - { 13, 5, 12, 108, 35267, 13, 0, }, /* 458 */ - { 17, 9, 12, 0, -3008, 17, 0, }, /* 459 */ - { 76, 21, 12, 0, 0, 76, 0, }, /* 460 */ - { 28, 12, 3, 0, 0, -112, 0, }, /* 461 */ - { 28, 12, 3, 0, 0, 15, 0, }, /* 462 */ - { 10, 21, 12, 0, 0, -37, 0, }, /* 463 */ - { 28, 12, 3, 0, 0, -13, 0, }, /* 464 */ - { 28, 12, 3, 0, 0, -43, 0, }, /* 465 */ - { 28, 12, 3, 0, 0, -146, 0, }, /* 466 */ - { 10, 10, 5, 0, 0, -13, 0, }, /* 467 */ - { 10, 7, 12, 0, 0, -40, 0, }, /* 468 */ - { 10, 7, 12, 0, 0, -13, 0, }, /* 469 */ - { 10, 7, 12, 0, 0, 15, 0, }, /* 470 */ - { 10, 7, 12, 0, 0, -162, 0, }, /* 471 */ - { 10, 7, 12, 0, 0, -37, 0, }, /* 472 */ - { 28, 12, 3, 0, 0, -96, 0, }, /* 473 */ - { 10, 10, 5, 0, 0, 3, 0, }, /* 474 */ - { 28, 12, 3, 0, 0, -37, 0, }, /* 475 */ - { 10, 7, 12, 0, 0, 150, 0, }, /* 476 */ - { 13, 5, 12, 0, 0, 13, 0, }, /* 477 */ - { 13, 6, 12, 0, 0, 13, 0, }, /* 478 */ - { 34, 5, 12, 0, 35332, 34, 0, }, /* 479 */ - { 34, 5, 12, 0, 3814, 34, 0, }, /* 480 */ - { 34, 5, 12, 0, 35384, 34, 0, }, /* 481 */ - { 28, 12, 3, 0, 0, -34, 0, }, /* 482 */ - { 34, 9, 12, 92, 1, 34, 0, }, /* 483 */ - { 34, 5, 12, 92, -1, 34, 0, }, /* 484 */ - { 34, 5, 12, 92, -58, 34, 0, }, /* 485 */ - { 34, 9, 12, 0, -7615, 34, 0, }, /* 486 */ - { 20, 5, 12, 0, 8, 20, 0, }, /* 487 */ - { 20, 9, 12, 0, -8, 20, 0, }, /* 488 */ - { 20, 5, 12, 0, 74, 20, 0, }, /* 489 */ - { 20, 5, 12, 0, 86, 20, 0, }, /* 490 */ - { 20, 5, 12, 0, 100, 20, 0, }, /* 491 */ - { 20, 5, 12, 0, 128, 20, 0, }, /* 492 */ - { 20, 5, 12, 0, 112, 20, 0, }, /* 493 */ - { 20, 5, 12, 0, 126, 20, 0, }, /* 494 */ - { 20, 8, 12, 0, -8, 20, 0, }, /* 495 */ - { 20, 5, 12, 0, 9, 20, 0, }, /* 496 */ - { 20, 9, 12, 0, -74, 20, 0, }, /* 497 */ - { 20, 8, 12, 0, -9, 20, 0, }, /* 498 */ - { 20, 5, 12, 21, -7173, 20, 0, }, /* 499 */ - { 20, 9, 12, 0, -86, 20, 0, }, /* 500 */ - { 20, 9, 12, 0, -100, 20, 0, }, /* 501 */ - { 20, 9, 12, 0, -112, 20, 0, }, /* 502 */ - { 20, 9, 12, 0, -128, 20, 0, }, /* 503 */ - { 20, 9, 12, 0, -126, 20, 0, }, /* 504 */ - { 28, 1, 3, 0, 0, 28, 0, }, /* 505 */ - { 28, 1, 13, 0, 0, 28, 0, }, /* 506 */ - { 10, 27, 2, 0, 0, 10, 0, }, /* 507 */ - { 10, 28, 2, 0, 0, 10, 0, }, /* 508 */ - { 10, 29, 12, 0, 0, -70, 0, }, /* 509 */ - { 10, 21, 14, 0, 0, 10, 0, }, /* 510 */ - { 0, 2, 2, 0, 0, 0, 0, }, /* 511 */ - { 28, 12, 3, 0, 0, -100, 0, }, /* 512 */ - { 10, 9, 12, 0, 0, 10, 0, }, /* 513 */ - { 10, 5, 12, 0, 0, 10, 0, }, /* 514 */ - { 20, 9, 12, 96, -7517, 20, 0, }, /* 515 */ - { 34, 9, 12, 100, -8383, 34, 0, }, /* 516 */ - { 34, 9, 12, 104, -8262, 34, 0, }, /* 517 */ - { 34, 9, 12, 0, 28, 34, 0, }, /* 518 */ - { 10, 7, 12, 0, 0, 10, 0, }, /* 519 */ - { 10, 5, 14, 0, 0, 10, 0, }, /* 520 */ - { 34, 5, 12, 0, -28, 34, 0, }, /* 521 */ - { 34, 14, 12, 0, 16, 34, 0, }, /* 522 */ - { 34, 14, 12, 0, -16, 34, 0, }, /* 523 */ - { 34, 14, 12, 0, 0, 34, 0, }, /* 524 */ - { 10, 25, 14, 0, 0, 10, 0, }, /* 525 */ - { 10, 26, 12, 0, 26, 10, 0, }, /* 526 */ - { 10, 26, 14, 0, 26, 10, 0, }, /* 527 */ - { 10, 26, 12, 0, -26, 10, 0, }, /* 528 */ - { 5, 26, 12, 0, 0, 5, 0, }, /* 529 */ - { 18, 9, 12, 0, 48, 18, 0, }, /* 530 */ - { 18, 5, 12, 0, -48, 18, 0, }, /* 531 */ - { 34, 9, 12, 0, -10743, 34, 0, }, /* 532 */ - { 34, 9, 12, 0, -3814, 34, 0, }, /* 533 */ - { 34, 9, 12, 0, -10727, 34, 0, }, /* 534 */ - { 34, 5, 12, 0, -10795, 34, 0, }, /* 535 */ - { 34, 5, 12, 0, -10792, 34, 0, }, /* 536 */ - { 34, 9, 12, 0, -10780, 34, 0, }, /* 537 */ - { 34, 9, 12, 0, -10749, 34, 0, }, /* 538 */ - { 34, 9, 12, 0, -10783, 34, 0, }, /* 539 */ - { 34, 9, 12, 0, -10782, 34, 0, }, /* 540 */ - { 34, 9, 12, 0, -10815, 34, 0, }, /* 541 */ - { 11, 5, 12, 0, 0, 11, 0, }, /* 542 */ - { 11, 26, 12, 0, 0, 11, 0, }, /* 543 */ - { 11, 12, 3, 0, 0, 11, 0, }, /* 544 */ - { 11, 21, 12, 0, 0, 11, 0, }, /* 545 */ - { 11, 15, 12, 0, 0, 11, 0, }, /* 546 */ - { 17, 5, 12, 0, -7264, 17, 0, }, /* 547 */ - { 59, 7, 12, 0, 0, 59, 0, }, /* 548 */ - { 59, 6, 12, 0, 0, 59, 0, }, /* 549 */ - { 59, 21, 12, 0, 0, 59, 0, }, /* 550 */ - { 59, 12, 3, 0, 0, 59, 0, }, /* 551 */ - { 13, 12, 3, 0, 0, 13, 0, }, /* 552 */ - { 10, 21, 12, 0, 0, -25, 0, }, /* 553 */ - { 23, 26, 12, 0, 0, 23, 0, }, /* 554 */ - { 10, 21, 12, 0, 0, -139, 0, }, /* 555 */ - { 10, 21, 12, 0, 0, -133, 0, }, /* 556 */ - { 23, 6, 12, 0, 0, 23, 0, }, /* 557 */ - { 10, 7, 12, 0, 0, 23, 0, }, /* 558 */ - { 23, 14, 12, 0, 0, 23, 0, }, /* 559 */ - { 10, 22, 12, 0, 0, -139, 0, }, /* 560 */ - { 10, 18, 12, 0, 0, -139, 0, }, /* 561 */ - { 10, 26, 12, 0, 0, -133, 0, }, /* 562 */ - { 10, 17, 12, 0, 0, -133, 0, }, /* 563 */ - { 10, 22, 12, 0, 0, -133, 0, }, /* 564 */ - { 10, 18, 12, 0, 0, -133, 0, }, /* 565 */ - { 28, 12, 3, 0, 0, -16, 0, }, /* 566 */ - { 24, 10, 3, 0, 0, 24, 0, }, /* 567 */ - { 10, 17, 14, 0, 0, -133, 0, }, /* 568 */ - { 10, 6, 12, 0, 0, -64, 0, }, /* 569 */ - { 10, 7, 12, 0, 0, -104, 0, }, /* 570 */ - { 10, 21, 14, 0, 0, -104, 0, }, /* 571 */ - { 10, 26, 12, 0, 0, 23, 0, }, /* 572 */ - { 27, 7, 12, 0, 0, 27, 0, }, /* 573 */ - { 28, 12, 3, 0, 0, -64, 0, }, /* 574 */ - { 10, 24, 12, 0, 0, -64, 0, }, /* 575 */ - { 27, 6, 12, 0, 0, 27, 0, }, /* 576 */ - { 10, 17, 12, 0, 0, -64, 0, }, /* 577 */ - { 30, 7, 12, 0, 0, 30, 0, }, /* 578 */ - { 30, 6, 12, 0, 0, 30, 0, }, /* 579 */ - { 4, 7, 12, 0, 0, 4, 0, }, /* 580 */ - { 24, 7, 12, 0, 0, 24, 0, }, /* 581 */ - { 10, 15, 12, 0, 0, 23, 0, }, /* 582 */ - { 24, 26, 12, 0, 0, 24, 0, }, /* 583 */ - { 10, 26, 14, 0, 0, 23, 0, }, /* 584 */ - { 30, 26, 12, 0, 0, 30, 0, }, /* 585 */ - { 23, 7, 12, 0, 0, 23, 0, }, /* 586 */ - { 61, 7, 12, 0, 0, 61, 0, }, /* 587 */ - { 61, 6, 12, 0, 0, 61, 0, }, /* 588 */ - { 61, 26, 12, 0, 0, 61, 0, }, /* 589 */ - { 86, 7, 12, 0, 0, 86, 0, }, /* 590 */ - { 86, 6, 12, 0, 0, 86, 0, }, /* 591 */ - { 86, 21, 12, 0, 0, 86, 0, }, /* 592 */ - { 77, 7, 12, 0, 0, 77, 0, }, /* 593 */ - { 77, 6, 12, 0, 0, 77, 0, }, /* 594 */ - { 77, 21, 12, 0, 0, 77, 0, }, /* 595 */ - { 77, 13, 12, 0, 0, 77, 0, }, /* 596 */ - { 13, 9, 12, 108, 1, 13, 0, }, /* 597 */ - { 13, 5, 12, 108, -35267, 13, 0, }, /* 598 */ - { 13, 7, 12, 0, 0, 13, 0, }, /* 599 */ - { 13, 21, 12, 0, 0, 13, 0, }, /* 600 */ - { 79, 7, 12, 0, 0, 79, 0, }, /* 601 */ - { 79, 14, 12, 0, 0, 79, 0, }, /* 602 */ - { 79, 12, 3, 0, 0, 79, 0, }, /* 603 */ - { 79, 21, 12, 0, 0, 79, 0, }, /* 604 */ - { 10, 24, 12, 0, 0, -61, 0, }, /* 605 */ - { 34, 9, 12, 0, -35332, 34, 0, }, /* 606 */ - { 34, 9, 12, 0, -42280, 34, 0, }, /* 607 */ - { 34, 5, 12, 0, 48, 34, 0, }, /* 608 */ - { 34, 9, 12, 0, -42308, 34, 0, }, /* 609 */ - { 34, 9, 12, 0, -42319, 34, 0, }, /* 610 */ - { 34, 9, 12, 0, -42315, 34, 0, }, /* 611 */ - { 34, 9, 12, 0, -42305, 34, 0, }, /* 612 */ - { 34, 9, 12, 0, -42258, 34, 0, }, /* 613 */ - { 34, 9, 12, 0, -42282, 34, 0, }, /* 614 */ - { 34, 9, 12, 0, -42261, 34, 0, }, /* 615 */ - { 34, 9, 12, 0, 928, 34, 0, }, /* 616 */ - { 34, 9, 12, 0, -48, 34, 0, }, /* 617 */ - { 34, 9, 12, 0, -42307, 34, 0, }, /* 618 */ - { 34, 9, 12, 0, -35384, 34, 0, }, /* 619 */ - { 49, 7, 12, 0, 0, 49, 0, }, /* 620 */ - { 49, 12, 3, 0, 0, 49, 0, }, /* 621 */ - { 49, 10, 5, 0, 0, 49, 0, }, /* 622 */ - { 49, 26, 12, 0, 0, 49, 0, }, /* 623 */ - { 10, 15, 12, 0, 0, -224, 0, }, /* 624 */ - { 10, 15, 12, 0, 0, -210, 0, }, /* 625 */ - { 10, 26, 12, 0, 0, -171, 0, }, /* 626 */ - { 10, 23, 12, 0, 0, -171, 0, }, /* 627 */ - { 65, 7, 12, 0, 0, 65, 0, }, /* 628 */ - { 65, 21, 12, 0, 0, 65, 0, }, /* 629 */ - { 75, 10, 5, 0, 0, 75, 0, }, /* 630 */ - { 75, 7, 12, 0, 0, 75, 0, }, /* 631 */ - { 75, 12, 3, 0, 0, 75, 0, }, /* 632 */ - { 75, 21, 12, 0, 0, 75, 0, }, /* 633 */ - { 75, 13, 12, 0, 0, 75, 0, }, /* 634 */ - { 15, 12, 3, 0, 0, -13, 0, }, /* 635 */ - { 15, 7, 12, 0, 0, -46, 0, }, /* 636 */ - { 69, 13, 12, 0, 0, 69, 0, }, /* 637 */ - { 69, 7, 12, 0, 0, 69, 0, }, /* 638 */ - { 69, 12, 3, 0, 0, 69, 0, }, /* 639 */ - { 10, 21, 12, 0, 0, -108, 0, }, /* 640 */ - { 69, 21, 12, 0, 0, 69, 0, }, /* 641 */ - { 74, 7, 12, 0, 0, 74, 0, }, /* 642 */ - { 74, 12, 3, 0, 0, 74, 0, }, /* 643 */ - { 74, 10, 5, 0, 0, 74, 0, }, /* 644 */ - { 74, 21, 12, 0, 0, 74, 0, }, /* 645 */ - { 84, 12, 3, 0, 0, 84, 0, }, /* 646 */ - { 84, 10, 5, 0, 0, 84, 0, }, /* 647 */ - { 84, 7, 12, 0, 0, 84, 0, }, /* 648 */ - { 84, 21, 12, 0, 0, 84, 0, }, /* 649 */ - { 10, 6, 12, 0, 0, -19, 0, }, /* 650 */ - { 84, 13, 12, 0, 0, 84, 0, }, /* 651 */ - { 39, 6, 12, 0, 0, 39, 0, }, /* 652 */ - { 68, 7, 12, 0, 0, 68, 0, }, /* 653 */ - { 68, 12, 3, 0, 0, 68, 0, }, /* 654 */ - { 68, 10, 5, 0, 0, 68, 0, }, /* 655 */ - { 68, 13, 12, 0, 0, 68, 0, }, /* 656 */ - { 68, 21, 12, 0, 0, 68, 0, }, /* 657 */ - { 92, 7, 12, 0, 0, 92, 0, }, /* 658 */ - { 92, 12, 3, 0, 0, 92, 0, }, /* 659 */ - { 92, 6, 12, 0, 0, 92, 0, }, /* 660 */ - { 92, 21, 12, 0, 0, 92, 0, }, /* 661 */ - { 87, 7, 12, 0, 0, 87, 0, }, /* 662 */ - { 87, 10, 5, 0, 0, 87, 0, }, /* 663 */ - { 87, 12, 3, 0, 0, 87, 0, }, /* 664 */ - { 87, 21, 12, 0, 0, 87, 0, }, /* 665 */ - { 87, 6, 12, 0, 0, 87, 0, }, /* 666 */ - { 34, 5, 12, 0, -928, 34, 0, }, /* 667 */ - { 9, 5, 12, 0, -38864, 9, 0, }, /* 668 */ - { 87, 13, 12, 0, 0, 87, 0, }, /* 669 */ - { 24, 7, 9, 0, 0, 24, 0, }, /* 670 */ - { 24, 7, 10, 0, 0, 24, 0, }, /* 671 */ - { 0, 4, 12, 0, 0, 0, 0, }, /* 672 */ - { 0, 3, 12, 0, 0, 0, 0, }, /* 673 */ - { 26, 25, 12, 0, 0, 26, 0, }, /* 674 */ - { 1, 24, 12, 0, 0, 1, 0, }, /* 675 */ - { 1, 7, 12, 0, 0, -10, 0, }, /* 676 */ - { 1, 26, 12, 0, 0, -10, 0, }, /* 677 */ - { 10, 6, 3, 0, 0, -64, 0, }, /* 678 */ - { 36, 7, 12, 0, 0, 36, 0, }, /* 679 */ - { 10, 21, 12, 0, 0, -22, 0, }, /* 680 */ - { 10, 15, 12, 0, 0, -92, 0, }, /* 681 */ - { 10, 26, 12, 0, 0, -22, 0, }, /* 682 */ - { 20, 14, 12, 0, 0, 20, 0, }, /* 683 */ - { 20, 15, 12, 0, 0, 20, 0, }, /* 684 */ - { 20, 26, 12, 0, 0, 20, 0, }, /* 685 */ - { 71, 7, 12, 0, 0, 71, 0, }, /* 686 */ - { 67, 7, 12, 0, 0, 67, 0, }, /* 687 */ - { 28, 12, 3, 0, 0, -1, 0, }, /* 688 */ - { 10, 15, 12, 0, 0, -1, 0, }, /* 689 */ - { 42, 7, 12, 0, 0, 42, 0, }, /* 690 */ - { 42, 15, 12, 0, 0, 42, 0, }, /* 691 */ - { 19, 7, 12, 0, 0, 19, 0, }, /* 692 */ - { 19, 14, 12, 0, 0, 19, 0, }, /* 693 */ - { 118, 7, 12, 0, 0, 118, 0, }, /* 694 */ - { 118, 12, 3, 0, 0, 118, 0, }, /* 695 */ - { 60, 7, 12, 0, 0, 60, 0, }, /* 696 */ - { 60, 21, 12, 0, 0, 60, 0, }, /* 697 */ - { 43, 7, 12, 0, 0, 43, 0, }, /* 698 */ - { 43, 21, 12, 0, 0, 43, 0, }, /* 699 */ - { 43, 14, 12, 0, 0, 43, 0, }, /* 700 */ - { 14, 9, 12, 0, 40, 14, 0, }, /* 701 */ - { 14, 5, 12, 0, -40, 14, 0, }, /* 702 */ - { 47, 7, 12, 0, 0, 47, 0, }, /* 703 */ - { 45, 7, 12, 0, 0, 45, 0, }, /* 704 */ - { 45, 13, 12, 0, 0, 45, 0, }, /* 705 */ - { 136, 9, 12, 0, 40, 136, 0, }, /* 706 */ - { 136, 5, 12, 0, -40, 136, 0, }, /* 707 */ - { 106, 7, 12, 0, 0, 106, 0, }, /* 708 */ - { 104, 7, 12, 0, 0, 104, 0, }, /* 709 */ - { 104, 21, 12, 0, 0, 104, 0, }, /* 710 */ - { 110, 7, 12, 0, 0, 110, 0, }, /* 711 */ - { 12, 7, 12, 0, 0, 12, 0, }, /* 712 */ - { 81, 7, 12, 0, 0, 81, 0, }, /* 713 */ - { 81, 21, 12, 0, 0, 81, 0, }, /* 714 */ - { 81, 15, 12, 0, 0, 81, 0, }, /* 715 */ - { 120, 7, 12, 0, 0, 120, 0, }, /* 716 */ - { 120, 26, 12, 0, 0, 120, 0, }, /* 717 */ - { 120, 15, 12, 0, 0, 120, 0, }, /* 718 */ - { 116, 7, 12, 0, 0, 116, 0, }, /* 719 */ - { 116, 15, 12, 0, 0, 116, 0, }, /* 720 */ - { 128, 7, 12, 0, 0, 128, 0, }, /* 721 */ - { 128, 15, 12, 0, 0, 128, 0, }, /* 722 */ - { 66, 7, 12, 0, 0, 66, 0, }, /* 723 */ - { 66, 15, 12, 0, 0, 66, 0, }, /* 724 */ - { 66, 21, 12, 0, 0, 66, 0, }, /* 725 */ - { 72, 7, 12, 0, 0, 72, 0, }, /* 726 */ - { 72, 21, 12, 0, 0, 72, 0, }, /* 727 */ - { 98, 7, 12, 0, 0, 98, 0, }, /* 728 */ - { 97, 7, 12, 0, 0, 97, 0, }, /* 729 */ - { 97, 15, 12, 0, 0, 97, 0, }, /* 730 */ - { 31, 7, 12, 0, 0, 31, 0, }, /* 731 */ - { 31, 12, 3, 0, 0, 31, 0, }, /* 732 */ - { 31, 15, 12, 0, 0, 31, 0, }, /* 733 */ - { 31, 21, 12, 0, 0, 31, 0, }, /* 734 */ - { 88, 7, 12, 0, 0, 88, 0, }, /* 735 */ - { 88, 15, 12, 0, 0, 88, 0, }, /* 736 */ - { 88, 21, 12, 0, 0, 88, 0, }, /* 737 */ - { 117, 7, 12, 0, 0, 117, 0, }, /* 738 */ - { 117, 15, 12, 0, 0, 117, 0, }, /* 739 */ - { 112, 7, 12, 0, 0, 112, 0, }, /* 740 */ - { 112, 26, 12, 0, 0, 112, 0, }, /* 741 */ - { 112, 12, 3, 0, 0, 112, 0, }, /* 742 */ - { 112, 15, 12, 0, 0, 112, 0, }, /* 743 */ - { 112, 21, 12, 0, 0, 112, 0, }, /* 744 */ - { 78, 7, 12, 0, 0, 78, 0, }, /* 745 */ - { 78, 21, 12, 0, 0, 78, 0, }, /* 746 */ - { 83, 7, 12, 0, 0, 83, 0, }, /* 747 */ - { 83, 15, 12, 0, 0, 83, 0, }, /* 748 */ - { 82, 7, 12, 0, 0, 82, 0, }, /* 749 */ - { 82, 15, 12, 0, 0, 82, 0, }, /* 750 */ - { 121, 7, 12, 0, 0, 121, 0, }, /* 751 */ - { 121, 21, 12, 0, 0, 121, 0, }, /* 752 */ - { 121, 15, 12, 0, 0, 121, 0, }, /* 753 */ - { 89, 7, 12, 0, 0, 89, 0, }, /* 754 */ - { 130, 9, 12, 0, 64, 130, 0, }, /* 755 */ - { 130, 5, 12, 0, -64, 130, 0, }, /* 756 */ - { 130, 15, 12, 0, 0, 130, 0, }, /* 757 */ - { 144, 7, 12, 0, 0, 144, 0, }, /* 758 */ - { 144, 12, 3, 0, 0, 144, 0, }, /* 759 */ - { 144, 13, 12, 0, 0, 144, 0, }, /* 760 */ - { 1, 15, 12, 0, 0, 1, 0, }, /* 761 */ - { 156, 7, 12, 0, 0, 156, 0, }, /* 762 */ - { 156, 12, 3, 0, 0, 156, 0, }, /* 763 */ - { 156, 17, 12, 0, 0, 156, 0, }, /* 764 */ - { 147, 7, 12, 0, 0, 147, 0, }, /* 765 */ - { 147, 15, 12, 0, 0, 147, 0, }, /* 766 */ - { 148, 7, 12, 0, 0, 148, 0, }, /* 767 */ - { 148, 12, 3, 0, 0, 148, 0, }, /* 768 */ - { 148, 15, 12, 0, 0, 148, 0, }, /* 769 */ - { 148, 21, 12, 0, 0, 148, 0, }, /* 770 */ - { 153, 7, 12, 0, 0, 153, 0, }, /* 771 */ - { 153, 15, 12, 0, 0, 153, 0, }, /* 772 */ - { 149, 7, 12, 0, 0, 149, 0, }, /* 773 */ - { 94, 10, 5, 0, 0, 94, 0, }, /* 774 */ - { 94, 12, 3, 0, 0, 94, 0, }, /* 775 */ - { 94, 7, 12, 0, 0, 94, 0, }, /* 776 */ - { 94, 21, 12, 0, 0, 94, 0, }, /* 777 */ - { 94, 15, 12, 0, 0, 94, 0, }, /* 778 */ - { 94, 13, 12, 0, 0, 94, 0, }, /* 779 */ - { 85, 12, 3, 0, 0, 85, 0, }, /* 780 */ - { 85, 10, 5, 0, 0, 85, 0, }, /* 781 */ - { 85, 7, 12, 0, 0, 85, 0, }, /* 782 */ - { 85, 21, 12, 0, 0, 85, 0, }, /* 783 */ - { 85, 1, 4, 0, 0, 85, 0, }, /* 784 */ - { 101, 7, 12, 0, 0, 101, 0, }, /* 785 */ - { 101, 13, 12, 0, 0, 101, 0, }, /* 786 */ - { 96, 12, 3, 0, 0, 96, 0, }, /* 787 */ - { 96, 7, 12, 0, 0, 96, 0, }, /* 788 */ - { 96, 10, 5, 0, 0, 96, 0, }, /* 789 */ - { 96, 13, 12, 0, 0, 96, 0, }, /* 790 */ - { 96, 21, 12, 0, 0, 96, 0, }, /* 791 */ - { 111, 7, 12, 0, 0, 111, 0, }, /* 792 */ - { 111, 12, 3, 0, 0, 111, 0, }, /* 793 */ - { 111, 21, 12, 0, 0, 111, 0, }, /* 794 */ - { 100, 12, 3, 0, 0, 100, 0, }, /* 795 */ - { 100, 10, 5, 0, 0, 100, 0, }, /* 796 */ - { 100, 7, 12, 0, 0, 100, 0, }, /* 797 */ - { 100, 7, 4, 0, 0, 100, 0, }, /* 798 */ - { 100, 21, 12, 0, 0, 100, 0, }, /* 799 */ - { 100, 13, 12, 0, 0, 100, 0, }, /* 800 */ - { 48, 15, 12, 0, 0, 48, 0, }, /* 801 */ - { 108, 7, 12, 0, 0, 108, 0, }, /* 802 */ - { 108, 10, 5, 0, 0, 108, 0, }, /* 803 */ - { 108, 12, 3, 0, 0, 108, 0, }, /* 804 */ - { 108, 21, 12, 0, 0, 108, 0, }, /* 805 */ - { 129, 7, 12, 0, 0, 129, 0, }, /* 806 */ - { 129, 21, 12, 0, 0, 129, 0, }, /* 807 */ - { 109, 7, 12, 0, 0, 109, 0, }, /* 808 */ - { 109, 12, 3, 0, 0, 109, 0, }, /* 809 */ - { 109, 10, 5, 0, 0, 109, 0, }, /* 810 */ - { 109, 13, 12, 0, 0, 109, 0, }, /* 811 */ - { 107, 12, 3, 0, 0, 107, 0, }, /* 812 */ - { 107, 12, 3, 0, 0, -52, 0, }, /* 813 */ - { 107, 10, 5, 0, 0, 107, 0, }, /* 814 */ - { 107, 10, 5, 0, 0, -52, 0, }, /* 815 */ - { 107, 7, 12, 0, 0, 107, 0, }, /* 816 */ - { 28, 12, 3, 0, 0, -52, 0, }, /* 817 */ - { 107, 10, 3, 0, 0, 107, 0, }, /* 818 */ - { 135, 7, 12, 0, 0, 135, 0, }, /* 819 */ - { 135, 10, 5, 0, 0, 135, 0, }, /* 820 */ - { 135, 12, 3, 0, 0, 135, 0, }, /* 821 */ - { 135, 21, 12, 0, 0, 135, 0, }, /* 822 */ - { 135, 13, 12, 0, 0, 135, 0, }, /* 823 */ - { 124, 7, 12, 0, 0, 124, 0, }, /* 824 */ - { 124, 10, 3, 0, 0, 124, 0, }, /* 825 */ - { 124, 10, 5, 0, 0, 124, 0, }, /* 826 */ - { 124, 12, 3, 0, 0, 124, 0, }, /* 827 */ - { 124, 21, 12, 0, 0, 124, 0, }, /* 828 */ - { 124, 13, 12, 0, 0, 124, 0, }, /* 829 */ - { 123, 7, 12, 0, 0, 123, 0, }, /* 830 */ - { 123, 10, 3, 0, 0, 123, 0, }, /* 831 */ - { 123, 10, 5, 0, 0, 123, 0, }, /* 832 */ - { 123, 12, 3, 0, 0, 123, 0, }, /* 833 */ - { 123, 21, 12, 0, 0, 123, 0, }, /* 834 */ - { 114, 7, 12, 0, 0, 114, 0, }, /* 835 */ - { 114, 10, 5, 0, 0, 114, 0, }, /* 836 */ - { 114, 12, 3, 0, 0, 114, 0, }, /* 837 */ - { 114, 21, 12, 0, 0, 114, 0, }, /* 838 */ - { 114, 13, 12, 0, 0, 114, 0, }, /* 839 */ - { 102, 7, 12, 0, 0, 102, 0, }, /* 840 */ - { 102, 12, 3, 0, 0, 102, 0, }, /* 841 */ - { 102, 10, 5, 0, 0, 102, 0, }, /* 842 */ - { 102, 13, 12, 0, 0, 102, 0, }, /* 843 */ - { 126, 7, 12, 0, 0, 126, 0, }, /* 844 */ - { 126, 12, 3, 0, 0, 126, 0, }, /* 845 */ - { 126, 10, 5, 0, 0, 126, 0, }, /* 846 */ - { 126, 13, 12, 0, 0, 126, 0, }, /* 847 */ - { 126, 15, 12, 0, 0, 126, 0, }, /* 848 */ - { 126, 21, 12, 0, 0, 126, 0, }, /* 849 */ - { 126, 26, 12, 0, 0, 126, 0, }, /* 850 */ - { 142, 7, 12, 0, 0, 142, 0, }, /* 851 */ - { 142, 10, 5, 0, 0, 142, 0, }, /* 852 */ - { 142, 12, 3, 0, 0, 142, 0, }, /* 853 */ - { 142, 21, 12, 0, 0, 142, 0, }, /* 854 */ - { 125, 9, 12, 0, 32, 125, 0, }, /* 855 */ - { 125, 5, 12, 0, -32, 125, 0, }, /* 856 */ - { 125, 13, 12, 0, 0, 125, 0, }, /* 857 */ - { 125, 15, 12, 0, 0, 125, 0, }, /* 858 */ - { 125, 7, 12, 0, 0, 125, 0, }, /* 859 */ - { 154, 7, 12, 0, 0, 154, 0, }, /* 860 */ - { 154, 10, 3, 0, 0, 154, 0, }, /* 861 */ - { 154, 10, 5, 0, 0, 154, 0, }, /* 862 */ - { 154, 12, 3, 0, 0, 154, 0, }, /* 863 */ - { 154, 7, 4, 0, 0, 154, 0, }, /* 864 */ - { 154, 21, 12, 0, 0, 154, 0, }, /* 865 */ - { 154, 13, 12, 0, 0, 154, 0, }, /* 866 */ - { 150, 7, 12, 0, 0, 150, 0, }, /* 867 */ - { 150, 10, 5, 0, 0, 150, 0, }, /* 868 */ - { 150, 12, 3, 0, 0, 150, 0, }, /* 869 */ - { 150, 21, 12, 0, 0, 150, 0, }, /* 870 */ - { 141, 7, 12, 0, 0, 141, 0, }, /* 871 */ - { 141, 12, 3, 0, 0, 141, 0, }, /* 872 */ - { 141, 10, 5, 0, 0, 141, 0, }, /* 873 */ - { 141, 7, 4, 0, 0, 141, 0, }, /* 874 */ - { 141, 21, 12, 0, 0, 141, 0, }, /* 875 */ - { 140, 7, 12, 0, 0, 140, 0, }, /* 876 */ - { 140, 12, 3, 0, 0, 140, 0, }, /* 877 */ - { 140, 10, 5, 0, 0, 140, 0, }, /* 878 */ - { 140, 7, 4, 0, 0, 140, 0, }, /* 879 */ - { 140, 21, 12, 0, 0, 140, 0, }, /* 880 */ - { 122, 7, 12, 0, 0, 122, 0, }, /* 881 */ - { 133, 7, 12, 0, 0, 133, 0, }, /* 882 */ - { 133, 10, 5, 0, 0, 133, 0, }, /* 883 */ - { 133, 12, 3, 0, 0, 133, 0, }, /* 884 */ - { 133, 21, 12, 0, 0, 133, 0, }, /* 885 */ - { 133, 13, 12, 0, 0, 133, 0, }, /* 886 */ - { 133, 15, 12, 0, 0, 133, 0, }, /* 887 */ - { 134, 21, 12, 0, 0, 134, 0, }, /* 888 */ - { 134, 7, 12, 0, 0, 134, 0, }, /* 889 */ - { 134, 12, 3, 0, 0, 134, 0, }, /* 890 */ - { 134, 10, 5, 0, 0, 134, 0, }, /* 891 */ - { 138, 7, 12, 0, 0, 138, 0, }, /* 892 */ - { 138, 12, 3, 0, 0, 138, 0, }, /* 893 */ - { 138, 7, 4, 0, 0, 138, 0, }, /* 894 */ - { 138, 13, 12, 0, 0, 138, 0, }, /* 895 */ - { 143, 7, 12, 0, 0, 143, 0, }, /* 896 */ - { 143, 10, 5, 0, 0, 143, 0, }, /* 897 */ - { 143, 12, 3, 0, 0, 143, 0, }, /* 898 */ - { 143, 13, 12, 0, 0, 143, 0, }, /* 899 */ - { 145, 7, 12, 0, 0, 145, 0, }, /* 900 */ - { 145, 12, 3, 0, 0, 145, 0, }, /* 901 */ - { 145, 10, 5, 0, 0, 145, 0, }, /* 902 */ - { 145, 21, 12, 0, 0, 145, 0, }, /* 903 */ - { 54, 15, 12, 0, 0, 54, 0, }, /* 904 */ - { 54, 21, 12, 0, 0, 54, 0, }, /* 905 */ - { 63, 7, 12, 0, 0, 63, 0, }, /* 906 */ - { 63, 14, 12, 0, 0, 63, 0, }, /* 907 */ - { 63, 21, 12, 0, 0, 63, 0, }, /* 908 */ - { 80, 7, 12, 0, 0, 80, 0, }, /* 909 */ - { 80, 1, 2, 0, 0, 80, 0, }, /* 910 */ - { 127, 7, 12, 0, 0, 127, 0, }, /* 911 */ - { 115, 7, 12, 0, 0, 115, 0, }, /* 912 */ - { 115, 13, 12, 0, 0, 115, 0, }, /* 913 */ - { 115, 21, 12, 0, 0, 115, 0, }, /* 914 */ - { 103, 7, 12, 0, 0, 103, 0, }, /* 915 */ - { 103, 12, 3, 0, 0, 103, 0, }, /* 916 */ - { 103, 21, 12, 0, 0, 103, 0, }, /* 917 */ - { 119, 7, 12, 0, 0, 119, 0, }, /* 918 */ - { 119, 12, 3, 0, 0, 119, 0, }, /* 919 */ - { 119, 21, 12, 0, 0, 119, 0, }, /* 920 */ - { 119, 26, 12, 0, 0, 119, 0, }, /* 921 */ - { 119, 6, 12, 0, 0, 119, 0, }, /* 922 */ - { 119, 13, 12, 0, 0, 119, 0, }, /* 923 */ - { 119, 15, 12, 0, 0, 119, 0, }, /* 924 */ - { 146, 9, 12, 0, 32, 146, 0, }, /* 925 */ - { 146, 5, 12, 0, -32, 146, 0, }, /* 926 */ - { 146, 15, 12, 0, 0, 146, 0, }, /* 927 */ - { 146, 21, 12, 0, 0, 146, 0, }, /* 928 */ - { 99, 7, 12, 0, 0, 99, 0, }, /* 929 */ - { 99, 12, 3, 0, 0, 99, 0, }, /* 930 */ - { 99, 10, 5, 0, 0, 99, 0, }, /* 931 */ - { 99, 6, 12, 0, 0, 99, 0, }, /* 932 */ - { 137, 6, 12, 0, 0, 137, 0, }, /* 933 */ - { 139, 6, 12, 0, 0, 139, 0, }, /* 934 */ - { 155, 12, 3, 0, 0, 155, 0, }, /* 935 */ - { 23, 10, 5, 0, 0, 23, 0, }, /* 936 */ - { 137, 7, 12, 0, 0, 137, 0, }, /* 937 */ - { 155, 7, 12, 0, 0, 155, 0, }, /* 938 */ - { 139, 7, 12, 0, 0, 139, 0, }, /* 939 */ - { 105, 7, 12, 0, 0, 105, 0, }, /* 940 */ - { 105, 26, 12, 0, 0, 105, 0, }, /* 941 */ - { 105, 12, 3, 0, 0, 105, 0, }, /* 942 */ - { 105, 21, 12, 0, 0, 105, 0, }, /* 943 */ - { 10, 1, 2, 0, 0, 105, 0, }, /* 944 */ - { 10, 10, 3, 0, 0, 10, 0, }, /* 945 */ - { 10, 10, 5, 0, 0, 10, 0, }, /* 946 */ - { 20, 12, 3, 0, 0, 20, 0, }, /* 947 */ - { 131, 26, 12, 0, 0, 131, 0, }, /* 948 */ - { 131, 12, 3, 0, 0, 131, 0, }, /* 949 */ - { 131, 21, 12, 0, 0, 131, 0, }, /* 950 */ - { 18, 12, 3, 0, 0, 18, 0, }, /* 951 */ - { 151, 7, 12, 0, 0, 151, 0, }, /* 952 */ - { 151, 12, 3, 0, 0, 151, 0, }, /* 953 */ - { 151, 6, 12, 0, 0, 151, 0, }, /* 954 */ - { 151, 13, 12, 0, 0, 151, 0, }, /* 955 */ - { 151, 26, 12, 0, 0, 151, 0, }, /* 956 */ - { 152, 7, 12, 0, 0, 152, 0, }, /* 957 */ - { 152, 12, 3, 0, 0, 152, 0, }, /* 958 */ - { 152, 13, 12, 0, 0, 152, 0, }, /* 959 */ - { 152, 23, 12, 0, 0, 152, 0, }, /* 960 */ - { 113, 7, 12, 0, 0, 113, 0, }, /* 961 */ - { 113, 15, 12, 0, 0, 113, 0, }, /* 962 */ - { 113, 12, 3, 0, 0, 113, 0, }, /* 963 */ - { 132, 9, 12, 0, 34, 132, 0, }, /* 964 */ - { 132, 5, 12, 0, -34, 132, 0, }, /* 965 */ - { 132, 12, 3, 0, 0, 132, 0, }, /* 966 */ - { 132, 6, 12, 0, 0, 132, 0, }, /* 967 */ - { 132, 13, 12, 0, 0, 132, 0, }, /* 968 */ - { 132, 21, 12, 0, 0, 132, 0, }, /* 969 */ - { 0, 2, 14, 0, 0, 0, 0, }, /* 970 */ - { 10, 26, 11, 0, 0, 10, 0, }, /* 971 */ - { 27, 26, 12, 0, 0, 27, 0, }, /* 972 */ - { 10, 24, 3, 0, 0, 10, 0, }, /* 973 */ - { 10, 1, 3, 0, 0, 10, 0, }, /* 974 */ + { 1, 1, 2, 0, 0, -82, 0, }, /* 223 */ + { 10, 21, 12, 0, 0, -164, 0, }, /* 224 */ + { 1, 7, 12, 0, 0, 1, 0, }, /* 225 */ + { 10, 6, 12, 0, 0, -181, 0, }, /* 226 */ + { 28, 12, 3, 0, 0, -10, 0, }, /* 227 */ + { 1, 13, 12, 0, 0, -86, 0, }, /* 228 */ + { 1, 21, 12, 0, 0, -4, 0, }, /* 229 */ + { 1, 6, 12, 0, 0, 1, 0, }, /* 230 */ + { 1, 13, 12, 0, 0, 1, 0, }, /* 231 */ + { 50, 21, 12, 0, 0, 50, 0, }, /* 232 */ + { 50, 1, 4, 0, 0, 50, 0, }, /* 233 */ + { 50, 7, 12, 0, 0, 50, 0, }, /* 234 */ + { 50, 12, 3, 0, 0, 50, 0, }, /* 235 */ + { 56, 7, 12, 0, 0, 56, 0, }, /* 236 */ + { 56, 12, 3, 0, 0, 56, 0, }, /* 237 */ + { 64, 13, 12, 0, 0, 64, 0, }, /* 238 */ + { 64, 7, 12, 0, 0, 64, 0, }, /* 239 */ + { 64, 12, 3, 0, 0, 64, 0, }, /* 240 */ + { 64, 6, 12, 0, 0, 64, 0, }, /* 241 */ + { 64, 26, 12, 0, 0, 64, 0, }, /* 242 */ + { 64, 21, 12, 0, 0, 64, 0, }, /* 243 */ + { 64, 23, 12, 0, 0, 64, 0, }, /* 244 */ + { 90, 7, 12, 0, 0, 90, 0, }, /* 245 */ + { 90, 12, 3, 0, 0, 90, 0, }, /* 246 */ + { 90, 6, 12, 0, 0, 90, 0, }, /* 247 */ + { 90, 21, 12, 0, 0, 90, 0, }, /* 248 */ + { 95, 7, 12, 0, 0, 95, 0, }, /* 249 */ + { 95, 12, 3, 0, 0, 95, 0, }, /* 250 */ + { 95, 21, 12, 0, 0, 95, 0, }, /* 251 */ + { 1, 24, 12, 0, 0, 1, 0, }, /* 252 */ + { 15, 12, 3, 0, 0, 15, 0, }, /* 253 */ + { 15, 10, 5, 0, 0, 15, 0, }, /* 254 */ + { 15, 7, 12, 0, 0, 15, 0, }, /* 255 */ + { 28, 12, 3, 0, 0, -216, 0, }, /* 256 */ + { 28, 12, 3, 0, 0, -203, 0, }, /* 257 */ + { 10, 21, 12, 0, 0, -259, 0, }, /* 258 */ + { 10, 21, 12, 0, 0, -280, 0, }, /* 259 */ + { 15, 13, 12, 0, 0, -132, 0, }, /* 260 */ + { 15, 21, 12, 0, 0, 15, 0, }, /* 261 */ + { 15, 6, 12, 0, 0, 15, 0, }, /* 262 */ + { 3, 7, 12, 0, 0, 3, 0, }, /* 263 */ + { 3, 12, 3, 0, 0, 3, 0, }, /* 264 */ + { 3, 10, 5, 0, 0, 3, 0, }, /* 265 */ + { 3, 10, 3, 0, 0, 3, 0, }, /* 266 */ + { 3, 13, 12, 0, 0, -90, 0, }, /* 267 */ + { 3, 23, 12, 0, 0, 3, 0, }, /* 268 */ + { 3, 15, 12, 0, 0, 3, 0, }, /* 269 */ + { 3, 26, 12, 0, 0, 3, 0, }, /* 270 */ + { 3, 21, 12, 0, 0, 3, 0, }, /* 271 */ + { 22, 12, 3, 0, 0, 22, 0, }, /* 272 */ + { 22, 10, 5, 0, 0, 22, 0, }, /* 273 */ + { 22, 7, 12, 0, 0, 22, 0, }, /* 274 */ + { 22, 13, 12, 0, 0, -61, 0, }, /* 275 */ + { 22, 21, 12, 0, 0, 22, 0, }, /* 276 */ + { 21, 12, 3, 0, 0, 21, 0, }, /* 277 */ + { 21, 10, 5, 0, 0, 21, 0, }, /* 278 */ + { 21, 7, 12, 0, 0, 21, 0, }, /* 279 */ + { 21, 13, 12, 0, 0, -58, 0, }, /* 280 */ + { 21, 21, 12, 0, 0, 21, 0, }, /* 281 */ + { 21, 23, 12, 0, 0, 21, 0, }, /* 282 */ + { 44, 12, 3, 0, 0, 44, 0, }, /* 283 */ + { 44, 10, 5, 0, 0, 44, 0, }, /* 284 */ + { 44, 7, 12, 0, 0, 44, 0, }, /* 285 */ + { 44, 10, 3, 0, 0, 44, 0, }, /* 286 */ + { 44, 13, 12, 0, 0, 44, 0, }, /* 287 */ + { 44, 26, 12, 0, 0, 44, 0, }, /* 288 */ + { 44, 15, 12, 0, 0, 44, 0, }, /* 289 */ + { 54, 12, 3, 0, 0, 54, 0, }, /* 290 */ + { 54, 7, 12, 0, 0, 54, 0, }, /* 291 */ + { 54, 10, 3, 0, 0, 54, 0, }, /* 292 */ + { 54, 10, 5, 0, 0, 54, 0, }, /* 293 */ + { 54, 13, 12, 0, 0, -55, 0, }, /* 294 */ + { 54, 15, 12, 0, 0, -55, 0, }, /* 295 */ + { 54, 26, 12, 0, 0, -55, 0, }, /* 296 */ + { 54, 26, 12, 0, 0, 54, 0, }, /* 297 */ + { 54, 23, 12, 0, 0, 54, 0, }, /* 298 */ + { 55, 12, 3, 0, 0, 55, 0, }, /* 299 */ + { 55, 10, 5, 0, 0, 55, 0, }, /* 300 */ + { 55, 7, 12, 0, 0, 55, 0, }, /* 301 */ + { 55, 13, 12, 0, 0, 55, 0, }, /* 302 */ + { 55, 21, 12, 0, 0, 55, 0, }, /* 303 */ + { 55, 15, 12, 0, 0, 55, 0, }, /* 304 */ + { 55, 26, 12, 0, 0, 55, 0, }, /* 305 */ + { 29, 7, 12, 0, 0, 29, 0, }, /* 306 */ + { 29, 12, 3, 0, 0, 29, 0, }, /* 307 */ + { 29, 10, 5, 0, 0, 29, 0, }, /* 308 */ + { 29, 21, 12, 0, 0, 29, 0, }, /* 309 */ + { 29, 10, 3, 0, 0, 29, 0, }, /* 310 */ + { 29, 13, 12, 0, 0, -70, 0, }, /* 311 */ + { 37, 12, 3, 0, 0, 37, 0, }, /* 312 */ + { 37, 10, 5, 0, 0, 37, 0, }, /* 313 */ + { 37, 7, 12, 0, 0, 37, 0, }, /* 314 */ + { 37, 10, 3, 0, 0, 37, 0, }, /* 315 */ + { 37, 7, 4, 0, 0, 37, 0, }, /* 316 */ + { 37, 26, 12, 0, 0, 37, 0, }, /* 317 */ + { 37, 15, 12, 0, 0, 37, 0, }, /* 318 */ + { 37, 13, 12, 0, 0, 37, 0, }, /* 319 */ + { 48, 12, 3, 0, 0, 48, 0, }, /* 320 */ + { 48, 10, 5, 0, 0, 48, 0, }, /* 321 */ + { 48, 7, 12, 0, 0, 48, 0, }, /* 322 */ + { 48, 10, 3, 0, 0, 48, 0, }, /* 323 */ + { 48, 13, 12, 0, 0, 48, 0, }, /* 324 */ + { 48, 21, 12, 0, 0, 48, 0, }, /* 325 */ + { 57, 7, 12, 0, 0, 57, 0, }, /* 326 */ + { 57, 12, 3, 0, 0, 57, 0, }, /* 327 */ + { 57, 7, 5, 0, 0, 57, 0, }, /* 328 */ + { 57, 6, 12, 0, 0, 57, 0, }, /* 329 */ + { 57, 21, 12, 0, 0, 57, 0, }, /* 330 */ + { 57, 13, 12, 0, 0, 57, 0, }, /* 331 */ + { 33, 7, 12, 0, 0, 33, 0, }, /* 332 */ + { 33, 12, 3, 0, 0, 33, 0, }, /* 333 */ + { 33, 7, 5, 0, 0, 33, 0, }, /* 334 */ + { 33, 6, 12, 0, 0, 33, 0, }, /* 335 */ + { 33, 13, 12, 0, 0, 33, 0, }, /* 336 */ + { 58, 7, 12, 0, 0, 58, 0, }, /* 337 */ + { 58, 26, 12, 0, 0, 58, 0, }, /* 338 */ + { 58, 21, 12, 0, 0, 58, 0, }, /* 339 */ + { 58, 12, 3, 0, 0, 58, 0, }, /* 340 */ + { 58, 13, 12, 0, 0, 58, 0, }, /* 341 */ + { 58, 15, 12, 0, 0, 58, 0, }, /* 342 */ + { 58, 22, 12, 0, 0, 58, 0, }, /* 343 */ + { 58, 18, 12, 0, 0, 58, 0, }, /* 344 */ + { 58, 10, 5, 0, 0, 58, 0, }, /* 345 */ + { 39, 7, 12, 0, 0, 39, 0, }, /* 346 */ + { 39, 10, 12, 0, 0, 39, 0, }, /* 347 */ + { 39, 12, 3, 0, 0, 39, 0, }, /* 348 */ + { 39, 10, 5, 0, 0, 39, 0, }, /* 349 */ + { 39, 13, 12, 0, 0, -94, 0, }, /* 350 */ + { 39, 21, 12, 0, 0, 39, 0, }, /* 351 */ + { 39, 13, 12, 0, 0, 39, 0, }, /* 352 */ + { 39, 26, 12, 0, 0, 39, 0, }, /* 353 */ + { 17, 9, 12, 0, 7264, 17, 0, }, /* 354 */ + { 17, 5, 12, 0, 3008, 17, 0, }, /* 355 */ + { 10, 21, 12, 0, 0, -52, 0, }, /* 356 */ + { 17, 6, 12, 0, 0, 17, 0, }, /* 357 */ + { 24, 7, 6, 0, 0, 24, 0, }, /* 358 */ + { 24, 7, 7, 0, 0, 24, 0, }, /* 359 */ + { 24, 7, 8, 0, 0, 24, 0, }, /* 360 */ + { 16, 7, 12, 0, 0, 16, 0, }, /* 361 */ + { 16, 12, 3, 0, 0, 16, 0, }, /* 362 */ + { 16, 21, 12, 0, 0, 16, 0, }, /* 363 */ + { 16, 15, 12, 0, 0, 16, 0, }, /* 364 */ + { 16, 26, 12, 0, 0, 16, 0, }, /* 365 */ + { 9, 9, 12, 0, 38864, 9, 0, }, /* 366 */ + { 9, 9, 12, 0, 8, 9, 0, }, /* 367 */ + { 9, 5, 12, 0, -8, 9, 0, }, /* 368 */ + { 8, 17, 12, 0, 0, 8, 0, }, /* 369 */ + { 8, 7, 12, 0, 0, 8, 0, }, /* 370 */ + { 8, 26, 12, 0, 0, 8, 0, }, /* 371 */ + { 8, 21, 12, 0, 0, 8, 0, }, /* 372 */ + { 41, 29, 12, 0, 0, 41, 0, }, /* 373 */ + { 41, 7, 12, 0, 0, 41, 0, }, /* 374 */ + { 41, 22, 12, 0, 0, 41, 0, }, /* 375 */ + { 41, 18, 12, 0, 0, 41, 0, }, /* 376 */ + { 46, 7, 12, 0, 0, 46, 0, }, /* 377 */ + { 46, 14, 12, 0, 0, 46, 0, }, /* 378 */ + { 51, 7, 12, 0, 0, 51, 0, }, /* 379 */ + { 51, 12, 3, 0, 0, 51, 0, }, /* 380 */ + { 51, 10, 5, 0, 0, 51, 0, }, /* 381 */ + { 25, 7, 12, 0, 0, 25, 0, }, /* 382 */ + { 25, 12, 3, 0, 0, 25, 0, }, /* 383 */ + { 25, 10, 5, 0, 0, 25, 0, }, /* 384 */ + { 10, 21, 12, 0, 0, -127, 0, }, /* 385 */ + { 7, 7, 12, 0, 0, 7, 0, }, /* 386 */ + { 7, 12, 3, 0, 0, 7, 0, }, /* 387 */ + { 52, 7, 12, 0, 0, 52, 0, }, /* 388 */ + { 52, 12, 3, 0, 0, 52, 0, }, /* 389 */ + { 32, 7, 12, 0, 0, 32, 0, }, /* 390 */ + { 32, 12, 3, 0, 0, 32, 0, }, /* 391 */ + { 32, 10, 5, 0, 0, 32, 0, }, /* 392 */ + { 32, 21, 12, 0, 0, 32, 0, }, /* 393 */ + { 32, 6, 12, 0, 0, 32, 0, }, /* 394 */ + { 32, 23, 12, 0, 0, 32, 0, }, /* 395 */ + { 32, 13, 12, 0, 0, 32, 0, }, /* 396 */ + { 32, 15, 12, 0, 0, 32, 0, }, /* 397 */ + { 38, 21, 12, 0, 0, 38, 0, }, /* 398 */ + { 10, 21, 12, 0, 0, -79, 0, }, /* 399 */ + { 38, 17, 12, 0, 0, 38, 0, }, /* 400 */ + { 38, 12, 3, 0, 0, 38, 0, }, /* 401 */ + { 38, 1, 2, 0, 0, 38, 0, }, /* 402 */ + { 38, 13, 12, 0, 0, 38, 0, }, /* 403 */ + { 38, 7, 12, 0, 0, 38, 0, }, /* 404 */ + { 38, 6, 12, 0, 0, 38, 0, }, /* 405 */ + { 35, 7, 12, 0, 0, 35, 0, }, /* 406 */ + { 35, 12, 3, 0, 0, 35, 0, }, /* 407 */ + { 35, 10, 5, 0, 0, 35, 0, }, /* 408 */ + { 35, 26, 12, 0, 0, 35, 0, }, /* 409 */ + { 35, 21, 12, 0, 0, 35, 0, }, /* 410 */ + { 35, 13, 12, 0, 0, 35, 0, }, /* 411 */ + { 53, 7, 12, 0, 0, 53, 0, }, /* 412 */ + { 40, 7, 12, 0, 0, 40, 0, }, /* 413 */ + { 40, 13, 12, 0, 0, 40, 0, }, /* 414 */ + { 40, 15, 12, 0, 0, 40, 0, }, /* 415 */ + { 40, 26, 12, 0, 0, 40, 0, }, /* 416 */ + { 32, 26, 12, 0, 0, 32, 0, }, /* 417 */ + { 6, 7, 12, 0, 0, 6, 0, }, /* 418 */ + { 6, 12, 3, 0, 0, 6, 0, }, /* 419 */ + { 6, 10, 5, 0, 0, 6, 0, }, /* 420 */ + { 6, 21, 12, 0, 0, 6, 0, }, /* 421 */ + { 91, 7, 12, 0, 0, 91, 0, }, /* 422 */ + { 91, 10, 5, 0, 0, 91, 0, }, /* 423 */ + { 91, 12, 3, 0, 0, 91, 0, }, /* 424 */ + { 91, 10, 12, 0, 0, 91, 0, }, /* 425 */ + { 91, 13, 12, 0, 0, 91, 0, }, /* 426 */ + { 91, 21, 12, 0, 0, 91, 0, }, /* 427 */ + { 91, 6, 12, 0, 0, 91, 0, }, /* 428 */ + { 28, 11, 3, 0, 0, 28, 0, }, /* 429 */ + { 62, 12, 3, 0, 0, 62, 0, }, /* 430 */ + { 62, 10, 5, 0, 0, 62, 0, }, /* 431 */ + { 62, 7, 12, 0, 0, 62, 0, }, /* 432 */ + { 62, 10, 3, 0, 0, 62, 0, }, /* 433 */ + { 62, 13, 12, 0, 0, 62, 0, }, /* 434 */ + { 62, 21, 12, 0, 0, 62, 0, }, /* 435 */ + { 62, 26, 12, 0, 0, 62, 0, }, /* 436 */ + { 76, 12, 3, 0, 0, 76, 0, }, /* 437 */ + { 76, 10, 5, 0, 0, 76, 0, }, /* 438 */ + { 76, 7, 12, 0, 0, 76, 0, }, /* 439 */ + { 76, 13, 12, 0, 0, 76, 0, }, /* 440 */ + { 93, 7, 12, 0, 0, 93, 0, }, /* 441 */ + { 93, 12, 3, 0, 0, 93, 0, }, /* 442 */ + { 93, 10, 5, 0, 0, 93, 0, }, /* 443 */ + { 93, 21, 12, 0, 0, 93, 0, }, /* 444 */ + { 70, 7, 12, 0, 0, 70, 0, }, /* 445 */ + { 70, 10, 5, 0, 0, 70, 0, }, /* 446 */ + { 70, 12, 3, 0, 0, 70, 0, }, /* 447 */ + { 70, 21, 12, 0, 0, 70, 0, }, /* 448 */ + { 70, 13, 12, 0, 0, 70, 0, }, /* 449 */ + { 73, 13, 12, 0, 0, 73, 0, }, /* 450 */ + { 73, 7, 12, 0, 0, 73, 0, }, /* 451 */ + { 73, 6, 12, 0, 0, 73, 0, }, /* 452 */ + { 73, 21, 12, 0, 0, 73, 0, }, /* 453 */ + { 13, 5, 12, 63, -6222, 13, 0, }, /* 454 */ + { 13, 5, 12, 67, -6221, 13, 0, }, /* 455 */ + { 13, 5, 12, 71, -6212, 13, 0, }, /* 456 */ + { 13, 5, 12, 75, -6210, 13, 0, }, /* 457 */ + { 13, 5, 12, 79, -6210, 13, 0, }, /* 458 */ + { 13, 5, 12, 79, -6211, 13, 0, }, /* 459 */ + { 13, 5, 12, 84, -6204, 13, 0, }, /* 460 */ + { 13, 5, 12, 88, -6180, 13, 0, }, /* 461 */ + { 13, 5, 12, 108, 35267, 13, 0, }, /* 462 */ + { 17, 9, 12, 0, -3008, 17, 0, }, /* 463 */ + { 76, 21, 12, 0, 0, 76, 0, }, /* 464 */ + { 28, 12, 3, 0, 0, -122, 0, }, /* 465 */ + { 28, 12, 3, 0, 0, 15, 0, }, /* 466 */ + { 10, 21, 12, 0, 0, -40, 0, }, /* 467 */ + { 28, 12, 3, 0, 0, -16, 0, }, /* 468 */ + { 28, 12, 3, 0, 0, -46, 0, }, /* 469 */ + { 28, 12, 3, 0, 0, -157, 0, }, /* 470 */ + { 10, 10, 5, 0, 0, -16, 0, }, /* 471 */ + { 10, 7, 12, 0, 0, -43, 0, }, /* 472 */ + { 10, 7, 12, 0, 0, -16, 0, }, /* 473 */ + { 10, 7, 12, 0, 0, 15, 0, }, /* 474 */ + { 10, 7, 12, 0, 0, -172, 0, }, /* 475 */ + { 10, 7, 12, 0, 0, -40, 0, }, /* 476 */ + { 28, 12, 3, 0, 0, -106, 0, }, /* 477 */ + { 10, 10, 5, 0, 0, 3, 0, }, /* 478 */ + { 28, 12, 3, 0, 0, -40, 0, }, /* 479 */ + { 10, 7, 12, 0, 0, 150, 0, }, /* 480 */ + { 13, 5, 12, 0, 0, 13, 0, }, /* 481 */ + { 13, 6, 12, 0, 0, 13, 0, }, /* 482 */ + { 34, 5, 12, 0, 35332, 34, 0, }, /* 483 */ + { 34, 5, 12, 0, 3814, 34, 0, }, /* 484 */ + { 34, 5, 12, 0, 35384, 34, 0, }, /* 485 */ + { 28, 12, 3, 0, 0, -37, 0, }, /* 486 */ + { 28, 12, 3, 0, 0, 50, 0, }, /* 487 */ + { 34, 9, 12, 92, 1, 34, 0, }, /* 488 */ + { 34, 5, 12, 92, -1, 34, 0, }, /* 489 */ + { 34, 5, 12, 92, -58, 34, 0, }, /* 490 */ + { 34, 9, 12, 0, -7615, 34, 0, }, /* 491 */ + { 20, 5, 12, 0, 8, 20, 0, }, /* 492 */ + { 20, 9, 12, 0, -8, 20, 0, }, /* 493 */ + { 20, 5, 12, 0, 74, 20, 0, }, /* 494 */ + { 20, 5, 12, 0, 86, 20, 0, }, /* 495 */ + { 20, 5, 12, 0, 100, 20, 0, }, /* 496 */ + { 20, 5, 12, 0, 128, 20, 0, }, /* 497 */ + { 20, 5, 12, 0, 112, 20, 0, }, /* 498 */ + { 20, 5, 12, 0, 126, 20, 0, }, /* 499 */ + { 20, 8, 12, 0, -8, 20, 0, }, /* 500 */ + { 20, 5, 12, 0, 9, 20, 0, }, /* 501 */ + { 20, 9, 12, 0, -74, 20, 0, }, /* 502 */ + { 20, 8, 12, 0, -9, 20, 0, }, /* 503 */ + { 20, 5, 12, 21, -7173, 20, 0, }, /* 504 */ + { 20, 9, 12, 0, -86, 20, 0, }, /* 505 */ + { 20, 9, 12, 0, -100, 20, 0, }, /* 506 */ + { 20, 9, 12, 0, -112, 20, 0, }, /* 507 */ + { 20, 9, 12, 0, -128, 20, 0, }, /* 508 */ + { 20, 9, 12, 0, -126, 20, 0, }, /* 509 */ + { 28, 1, 3, 0, 0, 28, 0, }, /* 510 */ + { 28, 1, 13, 0, 0, 28, 0, }, /* 511 */ + { 10, 27, 2, 0, 0, 10, 0, }, /* 512 */ + { 10, 28, 2, 0, 0, 10, 0, }, /* 513 */ + { 10, 29, 12, 0, 0, -73, 0, }, /* 514 */ + { 10, 21, 14, 0, 0, 10, 0, }, /* 515 */ + { 0, 2, 2, 0, 0, 0, 0, }, /* 516 */ + { 28, 12, 3, 0, 0, -110, 0, }, /* 517 */ + { 10, 9, 12, 0, 0, 10, 0, }, /* 518 */ + { 10, 5, 12, 0, 0, 10, 0, }, /* 519 */ + { 20, 9, 12, 96, -7517, 20, 0, }, /* 520 */ + { 34, 9, 12, 100, -8383, 34, 0, }, /* 521 */ + { 34, 9, 12, 104, -8262, 34, 0, }, /* 522 */ + { 34, 9, 12, 0, 28, 34, 0, }, /* 523 */ + { 10, 7, 12, 0, 0, 10, 0, }, /* 524 */ + { 10, 5, 14, 0, 0, 10, 0, }, /* 525 */ + { 34, 5, 12, 0, -28, 34, 0, }, /* 526 */ + { 34, 14, 12, 0, 16, 34, 0, }, /* 527 */ + { 34, 14, 12, 0, -16, 34, 0, }, /* 528 */ + { 34, 14, 12, 0, 0, 34, 0, }, /* 529 */ + { 10, 25, 14, 0, 0, 10, 0, }, /* 530 */ + { 10, 26, 12, 0, 26, 10, 0, }, /* 531 */ + { 10, 26, 14, 0, 26, 10, 0, }, /* 532 */ + { 10, 26, 12, 0, -26, 10, 0, }, /* 533 */ + { 5, 26, 12, 0, 0, 5, 0, }, /* 534 */ + { 18, 9, 12, 0, 48, 18, 0, }, /* 535 */ + { 18, 5, 12, 0, -48, 18, 0, }, /* 536 */ + { 34, 9, 12, 0, -10743, 34, 0, }, /* 537 */ + { 34, 9, 12, 0, -3814, 34, 0, }, /* 538 */ + { 34, 9, 12, 0, -10727, 34, 0, }, /* 539 */ + { 34, 5, 12, 0, -10795, 34, 0, }, /* 540 */ + { 34, 5, 12, 0, -10792, 34, 0, }, /* 541 */ + { 34, 9, 12, 0, -10780, 34, 0, }, /* 542 */ + { 34, 9, 12, 0, -10749, 34, 0, }, /* 543 */ + { 34, 9, 12, 0, -10783, 34, 0, }, /* 544 */ + { 34, 9, 12, 0, -10782, 34, 0, }, /* 545 */ + { 34, 9, 12, 0, -10815, 34, 0, }, /* 546 */ + { 11, 5, 12, 0, 0, 11, 0, }, /* 547 */ + { 11, 26, 12, 0, 0, 11, 0, }, /* 548 */ + { 11, 12, 3, 0, 0, 11, 0, }, /* 549 */ + { 11, 21, 12, 0, 0, 11, 0, }, /* 550 */ + { 11, 15, 12, 0, 0, 11, 0, }, /* 551 */ + { 17, 5, 12, 0, -7264, 17, 0, }, /* 552 */ + { 59, 7, 12, 0, 0, 59, 0, }, /* 553 */ + { 59, 6, 12, 0, 0, 59, 0, }, /* 554 */ + { 59, 21, 12, 0, 0, 59, 0, }, /* 555 */ + { 59, 12, 3, 0, 0, 59, 0, }, /* 556 */ + { 13, 12, 3, 0, 0, 13, 0, }, /* 557 */ + { 10, 21, 12, 0, 0, -28, 0, }, /* 558 */ + { 23, 26, 12, 0, 0, 23, 0, }, /* 559 */ + { 10, 21, 12, 0, 0, -150, 0, }, /* 560 */ + { 10, 21, 12, 0, 0, -137, 0, }, /* 561 */ + { 23, 6, 12, 0, 0, 23, 0, }, /* 562 */ + { 10, 7, 12, 0, 0, 23, 0, }, /* 563 */ + { 23, 14, 12, 0, 0, 23, 0, }, /* 564 */ + { 10, 22, 12, 0, 0, -150, 0, }, /* 565 */ + { 10, 18, 12, 0, 0, -150, 0, }, /* 566 */ + { 10, 26, 12, 0, 0, -137, 0, }, /* 567 */ + { 10, 17, 12, 0, 0, -137, 0, }, /* 568 */ + { 10, 22, 12, 0, 0, -137, 0, }, /* 569 */ + { 10, 18, 12, 0, 0, -137, 0, }, /* 570 */ + { 28, 12, 3, 0, 0, -19, 0, }, /* 571 */ + { 24, 10, 3, 0, 0, 24, 0, }, /* 572 */ + { 10, 17, 14, 0, 0, -137, 0, }, /* 573 */ + { 10, 6, 12, 0, 0, -67, 0, }, /* 574 */ + { 10, 7, 12, 0, 0, -114, 0, }, /* 575 */ + { 10, 21, 14, 0, 0, -114, 0, }, /* 576 */ + { 10, 26, 12, 0, 0, 23, 0, }, /* 577 */ + { 27, 7, 12, 0, 0, 27, 0, }, /* 578 */ + { 28, 12, 3, 0, 0, -67, 0, }, /* 579 */ + { 10, 24, 12, 0, 0, -67, 0, }, /* 580 */ + { 27, 6, 12, 0, 0, 27, 0, }, /* 581 */ + { 10, 17, 12, 0, 0, -67, 0, }, /* 582 */ + { 30, 7, 12, 0, 0, 30, 0, }, /* 583 */ + { 30, 6, 12, 0, 0, 30, 0, }, /* 584 */ + { 4, 7, 12, 0, 0, 4, 0, }, /* 585 */ + { 24, 7, 12, 0, 0, 24, 0, }, /* 586 */ + { 10, 15, 12, 0, 0, 23, 0, }, /* 587 */ + { 24, 26, 12, 0, 0, 24, 0, }, /* 588 */ + { 10, 26, 14, 0, 0, 23, 0, }, /* 589 */ + { 30, 26, 12, 0, 0, 30, 0, }, /* 590 */ + { 23, 7, 12, 0, 0, 23, 0, }, /* 591 */ + { 61, 7, 12, 0, 0, 61, 0, }, /* 592 */ + { 61, 6, 12, 0, 0, 61, 0, }, /* 593 */ + { 61, 26, 12, 0, 0, 61, 0, }, /* 594 */ + { 86, 7, 12, 0, 0, 86, 0, }, /* 595 */ + { 86, 6, 12, 0, 0, 86, 0, }, /* 596 */ + { 86, 21, 12, 0, 0, 86, 0, }, /* 597 */ + { 77, 7, 12, 0, 0, 77, 0, }, /* 598 */ + { 77, 6, 12, 0, 0, 77, 0, }, /* 599 */ + { 77, 21, 12, 0, 0, 77, 0, }, /* 600 */ + { 77, 13, 12, 0, 0, 77, 0, }, /* 601 */ + { 13, 9, 12, 108, 1, 13, 0, }, /* 602 */ + { 13, 5, 12, 108, -35267, 13, 0, }, /* 603 */ + { 13, 7, 12, 0, 0, 13, 0, }, /* 604 */ + { 13, 21, 12, 0, 0, 13, 0, }, /* 605 */ + { 79, 7, 12, 0, 0, 79, 0, }, /* 606 */ + { 79, 14, 12, 0, 0, 79, 0, }, /* 607 */ + { 79, 12, 3, 0, 0, 79, 0, }, /* 608 */ + { 79, 21, 12, 0, 0, 79, 0, }, /* 609 */ + { 10, 24, 12, 0, 0, -64, 0, }, /* 610 */ + { 34, 9, 12, 0, -35332, 34, 0, }, /* 611 */ + { 34, 9, 12, 0, -42280, 34, 0, }, /* 612 */ + { 34, 5, 12, 0, 48, 34, 0, }, /* 613 */ + { 34, 9, 12, 0, -42308, 34, 0, }, /* 614 */ + { 34, 9, 12, 0, -42319, 34, 0, }, /* 615 */ + { 34, 9, 12, 0, -42315, 34, 0, }, /* 616 */ + { 34, 9, 12, 0, -42305, 34, 0, }, /* 617 */ + { 34, 9, 12, 0, -42258, 34, 0, }, /* 618 */ + { 34, 9, 12, 0, -42282, 34, 0, }, /* 619 */ + { 34, 9, 12, 0, -42261, 34, 0, }, /* 620 */ + { 34, 9, 12, 0, 928, 34, 0, }, /* 621 */ + { 34, 9, 12, 0, -48, 34, 0, }, /* 622 */ + { 34, 9, 12, 0, -42307, 34, 0, }, /* 623 */ + { 34, 9, 12, 0, -35384, 34, 0, }, /* 624 */ + { 49, 7, 12, 0, 0, 49, 0, }, /* 625 */ + { 49, 12, 3, 0, 0, 49, 0, }, /* 626 */ + { 49, 10, 5, 0, 0, 49, 0, }, /* 627 */ + { 49, 26, 12, 0, 0, 49, 0, }, /* 628 */ + { 10, 15, 12, 0, 0, -244, 0, }, /* 629 */ + { 10, 15, 12, 0, 0, -230, 0, }, /* 630 */ + { 10, 26, 12, 0, 0, -191, 0, }, /* 631 */ + { 10, 23, 12, 0, 0, -191, 0, }, /* 632 */ + { 65, 7, 12, 0, 0, 65, 0, }, /* 633 */ + { 65, 21, 12, 0, 0, 65, 0, }, /* 634 */ + { 75, 10, 5, 0, 0, 75, 0, }, /* 635 */ + { 75, 7, 12, 0, 0, 75, 0, }, /* 636 */ + { 75, 12, 3, 0, 0, 75, 0, }, /* 637 */ + { 75, 21, 12, 0, 0, 75, 0, }, /* 638 */ + { 75, 13, 12, 0, 0, 75, 0, }, /* 639 */ + { 15, 12, 3, 0, 0, -16, 0, }, /* 640 */ + { 15, 7, 12, 0, 0, -49, 0, }, /* 641 */ + { 69, 13, 12, 0, 0, 69, 0, }, /* 642 */ + { 69, 7, 12, 0, 0, 69, 0, }, /* 643 */ + { 69, 12, 3, 0, 0, 69, 0, }, /* 644 */ + { 10, 21, 12, 0, 0, -118, 0, }, /* 645 */ + { 69, 21, 12, 0, 0, 69, 0, }, /* 646 */ + { 74, 7, 12, 0, 0, 74, 0, }, /* 647 */ + { 74, 12, 3, 0, 0, 74, 0, }, /* 648 */ + { 74, 10, 5, 0, 0, 74, 0, }, /* 649 */ + { 74, 21, 12, 0, 0, 74, 0, }, /* 650 */ + { 84, 12, 3, 0, 0, 84, 0, }, /* 651 */ + { 84, 10, 5, 0, 0, 84, 0, }, /* 652 */ + { 84, 7, 12, 0, 0, 84, 0, }, /* 653 */ + { 84, 21, 12, 0, 0, 84, 0, }, /* 654 */ + { 10, 6, 12, 0, 0, -22, 0, }, /* 655 */ + { 84, 13, 12, 0, 0, 84, 0, }, /* 656 */ + { 39, 6, 12, 0, 0, 39, 0, }, /* 657 */ + { 68, 7, 12, 0, 0, 68, 0, }, /* 658 */ + { 68, 12, 3, 0, 0, 68, 0, }, /* 659 */ + { 68, 10, 5, 0, 0, 68, 0, }, /* 660 */ + { 68, 13, 12, 0, 0, 68, 0, }, /* 661 */ + { 68, 21, 12, 0, 0, 68, 0, }, /* 662 */ + { 92, 7, 12, 0, 0, 92, 0, }, /* 663 */ + { 92, 12, 3, 0, 0, 92, 0, }, /* 664 */ + { 92, 6, 12, 0, 0, 92, 0, }, /* 665 */ + { 92, 21, 12, 0, 0, 92, 0, }, /* 666 */ + { 87, 7, 12, 0, 0, 87, 0, }, /* 667 */ + { 87, 10, 5, 0, 0, 87, 0, }, /* 668 */ + { 87, 12, 3, 0, 0, 87, 0, }, /* 669 */ + { 87, 21, 12, 0, 0, 87, 0, }, /* 670 */ + { 87, 6, 12, 0, 0, 87, 0, }, /* 671 */ + { 34, 5, 12, 0, -928, 34, 0, }, /* 672 */ + { 9, 5, 12, 0, -38864, 9, 0, }, /* 673 */ + { 87, 13, 12, 0, 0, 87, 0, }, /* 674 */ + { 24, 7, 9, 0, 0, 24, 0, }, /* 675 */ + { 24, 7, 10, 0, 0, 24, 0, }, /* 676 */ + { 0, 4, 12, 0, 0, 0, 0, }, /* 677 */ + { 0, 3, 12, 0, 0, 0, 0, }, /* 678 */ + { 26, 25, 12, 0, 0, 26, 0, }, /* 679 */ + { 10, 18, 12, 0, 0, -7, 0, }, /* 680 */ + { 10, 22, 12, 0, 0, -7, 0, }, /* 681 */ + { 1, 7, 12, 0, 0, -13, 0, }, /* 682 */ + { 1, 26, 12, 0, 0, -13, 0, }, /* 683 */ + { 10, 6, 3, 0, 0, -67, 0, }, /* 684 */ + { 36, 7, 12, 0, 0, 36, 0, }, /* 685 */ + { 10, 21, 12, 0, 0, -98, 0, }, /* 686 */ + { 10, 21, 12, 0, 0, -25, 0, }, /* 687 */ + { 10, 15, 12, 0, 0, -102, 0, }, /* 688 */ + { 10, 26, 12, 0, 0, -25, 0, }, /* 689 */ + { 20, 14, 12, 0, 0, 20, 0, }, /* 690 */ + { 20, 15, 12, 0, 0, 20, 0, }, /* 691 */ + { 20, 26, 12, 0, 0, 20, 0, }, /* 692 */ + { 71, 7, 12, 0, 0, 71, 0, }, /* 693 */ + { 67, 7, 12, 0, 0, 67, 0, }, /* 694 */ + { 28, 12, 3, 0, 0, -1, 0, }, /* 695 */ + { 10, 15, 12, 0, 0, -1, 0, }, /* 696 */ + { 42, 7, 12, 0, 0, 42, 0, }, /* 697 */ + { 42, 15, 12, 0, 0, 42, 0, }, /* 698 */ + { 19, 7, 12, 0, 0, 19, 0, }, /* 699 */ + { 19, 14, 12, 0, 0, 19, 0, }, /* 700 */ + { 118, 7, 12, 0, 0, 118, 0, }, /* 701 */ + { 118, 12, 3, 0, 0, 118, 0, }, /* 702 */ + { 60, 7, 12, 0, 0, 60, 0, }, /* 703 */ + { 60, 21, 12, 0, 0, 60, 0, }, /* 704 */ + { 43, 7, 12, 0, 0, 43, 0, }, /* 705 */ + { 43, 21, 12, 0, 0, 43, 0, }, /* 706 */ + { 43, 14, 12, 0, 0, 43, 0, }, /* 707 */ + { 14, 9, 12, 0, 40, 14, 0, }, /* 708 */ + { 14, 5, 12, 0, -40, 14, 0, }, /* 709 */ + { 47, 7, 12, 0, 0, 47, 0, }, /* 710 */ + { 45, 7, 12, 0, 0, 45, 0, }, /* 711 */ + { 45, 13, 12, 0, 0, 45, 0, }, /* 712 */ + { 136, 9, 12, 0, 40, 136, 0, }, /* 713 */ + { 136, 5, 12, 0, -40, 136, 0, }, /* 714 */ + { 106, 7, 12, 0, 0, 106, 0, }, /* 715 */ + { 104, 7, 12, 0, 0, 104, 0, }, /* 716 */ + { 104, 21, 12, 0, 0, 104, 0, }, /* 717 */ + { 161, 9, 12, 0, 39, 161, 0, }, /* 718 */ + { 161, 5, 12, 0, -39, 161, 0, }, /* 719 */ + { 110, 7, 12, 0, 0, 110, 0, }, /* 720 */ + { 12, 7, 12, 0, 0, 12, 0, }, /* 721 */ + { 81, 7, 12, 0, 0, 81, 0, }, /* 722 */ + { 81, 21, 12, 0, 0, 81, 0, }, /* 723 */ + { 81, 15, 12, 0, 0, 81, 0, }, /* 724 */ + { 120, 7, 12, 0, 0, 120, 0, }, /* 725 */ + { 120, 26, 12, 0, 0, 120, 0, }, /* 726 */ + { 120, 15, 12, 0, 0, 120, 0, }, /* 727 */ + { 116, 7, 12, 0, 0, 116, 0, }, /* 728 */ + { 116, 15, 12, 0, 0, 116, 0, }, /* 729 */ + { 128, 7, 12, 0, 0, 128, 0, }, /* 730 */ + { 128, 15, 12, 0, 0, 128, 0, }, /* 731 */ + { 66, 7, 12, 0, 0, 66, 0, }, /* 732 */ + { 66, 15, 12, 0, 0, 66, 0, }, /* 733 */ + { 66, 21, 12, 0, 0, 66, 0, }, /* 734 */ + { 72, 7, 12, 0, 0, 72, 0, }, /* 735 */ + { 72, 21, 12, 0, 0, 72, 0, }, /* 736 */ + { 98, 7, 12, 0, 0, 98, 0, }, /* 737 */ + { 97, 7, 12, 0, 0, 97, 0, }, /* 738 */ + { 97, 15, 12, 0, 0, 97, 0, }, /* 739 */ + { 31, 7, 12, 0, 0, 31, 0, }, /* 740 */ + { 31, 12, 3, 0, 0, 31, 0, }, /* 741 */ + { 31, 15, 12, 0, 0, 31, 0, }, /* 742 */ + { 31, 21, 12, 0, 0, 31, 0, }, /* 743 */ + { 88, 7, 12, 0, 0, 88, 0, }, /* 744 */ + { 88, 15, 12, 0, 0, 88, 0, }, /* 745 */ + { 88, 21, 12, 0, 0, 88, 0, }, /* 746 */ + { 117, 7, 12, 0, 0, 117, 0, }, /* 747 */ + { 117, 15, 12, 0, 0, 117, 0, }, /* 748 */ + { 112, 7, 12, 0, 0, 112, 0, }, /* 749 */ + { 112, 26, 12, 0, 0, 112, 0, }, /* 750 */ + { 112, 12, 3, 0, 0, 112, 0, }, /* 751 */ + { 112, 15, 12, 0, 0, 112, 0, }, /* 752 */ + { 112, 21, 12, 0, 0, 112, 0, }, /* 753 */ + { 112, 21, 12, 0, 0, -76, 0, }, /* 754 */ + { 78, 7, 12, 0, 0, 78, 0, }, /* 755 */ + { 78, 21, 12, 0, 0, 78, 0, }, /* 756 */ + { 83, 7, 12, 0, 0, 83, 0, }, /* 757 */ + { 83, 15, 12, 0, 0, 83, 0, }, /* 758 */ + { 82, 7, 12, 0, 0, 82, 0, }, /* 759 */ + { 82, 15, 12, 0, 0, 82, 0, }, /* 760 */ + { 121, 7, 12, 0, 0, 121, 0, }, /* 761 */ + { 121, 21, 12, 0, 0, 121, 0, }, /* 762 */ + { 121, 15, 12, 0, 0, 121, 0, }, /* 763 */ + { 89, 7, 12, 0, 0, 89, 0, }, /* 764 */ + { 130, 9, 12, 0, 64, 130, 0, }, /* 765 */ + { 130, 5, 12, 0, -64, 130, 0, }, /* 766 */ + { 130, 15, 12, 0, 0, 130, 0, }, /* 767 */ + { 144, 7, 12, 0, 0, 144, 0, }, /* 768 */ + { 144, 12, 3, 0, 0, 144, 0, }, /* 769 */ + { 144, 13, 12, 0, 0, 144, 0, }, /* 770 */ + { 1, 15, 12, 0, 0, 1, 0, }, /* 771 */ + { 156, 7, 12, 0, 0, 156, 0, }, /* 772 */ + { 156, 12, 3, 0, 0, 156, 0, }, /* 773 */ + { 156, 17, 12, 0, 0, 156, 0, }, /* 774 */ + { 147, 7, 12, 0, 0, 147, 0, }, /* 775 */ + { 147, 15, 12, 0, 0, 147, 0, }, /* 776 */ + { 148, 7, 12, 0, 0, 148, 0, }, /* 777 */ + { 148, 12, 3, 0, 0, 148, 0, }, /* 778 */ + { 148, 15, 12, 0, 0, 148, 0, }, /* 779 */ + { 148, 21, 12, 0, 0, 148, 0, }, /* 780 */ + { 158, 7, 12, 0, 0, 158, 0, }, /* 781 */ + { 158, 12, 3, 0, 0, 158, 0, }, /* 782 */ + { 158, 21, 12, 0, 0, 158, 0, }, /* 783 */ + { 153, 7, 12, 0, 0, 153, 0, }, /* 784 */ + { 153, 15, 12, 0, 0, 153, 0, }, /* 785 */ + { 149, 7, 12, 0, 0, 149, 0, }, /* 786 */ + { 94, 10, 5, 0, 0, 94, 0, }, /* 787 */ + { 94, 12, 3, 0, 0, 94, 0, }, /* 788 */ + { 94, 7, 12, 0, 0, 94, 0, }, /* 789 */ + { 94, 21, 12, 0, 0, 94, 0, }, /* 790 */ + { 94, 15, 12, 0, 0, 94, 0, }, /* 791 */ + { 94, 13, 12, 0, 0, 94, 0, }, /* 792 */ + { 85, 12, 3, 0, 0, 85, 0, }, /* 793 */ + { 85, 10, 5, 0, 0, 85, 0, }, /* 794 */ + { 85, 7, 12, 0, 0, 85, 0, }, /* 795 */ + { 85, 21, 12, 0, 0, 85, 0, }, /* 796 */ + { 85, 1, 4, 0, 0, 85, 0, }, /* 797 */ + { 101, 7, 12, 0, 0, 101, 0, }, /* 798 */ + { 101, 13, 12, 0, 0, 101, 0, }, /* 799 */ + { 96, 12, 3, 0, 0, 96, 0, }, /* 800 */ + { 96, 7, 12, 0, 0, 96, 0, }, /* 801 */ + { 96, 10, 5, 0, 0, 96, 0, }, /* 802 */ + { 96, 13, 12, 0, 0, 96, 0, }, /* 803 */ + { 96, 21, 12, 0, 0, 96, 0, }, /* 804 */ + { 111, 7, 12, 0, 0, 111, 0, }, /* 805 */ + { 111, 12, 3, 0, 0, 111, 0, }, /* 806 */ + { 111, 21, 12, 0, 0, 111, 0, }, /* 807 */ + { 100, 12, 3, 0, 0, 100, 0, }, /* 808 */ + { 100, 10, 5, 0, 0, 100, 0, }, /* 809 */ + { 100, 7, 12, 0, 0, 100, 0, }, /* 810 */ + { 100, 7, 4, 0, 0, 100, 0, }, /* 811 */ + { 100, 21, 12, 0, 0, 100, 0, }, /* 812 */ + { 100, 13, 12, 0, 0, 100, 0, }, /* 813 */ + { 48, 15, 12, 0, 0, 48, 0, }, /* 814 */ + { 108, 7, 12, 0, 0, 108, 0, }, /* 815 */ + { 108, 10, 5, 0, 0, 108, 0, }, /* 816 */ + { 108, 12, 3, 0, 0, 108, 0, }, /* 817 */ + { 108, 21, 12, 0, 0, 108, 0, }, /* 818 */ + { 129, 7, 12, 0, 0, 129, 0, }, /* 819 */ + { 129, 21, 12, 0, 0, 129, 0, }, /* 820 */ + { 109, 7, 12, 0, 0, 109, 0, }, /* 821 */ + { 109, 12, 3, 0, 0, 109, 0, }, /* 822 */ + { 109, 10, 5, 0, 0, 109, 0, }, /* 823 */ + { 109, 13, 12, 0, 0, 109, 0, }, /* 824 */ + { 107, 12, 3, 0, 0, 107, 0, }, /* 825 */ + { 107, 12, 3, 0, 0, -55, 0, }, /* 826 */ + { 107, 10, 5, 0, 0, 107, 0, }, /* 827 */ + { 107, 10, 5, 0, 0, -55, 0, }, /* 828 */ + { 107, 7, 12, 0, 0, 107, 0, }, /* 829 */ + { 28, 12, 3, 0, 0, -55, 0, }, /* 830 */ + { 107, 10, 3, 0, 0, 107, 0, }, /* 831 */ + { 135, 7, 12, 0, 0, 135, 0, }, /* 832 */ + { 135, 10, 5, 0, 0, 135, 0, }, /* 833 */ + { 135, 12, 3, 0, 0, 135, 0, }, /* 834 */ + { 135, 21, 12, 0, 0, 135, 0, }, /* 835 */ + { 135, 13, 12, 0, 0, 135, 0, }, /* 836 */ + { 124, 7, 12, 0, 0, 124, 0, }, /* 837 */ + { 124, 10, 3, 0, 0, 124, 0, }, /* 838 */ + { 124, 10, 5, 0, 0, 124, 0, }, /* 839 */ + { 124, 12, 3, 0, 0, 124, 0, }, /* 840 */ + { 124, 21, 12, 0, 0, 124, 0, }, /* 841 */ + { 124, 13, 12, 0, 0, 124, 0, }, /* 842 */ + { 123, 7, 12, 0, 0, 123, 0, }, /* 843 */ + { 123, 10, 3, 0, 0, 123, 0, }, /* 844 */ + { 123, 10, 5, 0, 0, 123, 0, }, /* 845 */ + { 123, 12, 3, 0, 0, 123, 0, }, /* 846 */ + { 123, 21, 12, 0, 0, 123, 0, }, /* 847 */ + { 114, 7, 12, 0, 0, 114, 0, }, /* 848 */ + { 114, 10, 5, 0, 0, 114, 0, }, /* 849 */ + { 114, 12, 3, 0, 0, 114, 0, }, /* 850 */ + { 114, 21, 12, 0, 0, 114, 0, }, /* 851 */ + { 114, 13, 12, 0, 0, 114, 0, }, /* 852 */ + { 102, 7, 12, 0, 0, 102, 0, }, /* 853 */ + { 102, 12, 3, 0, 0, 102, 0, }, /* 854 */ + { 102, 10, 5, 0, 0, 102, 0, }, /* 855 */ + { 102, 21, 12, 0, 0, 102, 0, }, /* 856 */ + { 102, 13, 12, 0, 0, 102, 0, }, /* 857 */ + { 126, 7, 12, 0, 0, 126, 0, }, /* 858 */ + { 126, 12, 3, 0, 0, 126, 0, }, /* 859 */ + { 126, 10, 12, 0, 0, 126, 0, }, /* 860 */ + { 126, 10, 5, 0, 0, 126, 0, }, /* 861 */ + { 126, 13, 12, 0, 0, 126, 0, }, /* 862 */ + { 126, 15, 12, 0, 0, 126, 0, }, /* 863 */ + { 126, 21, 12, 0, 0, 126, 0, }, /* 864 */ + { 126, 26, 12, 0, 0, 126, 0, }, /* 865 */ + { 142, 7, 12, 0, 0, 142, 0, }, /* 866 */ + { 142, 10, 5, 0, 0, 142, 0, }, /* 867 */ + { 142, 12, 3, 0, 0, 142, 0, }, /* 868 */ + { 142, 21, 12, 0, 0, 142, 0, }, /* 869 */ + { 125, 9, 12, 0, 32, 125, 0, }, /* 870 */ + { 125, 5, 12, 0, -32, 125, 0, }, /* 871 */ + { 125, 13, 12, 0, 0, 125, 0, }, /* 872 */ + { 125, 15, 12, 0, 0, 125, 0, }, /* 873 */ + { 125, 7, 12, 0, 0, 125, 0, }, /* 874 */ + { 154, 7, 12, 0, 0, 154, 0, }, /* 875 */ + { 154, 10, 3, 0, 0, 154, 0, }, /* 876 */ + { 154, 10, 5, 0, 0, 154, 0, }, /* 877 */ + { 154, 12, 3, 0, 0, 154, 0, }, /* 878 */ + { 154, 7, 4, 0, 0, 154, 0, }, /* 879 */ + { 154, 21, 12, 0, 0, 154, 0, }, /* 880 */ + { 154, 13, 12, 0, 0, 154, 0, }, /* 881 */ + { 150, 7, 12, 0, 0, 150, 0, }, /* 882 */ + { 150, 10, 5, 0, 0, 150, 0, }, /* 883 */ + { 150, 12, 3, 0, 0, 150, 0, }, /* 884 */ + { 150, 21, 12, 0, 0, 150, 0, }, /* 885 */ + { 141, 7, 12, 0, 0, 141, 0, }, /* 886 */ + { 141, 12, 3, 0, 0, 141, 0, }, /* 887 */ + { 141, 10, 5, 0, 0, 141, 0, }, /* 888 */ + { 141, 7, 4, 0, 0, 141, 0, }, /* 889 */ + { 141, 21, 12, 0, 0, 141, 0, }, /* 890 */ + { 140, 7, 12, 0, 0, 140, 0, }, /* 891 */ + { 140, 12, 3, 0, 0, 140, 0, }, /* 892 */ + { 140, 10, 5, 0, 0, 140, 0, }, /* 893 */ + { 140, 7, 4, 0, 0, 140, 0, }, /* 894 */ + { 140, 21, 12, 0, 0, 140, 0, }, /* 895 */ + { 122, 7, 12, 0, 0, 122, 0, }, /* 896 */ + { 133, 7, 12, 0, 0, 133, 0, }, /* 897 */ + { 133, 10, 5, 0, 0, 133, 0, }, /* 898 */ + { 133, 12, 3, 0, 0, 133, 0, }, /* 899 */ + { 133, 21, 12, 0, 0, 133, 0, }, /* 900 */ + { 133, 13, 12, 0, 0, 133, 0, }, /* 901 */ + { 133, 15, 12, 0, 0, 133, 0, }, /* 902 */ + { 134, 21, 12, 0, 0, 134, 0, }, /* 903 */ + { 134, 7, 12, 0, 0, 134, 0, }, /* 904 */ + { 134, 12, 3, 0, 0, 134, 0, }, /* 905 */ + { 134, 10, 5, 0, 0, 134, 0, }, /* 906 */ + { 138, 7, 12, 0, 0, 138, 0, }, /* 907 */ + { 138, 12, 3, 0, 0, 138, 0, }, /* 908 */ + { 138, 7, 4, 0, 0, 138, 0, }, /* 909 */ + { 138, 13, 12, 0, 0, 138, 0, }, /* 910 */ + { 143, 7, 12, 0, 0, 143, 0, }, /* 911 */ + { 143, 10, 5, 0, 0, 143, 0, }, /* 912 */ + { 143, 12, 3, 0, 0, 143, 0, }, /* 913 */ + { 143, 13, 12, 0, 0, 143, 0, }, /* 914 */ + { 145, 7, 12, 0, 0, 145, 0, }, /* 915 */ + { 145, 12, 3, 0, 0, 145, 0, }, /* 916 */ + { 145, 10, 5, 0, 0, 145, 0, }, /* 917 */ + { 145, 21, 12, 0, 0, 145, 0, }, /* 918 */ + { 54, 15, 12, 0, 0, 54, 0, }, /* 919 */ + { 54, 21, 12, 0, 0, 54, 0, }, /* 920 */ + { 63, 7, 12, 0, 0, 63, 0, }, /* 921 */ + { 63, 14, 12, 0, 0, 63, 0, }, /* 922 */ + { 63, 21, 12, 0, 0, 63, 0, }, /* 923 */ + { 157, 7, 12, 0, 0, 157, 0, }, /* 924 */ + { 157, 21, 12, 0, 0, 157, 0, }, /* 925 */ + { 80, 7, 12, 0, 0, 80, 0, }, /* 926 */ + { 80, 1, 2, 0, 0, 80, 0, }, /* 927 */ + { 127, 7, 12, 0, 0, 127, 0, }, /* 928 */ + { 115, 7, 12, 0, 0, 115, 0, }, /* 929 */ + { 115, 13, 12, 0, 0, 115, 0, }, /* 930 */ + { 115, 21, 12, 0, 0, 115, 0, }, /* 931 */ + { 159, 7, 12, 0, 0, 159, 0, }, /* 932 */ + { 159, 13, 12, 0, 0, 159, 0, }, /* 933 */ + { 103, 7, 12, 0, 0, 103, 0, }, /* 934 */ + { 103, 12, 3, 0, 0, 103, 0, }, /* 935 */ + { 103, 21, 12, 0, 0, 103, 0, }, /* 936 */ + { 119, 7, 12, 0, 0, 119, 0, }, /* 937 */ + { 119, 12, 3, 0, 0, 119, 0, }, /* 938 */ + { 119, 21, 12, 0, 0, 119, 0, }, /* 939 */ + { 119, 26, 12, 0, 0, 119, 0, }, /* 940 */ + { 119, 6, 12, 0, 0, 119, 0, }, /* 941 */ + { 119, 13, 12, 0, 0, 119, 0, }, /* 942 */ + { 119, 15, 12, 0, 0, 119, 0, }, /* 943 */ + { 146, 9, 12, 0, 32, 146, 0, }, /* 944 */ + { 146, 5, 12, 0, -32, 146, 0, }, /* 945 */ + { 146, 15, 12, 0, 0, 146, 0, }, /* 946 */ + { 146, 21, 12, 0, 0, 146, 0, }, /* 947 */ + { 99, 7, 12, 0, 0, 99, 0, }, /* 948 */ + { 99, 12, 3, 0, 0, 99, 0, }, /* 949 */ + { 99, 10, 5, 0, 0, 99, 0, }, /* 950 */ + { 99, 6, 12, 0, 0, 99, 0, }, /* 951 */ + { 137, 6, 12, 0, 0, 137, 0, }, /* 952 */ + { 139, 6, 12, 0, 0, 139, 0, }, /* 953 */ + { 23, 21, 12, 0, 0, 23, 0, }, /* 954 */ + { 155, 12, 3, 0, 0, 155, 0, }, /* 955 */ + { 23, 10, 5, 0, 0, 23, 0, }, /* 956 */ + { 137, 7, 12, 0, 0, 137, 0, }, /* 957 */ + { 155, 7, 12, 0, 0, 155, 0, }, /* 958 */ + { 139, 7, 12, 0, 0, 139, 0, }, /* 959 */ + { 105, 7, 12, 0, 0, 105, 0, }, /* 960 */ + { 105, 26, 12, 0, 0, 105, 0, }, /* 961 */ + { 105, 12, 3, 0, 0, 105, 0, }, /* 962 */ + { 105, 21, 12, 0, 0, 105, 0, }, /* 963 */ + { 10, 1, 2, 0, 0, 105, 0, }, /* 964 */ + { 10, 10, 3, 0, 0, 10, 0, }, /* 965 */ + { 10, 10, 5, 0, 0, 10, 0, }, /* 966 */ + { 20, 12, 3, 0, 0, 20, 0, }, /* 967 */ + { 131, 26, 12, 0, 0, 131, 0, }, /* 968 */ + { 131, 12, 3, 0, 0, 131, 0, }, /* 969 */ + { 131, 21, 12, 0, 0, 131, 0, }, /* 970 */ + { 18, 12, 3, 0, 0, 18, 0, }, /* 971 */ + { 151, 7, 12, 0, 0, 151, 0, }, /* 972 */ + { 151, 12, 3, 0, 0, 151, 0, }, /* 973 */ + { 151, 6, 12, 0, 0, 151, 0, }, /* 974 */ + { 151, 13, 12, 0, 0, 151, 0, }, /* 975 */ + { 151, 26, 12, 0, 0, 151, 0, }, /* 976 */ + { 160, 7, 12, 0, 0, 160, 0, }, /* 977 */ + { 160, 12, 3, 0, 0, 160, 0, }, /* 978 */ + { 152, 7, 12, 0, 0, 152, 0, }, /* 979 */ + { 152, 12, 3, 0, 0, 152, 0, }, /* 980 */ + { 152, 13, 12, 0, 0, 152, 0, }, /* 981 */ + { 152, 23, 12, 0, 0, 152, 0, }, /* 982 */ + { 113, 7, 12, 0, 0, 113, 0, }, /* 983 */ + { 113, 15, 12, 0, 0, 113, 0, }, /* 984 */ + { 113, 12, 3, 0, 0, 113, 0, }, /* 985 */ + { 132, 9, 12, 0, 34, 132, 0, }, /* 986 */ + { 132, 5, 12, 0, -34, 132, 0, }, /* 987 */ + { 132, 12, 3, 0, 0, 132, 0, }, /* 988 */ + { 132, 6, 12, 0, 0, 132, 0, }, /* 989 */ + { 132, 13, 12, 0, 0, 132, 0, }, /* 990 */ + { 132, 21, 12, 0, 0, 132, 0, }, /* 991 */ + { 0, 2, 14, 0, 0, 0, 0, }, /* 992 */ + { 10, 26, 11, 0, 0, 10, 0, }, /* 993 */ + { 27, 26, 12, 0, 0, 27, 0, }, /* 994 */ + { 10, 24, 3, 0, 0, 10, 0, }, /* 995 */ + { 10, 1, 3, 0, 0, 10, 0, }, /* 996 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -1190,51 +1216,51 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,100, /* U+9800 */ -101,102,102,102,102,102,102,102,102,103,104,104,105,106,107,108, /* U+A000 */ -109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,117, /* U+A800 */ -118,119,120,121,122,123,117,118,119,120,121,122,123,117,118,119, /* U+B000 */ -120,121,122,123,117,118,119,120,121,122,123,117,118,119,120,121, /* U+B800 */ -122,123,117,118,119,120,121,122,123,117,118,119,120,121,122,123, /* U+C000 */ -117,118,119,120,121,122,123,117,118,119,120,121,122,123,117,118, /* U+C800 */ -119,120,121,122,123,117,118,119,120,121,122,123,117,118,119,124, /* U+D000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+D800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F000 */ -126,126, 98, 98,127,128,129,130,131,131,132,133,134,135,136,137, /* U+F800 */ -138,139,140,141,142,143,144,145,146,147,148,142,149,149,150,142, /* U+10000 */ -151,152,153,154,155,156,157,158,159,160,161,142,162,163,164,165, /* U+10800 */ -166,167,168,169,170,171,172,142,173,174,142,175,176,177,178,142, /* U+11000 */ -179,180,181,182,183,184,142,142,185,186,187,188,142,189,142,190, /* U+11800 */ -191,191,191,191,191,191,191,192,193,191,194,142,142,142,142,142, /* U+12000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+12800 */ -195,195,195,195,195,195,195,195,196,142,142,142,142,142,142,142, /* U+13000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+13800 */ -142,142,142,142,142,142,142,142,197,197,197,197,198,142,142,142, /* U+14000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+14800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+16000 */ -199,199,199,199,200,201,202,203,142,142,142,142,204,205,206,207, /* U+16800 */ -208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17000 */ -208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17800 */ -208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209, /* U+18000 */ -208,208,208,208,208,208,210,210,210,211,212,142,142,142,142,142, /* U+18800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A800 */ -213,214,215,216,216,217,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */ -142,142,142,142,142,142,142,142,218,219,142,142,142,142,142,142, /* U+1B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C800 */ - 71,220,221,222,223,224,225,142,226,227,228,229,230,231,232,233, /* U+1D000 */ -234,234,234,234,235,236,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */ -237,142,238,142,142,239,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */ -240,241,242,142,142,142,142,142,243,244,245,142,246,247,142,142, /* U+1E800 */ -248,249,250,251,252,253,254,255,254,254,256,254,257,258,259,260, /* U+1F000 */ -261,262,263,264,265,266, 71,267,253,253,253,253,253,253,253,268, /* U+1F800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9800 */ +100,101,101,101,101,101,101,101,101,102,103,103,104,105,106,107, /* U+A000 */ +108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,116, /* U+A800 */ +117,118,119,120,121,122,116,117,118,119,120,121,122,116,117,118, /* U+B000 */ +119,120,121,122,116,117,118,119,120,121,122,116,117,118,119,120, /* U+B800 */ +121,122,116,117,118,119,120,121,122,116,117,118,119,120,121,122, /* U+C000 */ +116,117,118,119,120,121,122,116,117,118,119,120,121,122,116,117, /* U+C800 */ +118,119,120,121,122,116,117,118,119,120,121,122,116,117,118,123, /* U+D000 */ +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, /* U+D800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F000 */ +125,125, 98, 98,126,127,128,129,130,130,131,132,133,134,135,136, /* U+F800 */ +137,138,139,140,141,142,143,144,145,146,147,148,149,149,150,151, /* U+10000 */ +152,153,154,155,156,157,158,159,160,161,162,141,163,164,165,166, /* U+10800 */ +167,168,169,170,171,172,173,141,174,175,141,176,177,178,179,141, /* U+11000 */ +180,181,182,183,184,185,141,141,186,187,188,189,141,190,141,191, /* U+11800 */ +192,192,192,192,192,192,192,193,194,192,195,141,141,141,141,141, /* U+12000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,196, /* U+12800 */ +197,197,197,197,197,197,197,197,198,141,141,141,141,141,141,141, /* U+13000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+13800 */ +141,141,141,141,141,141,141,141,199,199,199,199,200,141,141,141, /* U+14000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+14800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+16000 */ +201,201,201,201,202,203,204,205,141,141,141,141,206,207,208,209, /* U+16800 */ +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17000 */ +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17800 */ +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211, /* U+18000 */ +210,210,210,210,210,210,212,212,212,213,214,141,141,141,141,141, /* U+18800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,215, /* U+1A800 */ +216,217,218,219,219,220,141,141,141,141,141,141,141,141,141,141, /* U+1B000 */ +141,141,141,141,141,141,141,141,221,222,141,141,141,141,141,141, /* U+1B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,223,224, /* U+1C800 */ + 71,225,226,227,228,229,230,141,231,232,233,234,235,236,237,238, /* U+1D000 */ +239,239,239,239,240,241,141,141,141,141,141,141,141,141,242,141, /* U+1D800 */ +243,141,244,141,141,245,141,141,141,141,141,141,141,141,141,246, /* U+1E000 */ +247,248,249,141,141,141,141,141,250,251,252,141,253,254,141,141, /* U+1E800 */ +255,256,257,258,259,260,261,262,261,261,263,261,264,265,266,267, /* U+1F000 */ +268,269,270,261,271,272, 71,273,260,260,260,260,260,260,260,274, /* U+1F800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */ @@ -1255,469 +1281,469 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,269, 98, 98, /* U+2A000 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,275, 98, 98, /* U+2A000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,270, 98, /* U+2B000 */ -271, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,276, 98, /* U+2B000 */ +277, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,272, 98, 98, /* U+2C800 */ + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,278, 98, 98, /* U+2C800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */ - 98, 98, 98, 98, 98, 98, 98,273,142,142,142,142,142,142,142,142, /* U+2E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+2F000 */ - 98, 98, 98, 98,274,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */ + 98, 98, 98, 98, 98, 98, 98,279,141,141,141,141,141,141,141,141, /* U+2E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+2F000 */ + 98, 98, 98, 98,280,141,141,141,141,141,141,141,141,141,141,141, /* U+2F800 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */ - 98, 98, 98, 98, 98, 98,275,142,142,142,142,142,142,142,142,142, /* U+31000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF800 */ -276,277,278,279,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0000 */ -277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE800 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF000 */ -142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FF000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+FF800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E800 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10F000 */ -126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+10F800 */ + 98, 98, 98, 98, 98, 98,281,141,141,141,141,141,141,141,141,141, /* U+31000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+31800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF800 */ +282,283,284,285,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0000 */ +283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE800 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF000 */ +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FF000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+FF800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E800 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10F000 */ +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */ /* block 0 */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1840,463 +1866,463 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ /* block 12 */ 215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221, -222,222,222,222,222,222,222,222,222,222,222,220,223,120,218,220, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -225,224,224,224,224,224,224,224,224,224,224,226,226,226,226,226, -226,226,226,226,226,226,222,222,222,222,222,222,222,222,222,222, -227,227,227,227,227,227,227,227,227,227,218,218,218,218,224,224, -226,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +222,222,222,222,222,222,222,222,222,222,222,220,223,218,218,224, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227, +227,227,227,227,227,227,222,222,222,222,222,222,222,222,222,222, +228,228,228,228,228,228,228,228,228,228,218,218,218,218,225,225, +227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 13 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,228,224,222,222,222,222,222,222,222,216,221,222, -222,222,222,222,222,229,229,222,222,221,222,222,222,222,224,224, -230,230,230,230,230,230,230,230,230,230,224,224,224,221,221,224, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,229,225,222,222,222,222,222,222,222,216,221,222, +222,222,222,222,222,230,230,222,222,221,222,222,222,222,225,225, +231,231,231,231,231,231,231,231,231,231,225,225,225,221,221,225, /* block 14 */ -231,231,231,231,231,231,231,231,231,231,231,231,231,231,120,232, -233,234,233,233,233,233,233,233,233,233,233,233,233,233,233,233, -233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233, +234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234, 234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, -234,234,234,234,234,234,234,234,234,234,234,120,120,233,233,233, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 15 */ -235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, -235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, -235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236, -236,235,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238, -238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, -238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239, -239,239,239,239,240,240,241,242,242,242,240,120,120,239,243,243, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237, +237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240, +240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244, /* block 16 */ -244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, -244,244,244,244,244,244,245,245,245,245,246,245,245,245,245,245, -245,245,245,245,246,245,245,245,246,245,245,245,245,245,120,120, -247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,120, -248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, -248,248,248,248,248,248,248,248,248,249,249,249,120,120,250,120, -233,233,233,233,233,233,233,233,233,233,233,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246, +246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,250,250,250,120,120,251,120, +234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 17 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120, -120,120,120,222,222,222,222,222,222,222,222,222,222,222,222,222, +225,225,225,225,225,225,225,225,252,225,225,225,225,225,225,120, +215,215,120,120,120,120,120,120,222,222,222,222,222,222,222,222, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,230,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, 222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222, 222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, /* block 18 */ -251,251,251,252,253,253,253,253,253,253,253,253,253,253,253,253, -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, -253,253,253,253,253,253,253,253,253,253,251,252,251,253,252,252, -252,251,251,251,251,251,251,251,251,252,252,252,252,251,252,252, -253,254,255,113,113,251,251,251,253,253,253,253,253,253,253,253, -253,253,251,251,256,257,258,258,258,258,258,258,258,258,258,258, -259,260,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,254,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,253,254,253,255,254,254, +254,253,253,253,253,253,253,253,253,254,254,254,254,253,254,254, +255,256,257,113,113,253,253,253,255,255,255,255,255,255,255,255, +255,255,253,253,258,259,260,260,260,260,260,260,260,260,260,260, +261,262,255,255,255,255,255,255,255,255,255,255,255,255,255,255, /* block 19 */ -261,262,263,263,120,261,261,261,261,261,261,261,261,120,120,261, -261,120,120,261,261,261,261,261,261,261,261,261,261,261,261,261, -261,261,261,261,261,261,261,261,261,120,261,261,261,261,261,261, -261,120,261,120,120,120,261,261,261,261,120,120,262,261,264,263, -263,262,262,262,262,120,120,263,263,120,120,263,263,262,261,120, -120,120,120,120,120,120,120,264,120,120,120,120,261,261,120,261, -261,261,262,262,120,120,265,265,265,265,265,265,265,265,265,265, -261,261,266,266,267,267,267,267,267,267,268,266,261,269,262,120, +263,264,265,265,120,263,263,263,263,263,263,263,263,120,120,263, +263,120,120,263,263,263,263,263,263,263,263,263,263,263,263,263, +263,263,263,263,263,263,263,263,263,120,263,263,263,263,263,263, +263,120,263,120,120,120,263,263,263,263,120,120,264,263,266,265, +265,264,264,264,264,120,120,265,265,120,120,265,265,264,263,120, +120,120,120,120,120,120,120,266,120,120,120,120,263,263,120,263, +263,263,264,264,120,120,267,267,267,267,267,267,267,267,267,267, +263,263,268,268,269,269,269,269,269,269,270,268,263,271,264,120, /* block 20 */ -120,270,270,271,120,272,272,272,272,272,272,120,120,120,120,272, -272,120,120,272,272,272,272,272,272,272,272,272,272,272,272,272, -272,272,272,272,272,272,272,272,272,120,272,272,272,272,272,272, -272,120,272,272,120,272,272,120,272,272,120,120,270,120,271,271, -271,270,270,120,120,120,120,270,270,120,120,270,270,270,120,120, -120,270,120,120,120,120,120,120,120,272,272,272,272,120,272,120, -120,120,120,120,120,120,273,273,273,273,273,273,273,273,273,273, -270,270,272,272,272,270,274,120,120,120,120,120,120,120,120,120, +120,272,272,273,120,274,274,274,274,274,274,120,120,120,120,274, +274,120,120,274,274,274,274,274,274,274,274,274,274,274,274,274, +274,274,274,274,274,274,274,274,274,120,274,274,274,274,274,274, +274,120,274,274,120,274,274,120,274,274,120,120,272,120,273,273, +273,272,272,120,120,120,120,272,272,120,120,272,272,272,120,120, +120,272,120,120,120,120,120,120,120,274,274,274,274,120,274,120, +120,120,120,120,120,120,275,275,275,275,275,275,275,275,275,275, +272,272,274,274,274,272,276,120,120,120,120,120,120,120,120,120, /* block 21 */ -120,275,275,276,120,277,277,277,277,277,277,277,277,277,120,277, -277,277,120,277,277,277,277,277,277,277,277,277,277,277,277,277, -277,277,277,277,277,277,277,277,277,120,277,277,277,277,277,277, -277,120,277,277,120,277,277,277,277,277,120,120,275,277,276,276, -276,275,275,275,275,275,120,275,275,276,120,276,276,275,120,120, -277,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -277,277,275,275,120,120,278,278,278,278,278,278,278,278,278,278, -279,280,120,120,120,120,120,120,120,277,275,275,275,275,275,275, +120,277,277,278,120,279,279,279,279,279,279,279,279,279,120,279, +279,279,120,279,279,279,279,279,279,279,279,279,279,279,279,279, +279,279,279,279,279,279,279,279,279,120,279,279,279,279,279,279, +279,120,279,279,120,279,279,279,279,279,120,120,277,279,278,278, +278,277,277,277,277,277,120,277,277,278,120,278,278,277,120,120, +279,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +279,279,277,277,120,120,280,280,280,280,280,280,280,280,280,280, +281,282,120,120,120,120,120,120,120,279,277,277,277,277,277,277, /* block 22 */ -120,281,282,282,120,283,283,283,283,283,283,283,283,120,120,283, -283,120,120,283,283,283,283,283,283,283,283,283,283,283,283,283, -283,283,283,283,283,283,283,283,283,120,283,283,283,283,283,283, -283,120,283,283,120,283,283,283,283,283,120,120,281,283,284,281, -282,281,281,281,281,120,120,282,282,120,120,282,282,281,120,120, -120,120,120,120,120,281,281,284,120,120,120,120,283,283,120,283, -283,283,281,281,120,120,285,285,285,285,285,285,285,285,285,285, -286,283,287,287,287,287,287,287,120,120,120,120,120,120,120,120, +120,283,284,284,120,285,285,285,285,285,285,285,285,120,120,285, +285,120,120,285,285,285,285,285,285,285,285,285,285,285,285,285, +285,285,285,285,285,285,285,285,285,120,285,285,285,285,285,285, +285,120,285,285,120,285,285,285,285,285,120,120,283,285,286,283, +284,283,283,283,283,120,120,284,284,120,120,284,284,283,120,120, +120,120,120,120,120,283,283,286,120,120,120,120,285,285,120,285, +285,285,283,283,120,120,287,287,287,287,287,287,287,287,287,287, +288,285,289,289,289,289,289,289,120,120,120,120,120,120,120,120, /* block 23 */ -120,120,288,289,120,289,289,289,289,289,289,120,120,120,289,289, -289,120,289,289,289,289,120,120,120,289,289,120,289,120,289,289, -120,120,120,289,289,120,120,120,289,289,289,120,120,120,289,289, -289,289,289,289,289,289,289,289,289,289,120,120,120,120,290,291, -288,291,291,120,120,120,291,291,291,120,291,291,291,288,120,120, -289,120,120,120,120,120,120,290,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,292,292,292,292,292,292,292,292,292,292, -293,293,293,294,295,295,295,295,295,296,295,120,120,120,120,120, +120,120,290,291,120,291,291,291,291,291,291,120,120,120,291,291, +291,120,291,291,291,291,120,120,120,291,291,120,291,120,291,291, +120,120,120,291,291,120,120,120,291,291,291,120,120,120,291,291, +291,291,291,291,291,291,291,291,291,291,120,120,120,120,292,293, +290,293,293,120,120,120,293,293,293,120,293,293,293,290,120,120, +291,120,120,120,120,120,120,292,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,294,294,294,294,294,294,294,294,294,294, +295,295,295,296,297,297,297,297,297,298,297,120,120,120,120,120, /* block 24 */ -297,298,298,298,297,299,299,299,299,299,299,299,299,120,299,299, -299,120,299,299,299,299,299,299,299,299,299,299,299,299,299,299, -299,299,299,299,299,299,299,299,299,120,299,299,299,299,299,299, -299,299,299,299,299,299,299,299,299,299,120,120,120,299,297,297, -297,298,298,298,298,120,297,297,297,120,297,297,297,297,120,120, -120,120,120,120,120,297,297,120,299,299,299,120,120,120,120,120, -299,299,297,297,120,120,300,300,300,300,300,300,300,300,300,300, -120,120,120,120,120,120,120,301,302,302,302,302,302,302,302,303, +299,300,300,300,299,301,301,301,301,301,301,301,301,120,301,301, +301,120,301,301,301,301,301,301,301,301,301,301,301,301,301,301, +301,301,301,301,301,301,301,301,301,120,301,301,301,301,301,301, +301,301,301,301,301,301,301,301,301,301,120,120,299,301,299,299, +299,300,300,300,300,120,299,299,299,120,299,299,299,299,120,120, +120,120,120,120,120,299,299,120,301,301,301,120,120,301,120,120, +301,301,299,299,120,120,302,302,302,302,302,302,302,302,302,302, +120,120,120,120,120,120,120,303,304,304,304,304,304,304,304,305, /* block 25 */ -304,305,306,306,307,304,304,304,304,304,304,304,304,120,304,304, -304,120,304,304,304,304,304,304,304,304,304,304,304,304,304,304, -304,304,304,304,304,304,304,304,304,120,304,304,304,304,304,304, -304,304,304,304,120,304,304,304,304,304,120,120,305,304,306,305, -306,306,308,306,306,120,305,306,306,120,306,306,305,305,120,120, -120,120,120,120,120,308,308,120,120,120,120,120,120,120,304,120, -304,304,305,305,120,120,309,309,309,309,309,309,309,309,309,309, -120,304,304,120,120,120,120,120,120,120,120,120,120,120,120,120, +306,307,308,308,309,306,306,306,306,306,306,306,306,120,306,306, +306,120,306,306,306,306,306,306,306,306,306,306,306,306,306,306, +306,306,306,306,306,306,306,306,306,120,306,306,306,306,306,306, +306,306,306,306,120,306,306,306,306,306,120,120,307,306,308,307, +308,308,310,308,308,120,307,308,308,120,308,308,307,307,120,120, +120,120,120,120,120,310,310,120,120,120,120,120,120,306,306,120, +306,306,307,307,120,120,311,311,311,311,311,311,311,311,311,311, +120,306,306,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 26 */ -310,310,311,311,312,312,312,312,312,312,312,312,312,120,312,312, -312,120,312,312,312,312,312,312,312,312,312,312,312,312,312,312, -312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312, -312,312,312,312,312,312,312,312,312,312,312,310,310,312,313,311, -311,310,310,310,310,120,311,311,311,120,311,311,311,310,314,315, -120,120,120,120,312,312,312,313,316,316,316,316,316,316,316,312, -312,312,310,310,120,120,317,317,317,317,317,317,317,317,317,317, -316,316,316,316,316,316,316,316,316,315,312,312,312,312,312,312, +312,312,313,313,314,314,314,314,314,314,314,314,314,120,314,314, +314,120,314,314,314,314,314,314,314,314,314,314,314,314,314,314, +314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314, +314,314,314,314,314,314,314,314,314,314,314,312,312,314,315,313, +313,312,312,312,312,120,313,313,313,120,313,313,313,312,316,317, +120,120,120,120,314,314,314,315,318,318,318,318,318,318,318,314, +314,314,312,312,120,120,319,319,319,319,319,319,319,319,319,319, +318,318,318,318,318,318,318,318,318,317,314,314,314,314,314,314, /* block 27 */ -120,318,319,319,120,320,320,320,320,320,320,320,320,320,320,320, -320,320,320,320,320,320,320,120,120,120,320,320,320,320,320,320, -320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320, -320,320,120,320,320,320,320,320,320,320,320,320,120,320,120,120, -320,320,320,320,320,320,320,120,120,120,318,120,120,120,120,321, -319,319,318,318,318,120,318,120,319,319,319,319,319,319,319,321, -120,120,120,120,120,120,322,322,322,322,322,322,322,322,322,322, -120,120,319,319,323,120,120,120,120,120,120,120,120,120,120,120, +120,320,321,321,120,322,322,322,322,322,322,322,322,322,322,322, +322,322,322,322,322,322,322,120,120,120,322,322,322,322,322,322, +322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322, +322,322,120,322,322,322,322,322,322,322,322,322,120,322,120,120, +322,322,322,322,322,322,322,120,120,120,320,120,120,120,120,323, +321,321,320,320,320,120,320,120,321,321,321,321,321,321,321,323, +120,120,120,120,120,120,324,324,324,324,324,324,324,324,324,324, +120,120,321,321,325,120,120,120,120,120,120,120,120,120,120,120, /* block 28 */ -120,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, -324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, -324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324, -324,325,324,326,325,325,325,325,325,325,325,120,120,120,120, 6, -324,324,324,324,324,324,327,325,325,325,325,325,325,325,325,328, -329,329,329,329,329,329,329,329,329,329,328,328,120,120,120,120, +120,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, +326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, +326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, +326,327,326,328,327,327,327,327,327,327,327,120,120,120,120, 6, +326,326,326,326,326,326,329,327,327,327,327,327,327,327,327,330, +331,331,331,331,331,331,331,331,331,331,330,330,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 29 */ -120,330,330,120,330,120,330,330,330,330,330,120,330,330,330,330, -330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330, -330,330,330,330,120,330,120,330,330,330,330,330,330,330,330,330, -330,331,330,332,331,331,331,331,331,331,331,331,331,330,120,120, -330,330,330,330,330,120,333,120,331,331,331,331,331,331,120,120, -334,334,334,334,334,334,334,334,334,334,120,120,330,330,330,330, +120,332,332,120,332,120,332,332,332,332,332,120,332,332,332,332, +332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332, +332,332,332,332,120,332,120,332,332,332,332,332,332,332,332,332, +332,333,332,334,333,333,333,333,333,333,333,333,333,332,120,120, +332,332,332,332,332,120,335,120,333,333,333,333,333,333,120,120, +336,336,336,336,336,336,336,336,336,336,120,120,332,332,332,332, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 30 */ -335,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337, -337,337,337,336,337,336,336,336,338,338,336,336,336,336,336,336, -339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340, -340,340,340,340,336,338,336,338,336,338,341,342,341,342,343,343, -335,335,335,335,335,335,335,335,120,335,335,335,335,335,335,335, -335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335, -335,335,335,335,335,335,335,335,335,335,335,335,335,120,120,120, -120,338,338,338,338,338,338,338,338,338,338,338,338,338,338,343, +337,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339, +339,339,339,338,339,338,338,338,340,340,338,338,338,338,338,338, +341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342, +342,342,342,342,338,340,338,340,338,340,343,344,343,344,345,345, +337,337,337,337,337,337,337,337,120,337,337,337,337,337,337,337, +337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337, +337,337,337,337,337,337,337,337,337,337,337,337,337,120,120,120, +120,340,340,340,340,340,340,340,340,340,340,340,340,340,340,345, /* block 31 */ -338,338,338,338,338,337,338,338,335,335,335,335,335,338,338,338, -338,338,338,338,338,338,338,338,120,338,338,338,338,338,338,338, -338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, -338,338,338,338,338,338,338,338,338,338,338,338,338,120,336,336, -336,336,336,336,336,336,338,336,336,336,336,336,336,120,336,336, -337,337,337,337,337, 20, 20, 20, 20,337,337,120,120,120,120,120, +340,340,340,340,340,339,340,340,337,337,337,337,337,340,340,340, +340,340,340,340,340,340,340,340,120,340,340,340,340,340,340,340, +340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +340,340,340,340,340,340,340,340,340,340,340,340,340,120,338,338, +338,338,338,338,338,338,340,338,338,338,338,338,338,120,338,338, +339,339,339,339,339, 20, 20, 20, 20,339,339,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 32 */ -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -344,344,344,344,344,344,344,344,344,344,344,345,345,346,346,346, -346,347,346,346,346,346,346,346,345,346,346,347,347,346,346,344, -348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349, -344,344,344,344,344,344,347,347,346,346,344,344,344,344,346,346, -346,344,345,345,345,344,344,345,345,345,345,345,345,345,344,344, -344,346,346,346,346,344,344,344,344,344,344,344,344,344,344,344, +346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, +346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, +346,346,346,346,346,346,346,346,346,346,346,347,347,348,348,348, +348,349,348,348,348,348,348,348,347,348,348,349,349,348,348,346, +350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351, +346,346,346,346,346,346,349,349,348,348,346,346,346,346,348,348, +348,346,347,347,347,346,346,347,347,347,347,347,347,347,346,346, +346,348,348,348,348,346,346,346,346,346,346,346,346,346,346,346, /* block 33 */ -344,344,346,345,347,346,346,345,345,345,345,345,345,346,344,345, -350,350,350,350,350,350,350,350,350,350,345,345,345,346,351,351, -352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352, -352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352, -352,352,352,352,352,352,120,352,120,120,120,120,120,352,120,120, -353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353, -353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353, -353,353,353,353,353,353,353,353,353,353,353,354,355,353,353,353, +346,346,348,347,349,348,348,347,347,347,347,347,347,348,346,347, +352,352,352,352,352,352,352,352,352,352,347,347,347,348,353,353, +354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, +354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, +354,354,354,354,354,354,120,354,120,120,120,120,120,354,120,120, +355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355, +355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355, +355,355,355,355,355,355,355,355,355,355,355,356,357,355,355,355, /* block 34 */ -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, - -/* block 35 */ -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, - -/* block 36 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120, -359,359,359,359,359,359,359,120,359,120,359,359,359,359,120,120, + +/* block 35 */ 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, 359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, + +/* block 36 */ +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120, +361,361,361,361,361,361,361,120,361,120,361,361,361,361,120,120, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, /* block 37 */ -359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,120, -359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,120, +361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, /* block 38 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,120,120,360,360,360, -361,361,361,361,361,361,361,361,361,362,362,362,362,362,362,362, -362,362,362,362,362,362,362,362,362,362,362,362,362,120,120,120, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,361,361,361,361,120,120,362,362,362, +363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364, +364,364,364,364,364,364,364,364,364,364,364,364,364,120,120,120, /* block 39 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -363,363,363,363,363,363,363,363,363,363,120,120,120,120,120,120, -364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, -364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, -364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, -364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, -364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364, -365,365,365,365,365,365,120,120,366,366,366,366,366,366,120,120, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +365,365,365,365,365,365,365,365,365,365,120,120,120,120,120,120, +366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, +366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, +366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, +366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, +366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, +367,367,367,367,367,367,120,120,368,368,368,368,368,368,120,120, /* block 40 */ -367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, /* block 41 */ -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, /* block 42 */ -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,369,370,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,371,372,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, /* block 43 */ -371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372, -372,372,372,372,372,372,372,372,372,372,372,373,374,120,120,120, -375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, -375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, -375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, -375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, -375,375,375,375,375,375,375,375,375,375,375, 5, 5, 5,376,376, -376,375,375,375,375,375,375,375,375,120,120,120,120,120,120,120, +373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374, +374,374,374,374,374,374,374,374,374,374,374,375,376,120,120,120, +377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, +377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, +377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, +377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, +377,377,377,377,377,377,377,377,377,377,377, 5, 5, 5,378,378, +378,377,377,377,377,377,377,377,377,120,120,120,120,120,120,120, /* block 44 */ -377,377,377,377,377,377,377,377,377,377,377,377,377,120,377,377, -377,377,378,378,378,120,120,120,120,120,120,120,120,120,120,120, 379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379, -379,379,380,380,380,381,381,120,120,120,120,120,120,120,120,120, +379,379,380,380,380,381,120,120,120,120,120,120,120,120,120,379, 382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382, -382,382,383,383,120,120,120,120,120,120,120,120,120,120,120,120, -384,384,384,384,384,384,384,384,384,384,384,384,384,120,384,384, -384,120,385,385,120,120,120,120,120,120,120,120,120,120,120,120, +382,382,383,383,384,385,385,120,120,120,120,120,120,120,120,120, +386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, +386,386,387,387,120,120,120,120,120,120,120,120,120,120,120,120, +388,388,388,388,388,388,388,388,388,388,388,388,388,120,388,388, +388,120,389,389,120,120,120,120,120,120,120,120,120,120,120,120, /* block 45 */ -386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, -386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, -386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, -386,386,386,386,387,387,388,387,387,387,387,387,387,387,388,388, -388,388,388,388,388,388,387,388,388,387,387,387,387,387,387,387, -387,387,387,387,389,389,389,390,389,389,389,391,386,387,120,120, -392,392,392,392,392,392,392,392,392,392,120,120,120,120,120,120, -393,393,393,393,393,393,393,393,393,393,120,120,120,120,120,120, +390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, +390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, +390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, +390,390,390,390,391,391,392,391,391,391,391,391,391,391,392,392, +392,392,392,392,392,392,391,392,392,391,391,391,391,391,391,391, +391,391,391,391,393,393,393,394,393,393,393,395,390,391,120,120, +396,396,396,396,396,396,396,396,396,396,120,120,120,120,120,120, +397,397,397,397,397,397,397,397,397,397,120,120,120,120,120,120, /* block 46 */ -394,394,395,395,394,395,396,394,394,394,394,397,397,397,398,120, -399,399,399,399,399,399,399,399,399,399,120,120,120,120,120,120, -400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,401,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,120,120,120,120,120,120,120, +398,398,399,399,398,399,400,398,398,398,398,401,401,401,402,401, +403,403,403,403,403,403,403,403,403,403,120,120,120,120,120,120, +404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,405,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,120,120,120,120,120,120,120, /* block 47 */ -400,400,400,400,400,397,397,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, -400,400,400,400,400,400,400,400,400,397,400,120,120,120,120,120, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368, -368,368,368,368,368,368,120,120,120,120,120,120,120,120,120,120, +404,404,404,404,404,401,401,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, +404,404,404,404,404,404,404,404,404,401,404,120,120,120,120,120, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +370,370,370,370,370,370,120,120,120,120,120,120,120,120,120,120, /* block 48 */ -402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402, -402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,120, -403,403,403,404,404,404,404,403,403,404,404,404,120,120,120,120, -404,404,403,404,404,404,404,404,404,403,403,403,120,120,120,120, -405,120,120,120,406,406,407,407,407,407,407,407,407,407,407,407, -408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408, -408,408,408,408,408,408,408,408,408,408,408,408,408,408,120,120, -408,408,408,408,408,120,120,120,120,120,120,120,120,120,120,120, +406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406, +406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,120, +407,407,407,408,408,408,408,407,407,408,408,408,120,120,120,120, +408,408,407,408,408,408,408,408,408,407,407,407,120,120,120,120, +409,120,120,120,410,410,411,411,411,411,411,411,411,411,411,411, +412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412, +412,412,412,412,412,412,412,412,412,412,412,412,412,412,120,120, +412,412,412,412,412,120,120,120,120,120,120,120,120,120,120,120, /* block 49 */ -409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, -409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, -409,409,409,409,409,409,409,409,409,409,409,409,120,120,120,120, -409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409, -409,409,409,409,409,409,409,409,409,409,120,120,120,120,120,120, -410,410,410,410,410,410,410,410,410,410,411,120,120,120,412,412, 413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, 413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, +413,413,413,413,413,413,413,413,413,413,413,413,120,120,120,120, +413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, +413,413,413,413,413,413,413,413,413,413,120,120,120,120,120,120, +414,414,414,414,414,414,414,414,414,414,415,120,120,120,416,416, +417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417, +417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417, /* block 50 */ -414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414, -414,414,414,414,414,414,414,415,415,416,416,415,120,120,417,417, -418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, -418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, 418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, -418,418,418,418,418,419,420,419,420,420,420,420,420,420,420,120, -420,421,420,421,421,420,420,420,420,420,420,420,420,419,419,419, -419,419,419,420,420,420,420,420,420,420,420,420,420,120,120,420, +418,418,418,418,418,418,418,419,419,420,420,419,120,120,421,421, +422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, +422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, +422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, +422,422,422,422,422,423,424,423,424,424,424,424,424,424,424,120, +424,425,424,425,425,424,424,424,424,424,424,424,424,423,423,423, +423,423,423,424,424,424,424,424,424,424,424,424,424,120,120,424, /* block 51 */ -422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120, -422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120, -423,423,423,423,423,423,423,424,423,423,423,423,423,423,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,425,113, -113,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120, +426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120, +427,427,427,427,427,427,427,428,427,427,427,427,427,427,120,120, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,429,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 52 */ -426,426,426,426,427,428,428,428,428,428,428,428,428,428,428,428, -428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, -428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, -428,428,428,428,426,429,426,426,426,426,426,427,426,427,427,427, -427,427,426,427,427,428,428,428,428,428,428,428,120,120,120,120, -430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431, -431,432,432,432,432,432,432,432,432,432,432,426,426,426,426,426, -426,426,426,426,432,432,432,432,432,432,432,432,432,120,120,120, +430,430,430,430,431,432,432,432,432,432,432,432,432,432,432,432, +432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432, +432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432, +432,432,432,432,430,433,430,430,430,430,430,431,430,431,431,431, +431,431,430,431,431,432,432,432,432,432,432,432,432,120,120,120, +434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435, +435,436,436,436,436,436,436,436,436,436,436,430,430,430,430,430, +430,430,430,430,436,436,436,436,436,436,436,436,436,435,435,120, /* block 53 */ -433,433,434,435,435,435,435,435,435,435,435,435,435,435,435,435, -435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435, -435,434,433,433,433,433,434,434,433,433,434,433,433,433,435,435, -436,436,436,436,436,436,436,436,436,436,435,435,435,435,435,435, -437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, -437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, -437,437,437,437,437,437,438,439,438,438,439,439,439,438,439,438, -438,438,439,439,120,120,120,120,120,120,120,120,440,440,440,440, - -/* block 54 */ +437,437,438,439,439,439,439,439,439,439,439,439,439,439,439,439, +439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439, +439,438,437,437,437,437,438,438,437,437,438,437,437,437,439,439, +440,440,440,440,440,440,440,440,440,440,439,439,439,439,439,439, 441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, 441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, -441,441,441,441,442,442,442,442,442,442,442,442,443,443,443,443, -443,443,443,443,442,442,443,443,120,120,120,444,444,444,444,444, -445,445,445,445,445,445,445,445,445,445,120,120,120,441,441,441, -446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447, -447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447, -447,447,447,447,447,447,447,447,448,448,448,448,448,448,449,449, +441,441,441,441,441,441,442,443,442,442,443,443,443,442,443,442, +442,442,443,443,120,120,120,120,120,120,120,120,444,444,444,444, + +/* block 54 */ +445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445, +445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445, +445,445,445,445,446,446,446,446,446,446,446,446,447,447,447,447, +447,447,447,447,446,446,447,447,120,120,120,448,448,448,448,448, +449,449,449,449,449,449,449,449,449,449,120,120,120,445,445,445, +450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451, +451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451, +451,451,451,451,451,451,451,451,452,452,452,452,452,452,453,453, /* block 55 */ -450,451,452,453,454,455,456,457,458,120,120,120,120,120,120,120, -459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, -459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, -459,459,459,459,459,459,459,459,459,459,459,120,120,459,459,459, -460,460,460,460,460,460,460,460,120,120,120,120,120,120,120,120, -461,462,461,463,462,464,464,465,464,465,466,462,465,465,462,462, -465,467,462,462,462,462,462,462,462,468,469,470,470,464,470,470, -470,470,471,472,473,469,469,474,475,475,476,120,120,120,120,120, +454,455,456,457,458,459,460,461,462,120,120,120,120,120,120,120, +463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463, +463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463, +463,463,463,463,463,463,463,463,463,463,463,120,120,463,463,463, +464,464,464,464,464,464,464,464,120,120,120,120,120,120,120,120, +465,466,465,467,466,468,468,469,468,469,470,466,469,469,466,466, +469,471,466,466,466,466,466,466,466,472,473,474,474,468,474,474, +474,474,475,476,477,473,473,478,479,479,480,120,120,120,120,120, /* block 56 */ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35,128,128,128,128,128,477,110,110,110,110, + 35, 35, 35, 35, 35, 35,128,128,128,128,128,481,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121, 121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35,478,479, 35, 35, 35,480, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35,482,483, 35, 35, 35,484, 35, 35, /* block 57 */ - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,481, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,485, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121, 114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,482,113,120,113,113,113,113,113, +113,113,113,113,113,113,113,113,486,113,487,113,113,113,113,113, /* block 58 */ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, @@ -2305,12 +2331,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -483,484, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, +488,489, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, /* block 59 */ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,485, 35, 35,486, 35, + 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,490, 35, 35,491, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, @@ -2319,33 +2345,33 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, /* block 60 */ -487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488, -487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120, -487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488, -487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488, -487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120, -128,487,128,487,128,487,128,487,120,488,120,488,120,488,120,488, -487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488, -489,489,490,490,490,490,491,491,492,492,493,493,494,494,120,120, +492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, +492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120, +492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, +492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, +492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120, +128,492,128,492,128,492,128,492,120,493,120,493,120,493,120,493, +492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, +494,494,495,495,495,495,496,496,497,497,498,498,499,499,120,120, /* block 61 */ -487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495, -487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495, -487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495, -487,487,128,496,128,120,128,128,488,488,497,497,498,119,499,119, -119,119,128,496,128,120,128,128,500,500,500,500,498,119,119,119, -487,487,128,128,120,120,128,128,488,488,501,501,120,119,119,119, -487,487,128,128,128,169,128,128,488,488,502,502,174,119,119,119, -120,120,128,496,128,120,128,128,503,503,504,504,498,119,119,120, +492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, +492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, +492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, +492,492,128,501,128,120,128,128,493,493,502,502,503,119,504,119, +119,119,128,501,128,120,128,128,505,505,505,505,503,119,119,119, +492,492,128,128,120,120,128,128,493,493,506,506,120,119,119,119, +492,492,128,128,128,169,128,128,493,493,507,507,174,119,119,119, +120,120,128,501,128,120,128,128,508,508,509,509,503,119,119,120, /* block 62 */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,505,506, 24, 24, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,510,511, 24, 24, 10, 10, 10, 10, 10, 10, 5, 5, 23, 27, 7, 23, 23, 27, 7, 23, - 5, 5, 5, 5, 5, 5, 5, 5,507,508, 24, 24, 24, 24, 24,509, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,510, 5, 5, 16, - 16, 5, 5, 5, 9, 7, 8, 5, 5,510, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5,512,513, 24, 24, 24, 24, 24,514, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,515, 5, 5, 16, + 16, 5, 5, 5, 9, 7, 8, 5, 5,515, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, - 24, 24, 24, 24, 24,511, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24,516, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25,110,120,120, 25, 25, 25, 25, 25, 25, 9, 9, 9, 7, 8,110, /* block 63 */ @@ -2353,24 +2379,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,425,425,425, -425,113,425,425,425,113,113,113,113,113,113,113,113,113,113,113, -512,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + 6,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +113,113,113,113,113,113,113,113,113,113,113,113,113,429,429,429, +429,113,429,429,429,113,113,113,113,113,113,113,113,113,113,113, +517,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 64 */ - 20, 20,513, 20, 20, 20, 20,513, 20, 20,514,513,513,513,514,514, -513,513,513,514, 20,513, 20, 20, 9,513,513,513,513,513, 20, 20, - 20, 20, 21, 20,513, 20,515, 20,513, 20,516,517,513,513, 20,514, -513,513,518,513,514,519,519,519,519,520, 20, 20,514,514,513,513, - 9, 9, 9, 9, 9,513,514,514,514,514, 20, 9, 20, 20,521, 20, + 20, 20,518, 20, 20, 20, 20,518, 20, 20,519,518,518,518,519,519, +518,518,518,519, 20,518, 20, 20, 9,518,518,518,518,518, 20, 20, + 20, 20, 21, 20,518, 20,520, 20,518, 20,521,522,518,518, 20,519, +518,518,523,518,519,524,524,524,524,525, 20, 20,519,519,518,518, + 9, 9, 9, 9, 9,518,519,519,519,519, 20, 9, 20, 20,526, 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, -523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527, +528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, /* block 65 */ -524,524,524, 32, 33,524,524,524,524, 25, 20, 20,120,120,120,120, - 9, 9, 9, 9,525, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20, +529,529,529, 32, 33,529,529,529,529, 25, 20, 20,120,120,120,120, + 9, 9, 9, 9,530, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20, 9, 20, 20, 9, 20, 20, 9, 20, 20, 21, 21, 20, 20, 20, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, @@ -2422,10 +2448,10 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20,526,526,526,526,526,526,526,526,526,526, -526,526,527,526,526,526,526,526,526,526,526,526,526,526,526,526, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528, 25, 25, 25, 25, 25, 25, + 20, 20, 20, 20, 20, 20,531,531,531,531,531,531,531,531,531,531, +531,531,532,531,531,531,531,531,531,531,531,531,531,531,531,531, +533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +533,533,533,533,533,533,533,533,533,533, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, /* block 71 */ @@ -2446,7 +2472,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,525,525,525,525, 9, + 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,530,530,530,530, 9, /* block 73 */ 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -2455,7 +2481,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,525, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,530, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, /* block 74 */ @@ -2489,20 +2515,20 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* block 77 */ -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, -529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, +534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, /* block 78 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,525,525, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9,530,530, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -2539,14 +2565,14 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, /* block 82 */ -530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, -530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, -530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,120, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,120, - 32, 33,532,533,534,535,536, 32, 33, 32, 33, 32, 33,537,538,539, -540, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,541,541, +535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, +535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, +535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, +536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, +536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, +536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, + 32, 33,537,538,539,540,541, 32, 33, 32, 33, 32, 33,542,543,544, +545, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,546,546, /* block 83 */ 165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, @@ -2555,138 +2581,138 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, 165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, 165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,542,543,543,543,543,543,543,165,166,165,166,544, -544,544,165,166,120,120,120,120,120,545,545,545,545,546,545,545, +165,166,165,166,547,548,548,548,548,548,548,165,166,165,166,549, +549,549,165,166,120,120,120,120,120,550,550,550,550,551,550,550, /* block 84 */ -547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547, -547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547, -547,547,547,547,547,547,120,547,120,120,120,120,120,547,120,120, -548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548, -548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548, -548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548, -548,548,548,548,548,548,548,548,120,120,120,120,120,120,120,549, -550,120,120,120,120,120,120,120,120,120,120,120,120,120,120,551, - -/* block 85 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, 552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, 552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, +552,552,552,552,552,552,120,552,120,120,120,120,120,552,120,120, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,553,553,553,553,553,553,120,120,120,120,120,120,120,554, +555,120,120,120,120,120,120,120,120,120,120,120,120,120,120,556, + +/* block 85 */ +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +361,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, /* block 86 */ 5, 5, 23, 27, 23, 27, 5, 5, 5, 23, 27, 5, 23, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 10, 5, 23, 27, 5, 5, 23, 27, 7, 8, 7, 8, 7, 8, 7, 8, 5, 5, 5, 5, 5,111, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 5, 5, 5, 5, - 10, 5, 7,553, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 20, 20, 5,120,120,120,120,120,120,120,120,120,120,120,120,120, + 10, 5, 7,558, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 20, 20, 5, 5, 5, 7, 8, 7, 8, 7, 8, 7, 8, 10,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 87 */ -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,120,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,120,120,120,120,120,120,120,120,120,120,120,120, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,120,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,120,120,120,120,120,120,120,120,120,120,120,120, /* block 88 */ -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, /* block 89 */ -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554, -554,554,554,554,554,554,120,120,120,120,120,120,120,120,120,120, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +559,559,559,559,559,559,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120, /* block 90 */ - 4,555,555,556, 20,557,558,559,560,561,560,561,560,561,560,561, -560,561, 20,562,560,561,560,561,560,561,560,561,563,564,565,565, - 20,559,559,559,559,559,559,559,559,559,566,566,566,566,567,567, -568,569,569,569,569,569, 20,562,559,559,559,557,570,571,572,572, -120,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, - -/* block 91 */ -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,120,120,574,574,575,575,576,576,573, -577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, + 4,560,560,561, 20,562,563,564,565,566,565,566,565,566,565,566, +565,566, 20,567,565,566,565,566,565,566,565,566,568,569,570,570, + 20,564,564,564,564,564,564,564,564,564,571,571,571,571,572,572, +573,574,574,574,574,574, 20,567,564,564,564,562,575,576,577,577, +120,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, 578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, 578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, 578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, + +/* block 91 */ 578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,555,569,579,579,578, +578,578,578,578,578,578,578,120,120,579,579,580,580,581,581,578, +582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,560,574,584,584,583, /* block 92 */ -120,120,120,120,120,580,580,580,580,580,580,580,580,580,580,580, -580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, -580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, -120,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, +120,120,120,120,120,585,585,585,585,585,585,585,585,585,585,585, +585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, +585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, +120,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, /* block 93 */ -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120, -572,572,582,582,582,582,572,572,572,572,572,572,572,572,572,572, -580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, -580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572,572,572,572,120,120,120,120,120,120,120,120,120,120,120,120, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120, +577,577,587,587,587,587,577,577,577,577,577,577,577,577,577,577, +585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, +585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577,577,577,577,120,120,120,120,120,120,120,120,120,120,120,120, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, /* block 94 */ -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,120, -582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572,572,572,572,572,572,572,572, 25, 25, 25, 25, 25, 25, 25, 25, +588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, +588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,120, +587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577,577,577,577,577,577,577,577, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, 20, +588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, +588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, 20, /* block 95 */ -582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572, -572,572,572,572,572,572,572,584,572,584,572,572,572,572,572,572, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -572,572,572,572,572,572,572,572,572,572,572,572, 20, 20, 20, 20, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,572, +587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577, +577,577,577,577,577,577,577,589,577,589,577,577,577,577,577,577, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +577,577,577,577,577,577,577,577,577,577,577,577, 20, 20, 20, 20, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,577, /* block 96 */ -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,572,572,572,572,572,572,572,572, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,572,572,572,572,572, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,577,577,577,577,577,577,577,577, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,577,577,577,577,577, /* block 97 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -2695,450 +2721,440 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, -572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 20, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, +577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, 20, /* block 98 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, /* block 99 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, /* block 100 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,120, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,593,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, /* block 101 */ -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,588,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, /* block 102 */ -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, +592,592,592,592,592,592,592,592,592,592,592,592,592,120,120,120, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,120,120,120,120,120,120,120,120,120, +595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, +595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, +595,595,595,595,595,595,595,595,596,596,596,596,596,596,597,597, /* block 103 */ -587,587,587,587,587,587,587,587,587,587,587,587,587,120,120,120, -589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589, -589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589, -589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589, -589,589,589,589,589,589,589,120,120,120,120,120,120,120,120,120, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,591,591,591,591,591,591,592,592, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, /* block 104 */ -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, - -/* block 105 */ -593,593,593,593,593,593,593,593,593,593,593,593,594,595,595,595, -593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593, -596,596,596,596,596,596,596,596,596,596,593,593,120,120,120,120, +598,598,598,598,598,598,598,598,598,598,598,598,599,600,600,600, +598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +601,601,601,601,601,601,601,601,601,601,598,598,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -192,193,192,193,192,193,192,193,192,193,597,598,192,193,192,193, +192,193,192,193,192,193,192,193,192,193,602,603,192,193,192,193, 192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,599,198, -200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,478, +192,193,192,193,192,193,192,193,192,193,192,193,192,193,604,198, +200,200,200,605,557,557,557,557,557,557,557,557,557,557,605,482, -/* block 106 */ +/* block 105 */ 192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,478,478,552,552, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,602,602,602,602,602,602,602,602,602,602, -603,603,604,604,604,604,604,604,120,120,120,120,120,120,120,120, +192,193,192,193,192,193,192,193,192,193,192,193,482,482,557,557, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607, +608,608,609,609,609,609,609,609,120,120,120,120,120,120,120,120, -/* block 107 */ -605,605,605,605,605,605,605,605, 15, 15, 15, 15, 15, 15, 15, 15, +/* block 106 */ +610,610,610,610,610,610,610,610, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111, 15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,606, 32, 33, +110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,611, 32, 33, -/* block 108 */ - 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,607, 35, 22, - 32, 33, 32, 33,608, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,609,610,611,612,609, 35, -613,614,615,616, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -120,120, 32, 33,617,618,619, 32, 33, 32, 33,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 107 */ + 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,612, 35, 22, + 32, 33, 32, 33,613, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, + 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,614,615,616,617,614, 35, +618,619,620,621, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, + 32, 33, 32, 33,622,623,624, 32, 33, 32, 33,120,120,120,120,120, + 32, 33,120, 35,120, 35, 32, 33, 32, 33,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22, +120,120,110,110,110, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22, + +/* block 108 */ +625,625,626,625,625,625,626,625,625,625,625,626,625,625,625,625, +625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625, +625,625,625,627,627,626,626,627,628,628,628,628,626,120,120,120, +629,629,629,630,630,630,631,631,632,631,120,120,120,120,120,120, +633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, +633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, +633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, +633,633,633,633,634,634,634,634,120,120,120,120,120,120,120,120, /* block 109 */ -620,620,621,620,620,620,621,620,620,620,620,621,620,620,620,620, -620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620, -620,620,620,622,622,621,621,622,623,623,623,623,621,120,120,120, -624,624,624,625,625,625,626,626,627,626,120,120,120,120,120,120, -628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, -628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, -628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628, -628,628,628,628,629,629,629,629,120,120,120,120,120,120,120,120, +635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636, +636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636, +636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636, +636,636,636,636,635,635,635,635,635,635,635,635,635,635,635,635, +635,635,635,635,637,637,120,120,120,120,120,120,120,120,638,638, +639,639,639,639,639,639,639,639,639,639,120,120,120,120,120,120, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,640,255,641,255,255,255,255,261,261,261,255,261,255,255,253, /* block 110 */ -630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631, -631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631, -631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631, -631,631,631,631,630,630,630,630,630,630,630,630,630,630,630,630, -630,630,630,630,632,632,120,120,120,120,120,120,120,120,633,633, -634,634,634,634,634,634,634,634,634,634,120,120,120,120,120,120, -251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, -251,635,253,636,253,253,253,253,259,259,259,253,259,253,253,251, +642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,644,644,644,644,644,644,644,644,645,646, +647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647, +647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648, +648,648,649,649,120,120,120,120,120,120,120,120,120,120,120,650, +358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, +358,358,358,358,358,358,358,358,358,358,358,358,358,120,120,120, /* block 111 */ -637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,638, -638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638, -638,638,638,638,638,638,639,639,639,639,639,639,639,639,640,641, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643, -643,643,644,644,120,120,120,120,120,120,120,120,120,120,120,645, -356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356, -356,356,356,356,356,356,356,356,356,356,356,356,356,120,120,120, - -/* block 112 */ -646,646,646,647,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,646,647,647,646,646,646,646,647,647,646,646,647,647, -647,649,649,649,649,649,649,649,649,649,649,649,649,649,120,650, -651,651,651,651,651,651,651,651,651,651,120,120,120,120,649,649, -344,344,344,344,344,346,652,344,344,344,344,344,344,344,344,344, -350,350,350,350,350,350,350,350,350,350,344,344,344,344,344,120, - -/* block 113 */ +651,651,651,652,653,653,653,653,653,653,653,653,653,653,653,653, 653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, 653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, -653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,655, -655,654,654,655,655,654,654,120,120,120,120,120,120,120,120,120, -653,653,653,654,653,653,653,653,653,653,653,653,654,655,120,120, -656,656,656,656,656,656,656,656,656,656,120,120,657,657,657,657, -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -652,344,344,344,344,344,344,351,351,351,344,345,346,345,344,344, +653,653,653,651,652,652,651,651,651,651,652,652,651,651,652,652, +652,654,654,654,654,654,654,654,654,654,654,654,654,654,120,655, +656,656,656,656,656,656,656,656,656,656,120,120,120,120,654,654, +346,346,346,346,346,348,657,346,346,346,346,346,346,346,346,346, +352,352,352,352,352,352,352,352,352,352,346,346,346,346,346,120, -/* block 114 */ -658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +/* block 112 */ 658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, 658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, -659,658,659,659,659,658,658,659,659,658,658,658,658,658,659,659, -658,659,658,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,658,658,660,661,661, -662,662,662,662,662,662,662,662,662,662,662,663,664,664,663,663, -665,665,662,666,666,663,664,120,120,120,120,120,120,120,120,120, +658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,660, +660,659,659,660,660,659,659,120,120,120,120,120,120,120,120,120, +658,658,658,659,658,658,658,658,658,658,658,658,659,660,120,120, +661,661,661,661,661,661,661,661,661,661,120,120,662,662,662,662, +346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, +657,346,346,346,346,346,346,353,353,353,346,347,348,347,346,346, -/* block 115 */ -120,359,359,359,359,359,359,120,120,359,359,359,359,359,359,120, -120,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120, -359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120, +/* block 113 */ +663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, +663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, +663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, +664,663,664,664,664,663,663,664,664,663,663,663,663,663,664,664, +663,664,663,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,663,663,665,666,666, +667,667,667,667,667,667,667,667,667,667,667,668,669,669,668,668, +670,670,667,671,671,668,669,120,120,120,120,120,120,120,120,120, + +/* block 114 */ +120,361,361,361,361,361,361,120,120,361,361,361,361,361,361,120, +120,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120, +361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35,667, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110, + 35, 35, 35,672, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110, 35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120, -668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, + +/* block 115 */ +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, +667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, +667,667,667,668,668,669,668,668,669,668,668,670,668,669,120,120, +674,674,674,674,674,674,674,674,674,674,120,120,120,120,120,120, /* block 116 */ -668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, -668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, -668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, -668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668, -662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662, -662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662, -662,662,662,663,663,664,663,663,664,663,663,665,663,664,120,120, -669,669,669,669,669,669,669,669,669,669,120,120,120,120,120,120, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, /* block 117 */ -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, /* block 118 */ -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, /* block 119 */ -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, /* block 120 */ -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, /* block 121 */ -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, /* block 122 */ -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, /* block 123 */ -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +676,676,676,676,120,120,120,120,120,120,120,120,120,120,120,120, +359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,120,120,120,120,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +360,360,360,360,360,360,360,360,360,360,360,360,120,120,120,120, /* block 124 */ -671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671, -671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, -671,671,671,671,120,120,120,120,120,120,120,120,120,120,120,120, -357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, -357,357,357,357,357,357,357,120,120,120,120,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,120, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, /* block 125 */ -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, -672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, /* block 126 */ -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, /* block 127 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, - -/* block 128 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,120, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 129 */ +/* block 128 */ 35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120, 120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214, -214,214,214,214,214,214,214,214,214,674,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,679,214,214,214,214,214,214, 214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120, 214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, + +/* block 129 */ +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 130 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,675,675,675,675,675,675,675,675,675,675,675,675,675,675, -675,675,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 131 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,680,681, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, /* block 132 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224, 8, 7, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,221, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, - -/* block 133 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -224,224,676,224,224,224,224,224,224,224,224,224,219,677,120,120, +225,225,682,225,225,225,225,225,225,225,225,225,219,683,221,221, -/* block 134 */ +/* block 133 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 5, 5, 5, 5, 5, 5, 5, 7, 8, 5,120,120,120,120,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,552,552, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,557,557, 5, 10, 10, 16, 16, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, - 8, 7, 8, 7, 8,556,556, 7, 8, 5, 5, 5, 5, 16, 16, 16, + 8, 7, 8, 7, 8,561,561, 7, 8, 5, 5, 5, 5, 16, 16, 16, 5, 5, 5,120, 5, 5, 5, 5, 10, 7, 8, 7, 8, 7, 8, 5, 5, 5, 9, 10, 9, 9, 9,120, 5, 6, 5, 5,120,120,120,120, -224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224, +225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225, -/* block 135 */ -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,120,120, 24, +/* block 134 */ +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24, -/* block 136 */ +/* block 135 */ 120, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 9, 9, 9, 5, 5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 5, 8, 15, 16, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 7, 9, 8, 9, 7, - 8,555,560,561,555,555,578,578,578,578,578,578,578,578,578,578, -569,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, + 8,560,565,566,560,560,583,583,583,583,583,583,583,583,583,583, +574,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -/* block 137 */ -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,678,678, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581, -581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120, -120,120,581,581,581,581,581,581,120,120,581,581,581,581,581,581, -120,120,581,581,581,581,581,581,120,120,581,581,581,120,120,120, +/* block 136 */ +583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +583,583,583,583,583,583,583,583,583,583,583,583,583,583,684,684, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120, +120,120,586,586,586,586,586,586,120,120,586,586,586,586,586,586, +120,120,586,586,586,586,586,586,120,120,586,586,586,120,120,120, 6, 6, 9, 15, 20, 6, 6,120, 20, 9, 9, 9, 9, 20, 20,120, -511,511,511,511,511,511,511,511,511, 24, 24, 24, 20, 20,120,120, +516,516,516,516,516,516,516,516,516, 24, 24, 24, 20, 20,120,120, -/* block 138 */ -679,679,679,679,679,679,679,679,679,679,679,679,120,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,120,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,120,679,679,120,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120, +/* block 137 */ +685,685,685,685,685,685,685,685,685,685,685,685,120,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,120,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,120,685,685,120,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 138 */ +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, +685,685,685,685,685,685,685,685,685,685,685,120,120,120,120,120, + /* block 139 */ -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679, -679,679,679,679,679,679,679,679,679,679,679,120,120,120,120,120, +686,686,687,120,120,120,120,688,688,688,688,688,688,688,688,688, +688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688, +688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688, +688,688,688,688,120,120,120,689,689,689,689,689,689,689,689,689, +690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, +690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, +690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, +690,690,690,690,690,691,691,691,691,692,692,692,692,692,692,692, /* block 140 */ -680,680,680,120,120,120,120,681,681,681,681,681,681,681,681,681, -681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681, -681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681, -681,681,681,681,120,120,120,682,682,682,682,682,682,682,682,682, -683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, -683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, -683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683, -683,683,683,683,683,684,684,684,684,685,685,685,685,685,685,685, - -/* block 141 */ -685,685,685,685,685,685,685,685,685,685,684,684,685,685,685,120, +692,692,692,692,692,692,692,692,692,692,691,691,692,692,692,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120, -685,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +692,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120, -/* block 142 */ +/* block 141 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3148,499 +3164,519 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 143 */ -686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686, -686,686,686,686,686,686,686,686,686,686,686,686,686,120,120,120, -687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, -687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, -687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687, -687,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689, -689,689,689,689,689,689,689,689,689,689,689,689,120,120,120,120, - -/* block 144 */ -690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, -690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, -691,691,691,691,120,120,120,120,120,120,120,120,120,690,690,690, -692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, -692,693,692,692,692,692,692,692,692,692,693,120,120,120,120,120, +/* block 142 */ +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,120,120,120, 694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, 694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, -694,694,694,694,694,694,695,695,695,695,695,120,120,120,120,120, - -/* block 145 */ -696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696, -696,696,696,696,696,696,696,696,696,696,696,696,696,696,120,697, -698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698, -698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698, -698,698,698,698,120,120,120,120,698,698,698,698,698,698,698,698, -699,700,700,700,700,700,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, +694,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696, +696,696,696,696,696,696,696,696,696,696,696,696,120,120,120,120, -/* block 146 */ +/* block 143 */ +697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, +697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, +698,698,698,698,120,120,120,120,120,120,120,120,120,697,697,697, +699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699, +699,700,699,699,699,699,699,699,699,699,700,120,120,120,120,120, 701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, 701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, -701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702, -702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702, -702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702, -703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, -703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, -703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, +701,701,701,701,701,701,702,702,702,702,702,120,120,120,120,120, -/* block 147 */ -704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704, -704,704,704,704,704,704,704,704,704,704,704,704,704,704,120,120, -705,705,705,705,705,705,705,705,705,705,120,120,120,120,120,120, -706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706, -706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706, -706,706,706,706,120,120,120,120,707,707,707,707,707,707,707,707, -707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, -707,707,707,707,707,707,707,707,707,707,707,707,120,120,120,120, +/* block 144 */ +703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, +703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,704, +705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, +705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, +705,705,705,705,120,120,120,120,705,705,705,705,705,705,705,705, +706,707,707,707,707,707,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 148 */ +/* block 145 */ 708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, 708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, -708,708,708,708,708,708,708,708,120,120,120,120,120,120,120,120, +708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709, 709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, 709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, -709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, -709,709,709,709,120,120,120,120,120,120,120,120,120,120,120,710, +710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, +710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, +710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, + +/* block 146 */ +711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +711,711,711,711,711,711,711,711,711,711,711,711,711,711,120,120, +712,712,712,712,712,712,712,712,712,712,120,120,120,120,120,120, +713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, +713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, +713,713,713,713,120,120,120,120,714,714,714,714,714,714,714,714, +714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714, +714,714,714,714,714,714,714,714,714,714,714,714,120,120,120,120, + +/* block 147 */ +715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715, +715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715, +715,715,715,715,715,715,715,715,120,120,120,120,120,120,120,120, +716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, +716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, +716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, +716,716,716,716,120,120,120,120,120,120,120,120,120,120,120,717, +718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718, + +/* block 148 */ +718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718, +718,718,718,120,718,718,120,719,719,719,719,719,719,719,719,719, +719,719,120,719,719,719,719,719,719,719,719,719,719,719,719,719, +719,719,120,719,719,719,719,719,719,719,120,719,719,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 149 */ -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, /* block 150 */ -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,120, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,120, -711,711,711,711,711,711,711,711,120,120,120,120,120,120,120,120, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,120, +720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,120, +720,720,720,720,720,720,720,720,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 151 */ -712,712,712,712,712,712,120,120,712,120,712,712,712,712,712,712, -712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712, -712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712, -712,712,712,712,712,712,120,712,712,120,120,120,712,120,120,712, -713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, -713,713,713,713,713,713,120,714,715,715,715,715,715,715,715,715, -716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, -716,716,716,716,716,716,716,717,717,718,718,718,718,718,718,718, - -/* block 152 */ -719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719, -719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,120, -120,120,120,120,120,120,120,720,720,720,720,720,720,720,720,720, +110,110,110,110,110,110,120,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,120,110,110,110,110,110,110,110,110,110,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 152 */ +721,721,721,721,721,721,120,120,721,120,721,721,721,721,721,721, +721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721, 721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721, -721,721,721,120,721,721,120,120,120,120,120,722,722,722,722,722, +721,721,721,721,721,721,120,721,721,120,120,120,721,120,120,721, +722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722, +722,722,722,722,722,722,120,723,724,724,724,724,724,724,724,724, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,725,726,726,727,727,727,727,727,727,727, /* block 153 */ -723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, -723,723,723,723,723,723,724,724,724,724,724,724,120,120,120,725, -726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726, -726,726,726,726,726,726,726,726,726,726,120,120,120,120,120,727, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, +728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,120, +120,120,120,120,120,120,120,729,729,729,729,729,729,729,729,729, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, +730,730,730,120,730,730,120,120,120,120,120,731,731,731,731,731, /* block 154 */ -728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, -728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, -729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729, -729,729,729,729,729,729,729,729,120,120,120,120,730,730,729,729, -730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, -120,120,730,730,730,730,730,730,730,730,730,730,730,730,730,730, -730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, -730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, +732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732, +732,732,732,732,732,732,733,733,733,733,733,733,120,120,120,734, +735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735, +735,735,735,735,735,735,735,735,735,735,120,120,120,120,120,736, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 155 */ -731,732,732,732,120,732,732,120,120,120,120,120,732,732,732,732, -731,731,731,731,120,731,731,731,120,731,731,731,731,731,731,731, -731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731, -731,731,731,731,731,731,120,120,732,732,732,120,120,120,120,732, -733,733,733,733,733,733,733,733,733,120,120,120,120,120,120,120, -734,734,734,734,734,734,734,734,734,120,120,120,120,120,120,120, -735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735, -735,735,735,735,735,735,735,735,735,735,735,735,735,736,736,737, +737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737, +737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737, +738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738, +738,738,738,738,738,738,738,738,120,120,120,120,739,739,738,738, +739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, +120,120,739,739,739,739,739,739,739,739,739,739,739,739,739,739, +739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, +739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, /* block 156 */ -738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738, -738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -740,740,740,740,740,740,740,740,741,740,740,740,740,740,740,740, +740,741,741,741,120,741,741,120,120,120,120,120,741,741,741,741, +740,740,740,740,120,740,740,740,120,740,740,740,740,740,740,740, 740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740, -740,740,740,740,740,742,742,120,120,120,120,743,743,743,743,743, -744,744,744,744,744,744,744,120,120,120,120,120,120,120,120,120, +740,740,740,740,740,740,120,120,741,741,741,120,120,120,120,741, +742,742,742,742,742,742,742,742,742,120,120,120,120,120,120,120, +743,743,743,743,743,743,743,743,743,120,120,120,120,120,120,120, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,746, /* block 157 */ -745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, -745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, -745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745, -745,745,745,745,745,745,120,120,120,746,746,746,746,746,746,746, 747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747, -747,747,747,747,747,747,120,120,748,748,748,748,748,748,748,748, +747,747,747,747,747,747,747,747,747,747,747,747,747,748,748,748, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +749,749,749,749,749,749,749,749,750,749,749,749,749,749,749,749, 749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749, -749,749,749,120,120,120,120,120,750,750,750,750,750,750,750,750, +749,749,749,749,749,751,751,120,120,120,120,752,752,752,752,752, +753,753,754,753,753,753,753,120,120,120,120,120,120,120,120,120, /* block 158 */ -751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751, -751,751,120,120,120,120,120,120,120,752,752,752,752,120,120,120, -120,120,120,120,120,120,120,120,120,753,753,753,753,753,753,753, +755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, +755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, +755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, +755,755,755,755,755,755,120,120,120,756,756,756,756,756,756,756, +757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757, +757,757,757,757,757,757,120,120,758,758,758,758,758,758,758,758, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,120,120,120,120,120,760,760,760,760,760,760,760,760, + +/* block 159 */ +761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761, +761,761,120,120,120,120,120,120,120,762,762,762,762,120,120,120, +120,120,120,120,120,120,120,120,120,763,763,763,763,763,763,763, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 159 */ -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754, -754,754,754,754,754,754,754,754,754,120,120,120,120,120,120,120, +/* block 160 */ +764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, +764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, +764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, +764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, +764,764,764,764,764,764,764,764,764,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 160 */ -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,120,120,120,120,120,120,120,120,120,120,120,120,120, -756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, -756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, -756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, -756,756,756,120,120,120,120,120,120,120,757,757,757,757,757,757, - /* block 161 */ -758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758, -758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758, -758,758,758,758,759,759,759,759,120,120,120,120,120,120,120,120, -760,760,760,760,760,760,760,760,760,760,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,120,120,120,120,120,120,120,120,120,120,120,120,120, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, +766,766,766,120,120,120,120,120,120,120,767,767,767,767,767,767, /* block 162 */ +768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768, +768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768, +768,768,768,768,769,769,769,769,120,120,120,120,120,120,120,120, +770,770,770,770,770,770,770,770,770,770,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761, -761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,120, /* block 163 */ -762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762, -762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762, -762,762,762,762,762,762,762,762,762,762,120,763,763,764,120,120, -762,762,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,120, /* block 164 */ -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766, -766,766,766,766,766,766,766,765,120,120,120,120,120,120,120,120, -767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767, -767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768, -768,769,769,769,769,770,770,770,770,770,120,120,120,120,120,120, +772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772, +772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772, +772,772,772,772,772,772,772,772,772,772,120,773,773,774,120,120, +772,772,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 165 */ +775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775, +775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776, +776,776,776,776,776,776,776,775,120,120,120,120,120,120,120,120, +777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777, +777,777,777,777,777,777,778,778,778,778,778,778,778,778,778,778, +778,779,779,779,779,780,780,780,780,780,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, + +/* block 166 */ +781,781,782,782,782,782,783,783,783,783,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, -771,771,771,771,771,772,772,772,772,772,772,772,120,120,120,120, +784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784, +784,784,784,784,784,785,785,785,785,785,785,785,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773, -773,773,773,773,773,773,773,120,120,120,120,120,120,120,120,120, - -/* block 166 */ -774,775,774,776,776,776,776,776,776,776,776,776,776,776,776,776, -776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -776,776,776,776,776,776,776,776,775,775,775,775,775,775,775,775, -775,775,775,775,775,775,775,777,777,777,777,777,777,777,120,120, -120,120,778,778,778,778,778,778,778,778,778,778,778,778,778,778, -778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,775, +786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786, +786,786,786,786,786,786,786,120,120,120,120,120,120,120,120,120, /* block 167 */ -780,780,781,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -781,781,781,780,780,780,780,781,781,780,780,783,783,784,783,783, -783,783,120,120,120,120,120,120,120,120,120,120,120,784,120,120, -785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785, -785,785,785,785,785,785,785,785,785,120,120,120,120,120,120,120, -786,786,786,786,786,786,786,786,786,786,120,120,120,120,120,120, +787,788,787,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,788,788,788,788,788,788,788,788, +788,788,788,788,788,788,788,790,790,790,790,790,790,790,120,120, +120,120,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792, +788,789,789,788,788,789,120,120,120,120,120,120,120,120,120,788, /* block 168 */ -787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788, -788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788, -788,788,788,788,788,788,788,787,787,787,787,787,789,787,787,787, -787,787,787,787,787,120,790,790,790,790,790,790,790,790,790,790, -791,791,791,791,788,789,789,788,120,120,120,120,120,120,120,120, -792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792, -792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792, -792,792,792,793,794,794,792,120,120,120,120,120,120,120,120,120, +793,793,794,795,795,795,795,795,795,795,795,795,795,795,795,795, +795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795, +795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795, +794,794,794,793,793,793,793,794,794,793,793,796,796,797,796,796, +796,796,793,120,120,120,120,120,120,120,120,120,120,797,120,120, +798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798, +798,798,798,798,798,798,798,798,798,120,120,120,120,120,120,120, +799,799,799,799,799,799,799,799,799,799,120,120,120,120,120,120, /* block 169 */ -795,795,796,797,797,797,797,797,797,797,797,797,797,797,797,797, -797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, -797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, -797,797,797,796,796,796,795,795,795,795,795,795,795,795,795,796, -796,797,798,798,797,799,799,799,799,795,795,795,795,799,796,795, -800,800,800,800,800,800,800,800,800,800,797,799,797,799,799,799, -120,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801, -801,801,801,801,801,120,120,120,120,120,120,120,120,120,120,120, +800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801, +801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801, +801,801,801,801,801,801,801,800,800,800,800,800,802,800,800,800, +800,800,800,800,800,120,803,803,803,803,803,803,803,803,803,803, +804,804,804,804,801,802,802,801,120,120,120,120,120,120,120,120, +805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, +805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, +805,805,805,806,807,807,805,120,120,120,120,120,120,120,120,120, /* block 170 */ -802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802, -802,802,120,802,802,802,802,802,802,802,802,802,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,803,803,803,804, -804,804,803,803,804,803,804,804,805,805,805,805,805,805,804,120, +808,808,809,810,810,810,810,810,810,810,810,810,810,810,810,810, +810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810, +810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810, +810,810,810,809,809,809,808,808,808,808,808,808,808,808,808,809, +809,810,811,811,810,812,812,812,812,808,808,808,808,812,809,808, +813,813,813,813,813,813,813,813,813,813,810,812,810,812,812,812, +120,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814, +814,814,814,814,814,120,120,120,120,120,120,120,120,120,120,120, + +/* block 171 */ +815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815, +815,815,120,815,815,815,815,815,815,815,815,815,815,815,815,815, +815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,817, +817,817,816,816,817,816,817,817,818,818,818,818,818,818,817,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 171 */ -806,806,806,806,806,806,806,120,806,120,806,806,806,806,120,806, -806,806,806,806,806,806,806,806,806,806,806,806,806,806,120,806, -806,806,806,806,806,806,806,806,806,807,120,120,120,120,120,120, -808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808, -808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808, -808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809, -810,810,810,809,809,809,809,809,809,809,809,120,120,120,120,120, -811,811,811,811,811,811,811,811,811,811,120,120,120,120,120,120, - /* block 172 */ -812,813,814,815,120,816,816,816,816,816,816,816,816,120,120,816, -816,120,120,816,816,816,816,816,816,816,816,816,816,816,816,816, -816,816,816,816,816,816,816,816,816,120,816,816,816,816,816,816, -816,120,816,816,120,816,816,816,816,816,120,817,813,816,818,814, -812,814,814,814,814,120,120,814,814,120,120,814,814,814,120,120, -816,120,120,120,120,120,120,818,120,120,120,120,120,816,816,816, -816,816,814,814,120,120,812,812,812,812,812,812,812,120,120,120, -812,812,812,812,812,120,120,120,120,120,120,120,120,120,120,120, +819,819,819,819,819,819,819,120,819,120,819,819,819,819,120,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,120,819, +819,819,819,819,819,819,819,819,819,820,120,120,120,120,120,120, +821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821, +821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821, +821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822, +823,823,823,822,822,822,822,822,822,822,822,120,120,120,120,120, +824,824,824,824,824,824,824,824,824,824,120,120,120,120,120,120, /* block 173 */ -819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, -819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, -819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, -819,819,819,819,819,820,820,820,821,821,821,821,821,821,821,821, -820,820,821,821,821,820,821,819,819,819,819,822,822,822,822,822, -823,823,823,823,823,823,823,823,823,823,822,822,120,822,821,819, -819,819,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +825,826,827,828,120,829,829,829,829,829,829,829,829,120,120,829, +829,120,120,829,829,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,829,829,829,829,829,120,829,829,829,829,829,829, +829,120,829,829,120,829,829,829,829,829,120,830,826,829,831,827, +825,827,827,827,827,120,120,827,827,120,120,827,827,827,120,120, +829,120,120,120,120,120,120,831,120,120,120,120,120,829,829,829, +829,829,827,827,120,120,825,825,825,825,825,825,825,120,120,120, +825,825,825,825,825,120,120,120,120,120,120,120,120,120,120,120, /* block 174 */ -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -825,826,826,827,827,827,827,827,827,826,827,826,826,825,826,827, -827,826,827,827,824,824,828,824,120,120,120,120,120,120,120,120, -829,829,829,829,829,829,829,829,829,829,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, +832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, +832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, +832,832,832,832,832,833,833,833,834,834,834,834,834,834,834,834, +833,833,834,834,834,833,834,832,832,832,832,835,835,835,835,835, +836,836,836,836,836,836,836,836,836,836,835,835,120,835,834,832, +832,832,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 175 */ -830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, -830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, -830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831, -832,832,833,833,833,833,120,120,832,832,832,832,833,833,832,833, -833,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834, -834,834,834,834,834,834,834,834,830,830,830,830,833,833,120,120, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +838,839,839,840,840,840,840,840,840,839,840,839,839,838,839,840, +840,839,840,840,837,837,841,837,120,120,120,120,120,120,120,120, +842,842,842,842,842,842,842,842,842,842,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 176 */ -835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, -835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, -835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, -836,836,836,837,837,837,837,837,837,837,837,836,836,837,836,837, -837,838,838,838,835,120,120,120,120,120,120,120,120,120,120,120, -839,839,839,839,839,839,839,839,839,839,120,120,120,120,120,120, -394,394,394,394,394,394,394,394,394,394,394,394,394,120,120,120, +843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843, +843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843, +843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,844, +845,845,846,846,846,846,120,120,845,845,845,845,846,846,845,846, +846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847, +847,847,847,847,847,847,847,847,843,843,843,843,846,846,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 177 */ -840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840, -840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840, -840,840,840,840,840,840,840,840,840,840,840,841,842,841,842,842, -841,841,841,841,841,841,842,841,840,120,120,120,120,120,120,120, -843,843,843,843,843,843,843,843,843,843,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +849,849,849,850,850,850,850,850,850,850,850,849,849,850,849,850, +850,851,851,851,848,120,120,120,120,120,120,120,120,120,120,120, +852,852,852,852,852,852,852,852,852,852,120,120,120,120,120,120, +398,398,398,398,398,398,398,398,398,398,398,398,398,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 178 */ -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,844,844,844,844,844,120,120,845,845,845, -846,846,845,845,845,845,846,845,845,845,845,845,120,120,120,120, -847,847,847,847,847,847,847,847,847,847,848,848,849,849,849,850, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, +853,853,853,853,853,853,853,853,853,853,853,854,855,854,855,855, +854,854,854,854,854,854,855,854,853,856,120,120,120,120,120,120, +857,857,857,857,857,857,857,857,857,857,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 179 */ -851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851, -851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851, -851,851,851,851,851,851,851,851,851,851,851,851,852,852,852,853, -853,853,853,853,853,853,853,853,852,853,853,854,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,120,120,859,859,859, +860,860,859,859,859,859,861,859,859,859,859,859,120,120,120,120, +862,862,862,862,862,862,862,862,862,862,863,863,864,864,864,865, +858,858,858,858,858,858,858,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 180 */ +866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866, +866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866, +866,866,866,866,866,866,866,866,866,866,866,866,867,867,867,868, +868,868,868,868,868,868,868,868,867,868,868,869,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855, -855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855, -856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856, -856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856, -857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858, -858,858,858,120,120,120,120,120,120,120,120,120,120,120,120,859, /* block 181 */ -860,860,860,860,860,860,860,120,120,860,120,120,860,860,860,860, -860,860,860,860,120,860,860,120,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -861,862,862,862,862,862,120,862,862,120,120,863,863,862,863,864, -862,864,862,863,865,865,865,120,120,120,120,120,120,120,120,120, -866,866,866,866,866,866,866,866,866,866,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870, +870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870, +871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, +871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, +872,872,872,872,872,872,872,872,872,872,873,873,873,873,873,873, +873,873,873,120,120,120,120,120,120,120,120,120,120,120,120,874, /* block 182 */ +875,875,875,875,875,875,875,120,120,875,120,120,875,875,875,875, +875,875,875,875,120,875,875,120,875,875,875,875,875,875,875,875, +875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,875, +876,877,877,877,877,877,120,877,877,120,120,878,878,877,878,879, +877,879,877,878,880,880,880,120,120,120,120,120,120,120,120,120, +881,881,881,881,881,881,881,881,881,881,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -867,867,867,867,867,867,867,867,120,120,867,867,867,867,867,867, -867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867, -867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867, -867,868,868,868,869,869,869,869,120,120,869,869,868,868,868,868, -869,867,870,867,868,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 183 */ -871,872,872,872,872,872,872,872,872,872,872,871,871,871,871,871, -871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, -871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, -871,871,871,872,872,872,872,872,872,873,874,872,872,872,872,875, -875,875,875,875,875,875,875,872,120,120,120,120,120,120,120,120, -876,877,877,877,877,877,877,878,878,877,877,877,876,876,876,876, -876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876, -876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +882,882,882,882,882,882,882,882,120,120,882,882,882,882,882,882, +882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, +882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, +882,883,883,883,884,884,884,884,120,120,884,884,883,883,883,883, +884,882,885,882,883,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 184 */ -876,876,876,876,879,879,879,879,879,879,877,877,877,877,877,877, -877,877,877,877,877,877,877,878,877,877,880,880,880,876,880,880, -880,880,880,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, -881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, -881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, -881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,120, +886,887,887,887,887,887,887,887,887,887,887,886,886,886,886,886, +886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886, +886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886, +886,886,886,887,887,887,887,887,887,888,889,887,887,887,887,890, +890,890,890,890,890,890,890,887,120,120,120,120,120,120,120,120, +891,892,892,892,892,892,892,893,893,892,892,892,891,891,891,891, +891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, /* block 185 */ -882,882,882,882,882,882,882,882,882,120,882,882,882,882,882,882, -882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, -882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,883, -884,884,884,884,884,884,884,120,884,884,884,884,884,884,883,884, -882,885,885,885,885,885,120,120,120,120,120,120,120,120,120,120, -886,886,886,886,886,886,886,886,886,886,887,887,887,887,887,887, -887,887,887,887,887,887,887,887,887,887,887,887,887,120,120,120, -888,888,889,889,889,889,889,889,889,889,889,889,889,889,889,889, +891,891,891,891,894,894,894,894,894,894,892,892,892,892,892,892, +892,892,892,892,892,892,892,893,892,892,895,895,895,891,895,895, +895,895,895,120,120,120,120,120,120,120,120,120,120,120,120,120, +370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +896,896,896,896,896,896,896,896,896,120,120,120,120,120,120,120, /* block 186 */ -889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889, -120,120,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,890,890,120,891,890,890,890,890,890,890, -890,891,890,890,891,890,890,120,120,120,120,120,120,120,120,120, +897,897,897,897,897,897,897,897,897,120,897,897,897,897,897,897, +897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897, +897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,898, +899,899,899,899,899,899,899,120,899,899,899,899,899,899,898,899, +897,900,900,900,900,900,120,120,120,120,120,120,120,120,120,120, +901,901,901,901,901,901,901,901,901,901,902,902,902,902,902,902, +902,902,902,902,902,902,902,902,902,902,902,902,902,120,120,120, +903,903,904,904,904,904,904,904,904,904,904,904,904,904,904,904, + +/* block 187 */ +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +120,120,905,905,905,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,120,906,905,905,905,905,905,905, +905,906,905,905,906,905,905,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 187 */ -892,892,892,892,892,892,892,120,892,892,120,892,892,892,892,892, -892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892, -892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892, -892,893,893,893,893,893,893,120,120,120,893,120,893,893,120,893, -893,893,893,893,893,893,894,893,120,120,120,120,120,120,120,120, -895,895,895,895,895,895,895,895,895,895,120,120,120,120,120,120, -896,896,896,896,896,896,120,896,896,120,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, - /* block 188 */ -896,896,896,896,896,896,896,896,896,896,897,897,897,897,897,120, -898,898,120,897,897,898,897,898,896,120,120,120,120,120,120,120, -899,899,899,899,899,899,899,899,899,899,120,120,120,120,120,120, +907,907,907,907,907,907,907,120,907,907,120,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,908,908,908,908,908,908,120,120,120,908,120,908,908,120,908, +908,908,908,908,908,908,909,908,120,120,120,120,120,120,120,120, +910,910,910,910,910,910,910,910,910,910,120,120,120,120,120,120, +911,911,911,911,911,911,120,911,911,120,911,911,911,911,911,911, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, + +/* block 189 */ +911,911,911,911,911,911,911,911,911,911,912,912,912,912,912,120, +913,913,120,912,912,913,912,913,911,120,120,120,120,120,120,120, +914,914,914,914,914,914,914,914,914,914,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 189 */ +/* block 190 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -900,900,900,901,901,902,902,903,903,120,120,120,120,120,120,120, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,916,916,917,917,918,918,120,120,120,120,120,120,120, -/* block 190 */ +/* block 191 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -590,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, -293,293,904,293,904,295,295,295,295,295,295,295,295,296,296,296, -296,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295, -295,295,120,120,120,120,120,120,120,120,120,120,120,120,120,905, - -/* block 191 */ -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, +595,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919, +295,295,919,295,919,297,297,297,297,297,297,297,297,298,298,298, +298,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +297,297,120,120,120,120,120,120,120,120,120,120,120,120,120,920, /* block 192 */ -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,120,120,120,120,120,120, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, + +/* block 193 */ +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3648,108 +3684,118 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 193 */ -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,120, -908,908,908,908,908,120,120,120,120,120,120,120,120,120,120,120, - /* block 194 */ -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906, -906,906,906,906,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,120, +923,923,923,923,923,120,120,120,120,120,120,120,120,120,120,120, /* block 195 */ -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, - -/* block 196 */ -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,120, -910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,120, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +921,921,921,921,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 196 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,925,925,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 197 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, /* block 198 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,120,120,120,120,120,120,120,120,120, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,120, +927,927,927,927,927,927,927,927,927,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 199 */ -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, /* block 200 */ -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, -601,601,601,601,601,601,601,601,601,120,120,120,120,120,120,120, -912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912, -912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,120, -913,913,913,913,913,913,913,913,913,913,120,120,120,120,914,914, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - -/* block 201 */ +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +928,928,928,928,928,928,928,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, -915,915,915,915,915,915,915,915,915,915,915,915,915,915,120,120, -916,916,916,916,916,917,120,120,120,120,120,120,120,120,120,120, + +/* block 201 */ +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, /* block 202 */ -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -919,919,919,919,919,919,919,920,920,920,920,920,921,921,921,921, -922,922,922,922,920,921,120,120,120,120,120,120,120,120,120,120, -923,923,923,923,923,923,923,923,923,923,120,924,924,924,924,924, -924,924,120,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,120,120,120,120,120,918,918,918, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,120,120,120,120,120,120,120, +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, +929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,120, +930,930,930,930,930,930,930,930,930,930,120,120,120,120,931,931, +932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, /* block 203 */ -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, +932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, +932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, +932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,120, +933,933,933,933,933,933,933,933,933,933,120,120,120,120,120,120, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,120,120, +935,935,935,935,935,936,120,120,120,120,120,120,120,120,120,120, + +/* block 204 */ +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, +938,938,938,938,938,938,938,939,939,939,939,939,940,940,940,940, +941,941,941,941,939,940,120,120,120,120,120,120,120,120,120,120, +942,942,942,942,942,942,942,942,942,942,120,943,943,943,943,943, +943,943,120,937,937,937,937,937,937,937,937,937,937,937,937,937, +937,937,937,937,937,937,937,937,120,120,120,120,120,937,937,937, + +/* block 205 */ +937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3758,19 +3804,19 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 204 */ +/* block 206 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925, -925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944, +944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944, +945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, +945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -/* block 205 */ -927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927, -927,927,927,927,927,927,927,928,928,928,928,120,120,120,120,120, +/* block 207 */ +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, +946,946,946,946,946,946,946,947,947,947,947,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3778,68 +3824,68 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 206 */ -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,120,120,120,120,930, -929,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, -931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, -931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931, +/* block 208 */ +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +948,948,948,948,948,948,948,948,948,948,948,120,120,120,120,949, +948,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, -/* block 207 */ -931,931,931,931,931,931,931,931,120,120,120,120,120,120,120,930, -930,930,930,932,932,932,932,932,932,932,932,932,932,932,932,932, +/* block 209 */ +950,950,950,950,950,950,950,950,120,120,120,120,120,120,120,949, +949,949,949,951,951,951,951,951,951,951,951,951,951,951,951,951, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -933,934, 5,111,935,120,120,120,120,120,120,120,120,120,120,120, -936,936,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - -/* block 208 */ -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, - -/* block 209 */ -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,120, +952,953,954,562,955,120,120,120,120,120,120,120,120,120,120,120, +956,956,120,120,120,120,120,120,120,120,120,120,120,120,120,120, /* block 210 */ -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, /* block 211 */ -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, -938,938,938,938,938,938,120,120,120,120,120,120,120,120,120,120, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,120, + +/* block 212 */ +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, + +/* block 213 */ +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 212 */ -937,937,937,937,937,937,937,937,937,120,120,120,120,120,120,120, +/* block 214 */ +957,957,957,957,957,957,957,957,957,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3848,77 +3894,107 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 213 */ -578,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, - -/* block 214 */ -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, - /* block 215 */ -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573, -573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -573,573,573,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,578,578,578,578,120,120,120,120,120,120,120,120, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +584,584,584,584,120,584,584,584,584,584,584,584,120,584,584,120, /* block 216 */ -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, +583,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, /* block 217 */ -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939, -939,939,939,939,939,939,939,939,939,939,939,939,120,120,120,120, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, /* block 218 */ -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940, -940,940,940,940,940,940,940,940,940,940,940,120,120,120,120,120, -940,940,940,940,940,940,940,940,940,940,940,940,940,120,120,120, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +583,583,583,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +578,578,578,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,583,583,583,583,120,120,120,120,120,120,120,120, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, /* block 219 */ -940,940,940,940,940,940,940,940,940,120,120,120,120,120,120,120, -940,940,940,940,940,940,940,940,940,940,120,120,941,942,942,943, -944,944,944,944,120,120,120,120,120,120,120,120,120,120,120,120, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, + +/* block 220 */ +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +959,959,959,959,959,959,959,959,959,959,959,959,120,120,120,120, + +/* block 221 */ +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +960,960,960,960,960,960,960,960,960,960,960,120,120,120,120,120, +960,960,960,960,960,960,960,960,960,960,960,960,960,120,120,120, + +/* block 222 */ +960,960,960,960,960,960,960,960,960,120,120,120,120,120,120,120, +960,960,960,960,960,960,960,960,960,960,120,120,961,962,962,963, +964,964,964,964,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 220 */ +/* block 223 */ +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,120, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,120,120,120,120,120,120,120,120,120, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + +/* block 224 */ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 225 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -3928,37 +4004,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120, -/* block 221 */ +/* block 226 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20,945,946,113,113,113, 20, 20, 20,946,945,945, -945,945,945, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113, + 20, 20, 20, 20, 20,965,966,113,113,113, 20, 20, 20,966,965,965, +965,965,965, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113, -/* block 222 */ +/* block 227 */ 113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 223 */ -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,947,947,947,685,120,120,120,120,120,120,120,120,120,120, +/* block 228 */ +692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, +692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, +692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, +692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, +692,692,967,967,967,692,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 224 */ +/* block 229 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -3968,187 +4044,207 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 225 */ +/* block 230 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120, -582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582, -582,582, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120, +587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, +587,587, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120, -/* block 226 */ -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514, -514,514,514,514,514,120,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, +/* block 231 */ +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519, +519,519,519,519,519,120,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -/* block 227 */ -513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,513,120,513,513, -120,120,513,120,120,513,513,120,120,513,513,513,513,120,513,513, -513,513,513,513,513,513,514,514,514,514,120,514,120,514,514,514, -514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,514, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, +/* block 232 */ +518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,518,120,518,518, +120,120,518,120,120,518,518,120,120,518,518,518,518,120,518,518, +518,518,518,518,518,518,519,519,519,519,120,519,120,519,519,519, +519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,519, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -/* block 228 */ -514,514,514,514,513,513,120,513,513,513,513,120,120,513,513,513, -513,513,513,513,513,120,513,513,513,513,513,513,513,120,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,513,513,120,513,513,513,513,120, -513,513,513,513,513,120,513,120,120,120,513,513,513,513,513,513, -513,120,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, +/* block 233 */ +519,519,519,519,518,518,120,518,518,518,518,120,120,518,518,518, +518,518,518,518,518,120,518,518,518,518,518,518,518,120,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,518,518,120,518,518,518,518,120, +518,518,518,518,518,120,518,120,120,120,518,518,518,518,518,518, +518,120,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -/* block 229 */ -513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, +/* block 234 */ +518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -/* block 230 */ -514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, +/* block 235 */ +519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -/* block 231 */ -513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,120,120,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513, 9,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514, 9,514,514,514,514, -514,514,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513, 9,514,514,514,514, +/* block 236 */ +518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,120,120,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518, 9,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519, 9,519,519,519,519, +519,519,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518, 9,519,519,519,519, -/* block 232 */ -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514, 9,514,514,514,514,514,514,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513, 9,514,514,514,514,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 9, -514,514,514,514,514,514,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 9, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, +/* block 237 */ +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519, 9,519,519,519,519,519,519,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518, 9,519,519,519,519,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, 9, +519,519,519,519,519,519,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, 9, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -/* block 233 */ -514,514,514,514,514,514,514,514,514, 9,514,514,514,514,514,514, -513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, -513,513,513,513,513,513,513,513,513, 9,514,514,514,514,514,514, -514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, -514,514,514, 9,514,514,514,514,514,514,513,514,120,120, 11, 11, +/* block 238 */ +519,519,519,519,519,519,519,519,519, 9,519,519,519,519,519,519, +518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +518,518,518,518,518,518,518,518,518, 9,519,519,519,519,519,519, +519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +519,519,519, 9,519,519,519,519,519,519,518,519,120,120, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, -/* block 234 */ -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, +/* block 239 */ +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -/* block 235 */ -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,948,948,948,948,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, -949,949,949,949,949,949,949,949,949,949,949,949,949,948,948,948, -948,948,948,948,948,949,948,948,948,948,948,948,948,948,948,948, +/* block 240 */ +969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, +969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, +969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, +969,969,969,969,969,969,969,968,968,968,968,969,969,969,969,969, +969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, +969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, +969,969,969,969,969,969,969,969,969,969,969,969,969,968,968,968, +968,968,968,968,968,969,968,968,968,968,968,968,968,968,968,968, -/* block 236 */ -948,948,948,948,949,948,948,950,950,950,950,950,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,949,949,949,949,949, -120,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949, +/* block 241 */ +968,968,968,968,969,968,968,970,970,970,970,970,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,969,969,969,969,969, +120,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 237 */ -951,951,951,951,951,951,951,120,951,951,951,951,951,951,951,951, -951,951,951,951,951,951,951,951,951,120,120,951,951,951,951,951, -951,951,120,951,951,120,951,951,951,951,951,120,120,120,120,120, +/* block 242 */ + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 238 */ -952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, -952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, -952,952,952,952,952,952,952,952,952,952,952,952,952,120,120,120, -953,953,953,953,953,953,953,954,954,954,954,954,954,954,120,120, -955,955,955,955,955,955,955,955,955,955,120,120,120,120,952,956, +/* block 243 */ +971,971,971,971,971,971,971,120,971,971,971,971,971,971,971,971, +971,971,971,971,971,971,971,971,971,120,120,971,971,971,971,971, +971,971,120,971,971,120,971,971,971,971,971,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 239 */ +/* block 244 */ +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,120,120,120, +973,973,973,973,973,973,973,974,974,974,974,974,974,974,120,120, +975,975,975,975,975,975,975,975,975,975,120,120,120,120,972,976, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + +/* block 245 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,958,958,958,958, -959,959,959,959,959,959,959,959,959,959,120,120,120,120,120,960, +977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977, +977,977,977,977,977,977,977,977,977,977,977,977,977,977,978,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979, +979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979, +979,979,979,979,979,979,979,979,979,979,979,979,980,980,980,980, +981,981,981,981,981,981,981,981,981,981,120,120,120,120,120,982, -/* block 240 */ -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +/* block 246 */ +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +361,361,361,361,361,361,361,120,361,361,361,361,120,361,361,120, +361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,120, -/* block 241 */ -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, -961,961,961,961,961,120,120,962,962,962,962,962,962,962,962,962, -963,963,963,963,963,963,963,120,120,120,120,120,120,120,120,120, +/* block 247 */ +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, + +/* block 248 */ +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +983,983,983,983,983,120,120,984,984,984,984,984,984,984,984,984, +985,985,985,985,985,985,985,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 242 */ -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,965,965,965,965,965,965,965,965,965,965,965,965,965,965, -965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,965, -965,965,965,965,966,966,966,966,966,966,966,967,120,120,120,120, -968,968,968,968,968,968,968,968,968,968,120,120,120,120,969,969, +/* block 249 */ +986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986, +986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986, +986,986,987,987,987,987,987,987,987,987,987,987,987,987,987,987, +987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,987, +987,987,987,987,988,988,988,988,988,988,988,989,120,120,120,120, +990,990,990,990,990,990,990,990,990,990,120,120,120,120,991,991, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 243 */ +/* block 250 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -4158,7 +4254,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -/* block 244 */ +/* block 251 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25, @@ -4168,7 +4264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 245 */ +/* block 252 */ 120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, @@ -4178,47 +4274,47 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 246 */ -224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, -120,224,224,120,224,120,120,224,120,224,224,224,224,224,224,224, -224,224,224,120,224,224,224,224,120,224,120,224,120,120,120,120, -120,120,224,120,120,120,120,224,120,224,120,224,120,224,224,224, -120,224,224,120,224,120,120,224,120,224,120,224,120,224,120,224, -120,224,224,120,224,120,120,224,224,224,224,120,224,224,224,224, -224,224,224,120,224,224,224,224,120,224,224,224,224,120,224,120, +/* block 253 */ +225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225, +225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120, +120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225, +120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225, +120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225, +225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120, -/* block 247 */ -224,224,224,224,224,224,224,224,224,224,120,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120, -120,224,224,224,120,224,224,224,224,224,120,224,224,224,224,224, -224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120, +/* block 254 */ +225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, +120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 248 */ +/* block 255 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 249 */ +/* block 256 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, -970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992, +992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, -/* block 250 */ +/* block 257 */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, @@ -4228,37 +4324,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, -/* block 251 */ +/* block 258 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,971,971,971,971,971,971,971,971,971,971, -971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,971, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,993,993,993,993,993,993,993,993,993,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, -/* block 252 */ -972, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970, +/* block 259 */ +994, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,970,970,970,970, - 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970, -584,584,970,970,970,970,970,970,970,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, + 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,992,992,992,992, + 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992, +589,589,992,992,992,992,992,992,992,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -/* block 253 */ -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, +/* block 260 */ +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -/* block 254 */ +/* block 261 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4268,7 +4364,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 255 */ +/* block 262 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4276,9 +4372,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,973,973,973,973,973, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,995,995,995,995,995, -/* block 256 */ +/* block 263 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4288,7 +4384,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 257 */ +/* block 264 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4298,17 +4394,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -/* block 258 */ +/* block 265 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, -/* block 259 */ +/* block 266 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -4316,39 +4412,39 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20,970,970,970,970,970,970,970,970,970,970,970,970, + 20, 20, 20, 20,992,992,992,992,992,992,992,992,992,992,992,992, -/* block 260 */ +/* block 267 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 21, 21, 21, 21,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, + 20, 20, 20, 20, 20, 21, 21, 21, 21,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992, + 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -/* block 261 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970, +/* block 268 */ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970, + 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -/* block 262 */ - 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970, +/* block 269 */ + 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970, - 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992, + 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -/* block 263 */ +/* block 270 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4356,39 +4452,29 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21, - -/* block 264 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -/* block 265 */ +/* block 271 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970, - 21, 21, 21, 21, 21,970,970,970, 21, 21, 21,970,970,970,970,970, + 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992, + 21, 21, 21, 21, 21,992,992,992, 21, 21, 21, 21, 21,992,992,992, -/* block 266 */ - 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, +/* block 272 */ + 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, - 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970, - 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, + 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992, + 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992, -/* block 267 */ +/* block 273 */ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -4398,69 +4484,69 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120, -/* block 268 */ -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970, -970,970,970,970,970,970,970,970,970,970,970,970,970,970,120,120, +/* block 274 */ +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +992,992,992,992,992,992,992,992,992,992,992,992,992,992,120,120, -/* block 269 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, +/* block 275 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 270 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,120,120,120,120,120,120,120,120,120,120,120, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +/* block 276 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,120, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -/* block 271 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +/* block 277 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -/* block 272 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +/* block 278 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -/* block 273 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +/* block 279 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 274 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120, +/* block 280 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, @@ -4468,37 +4554,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 275 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,120,120,120,120,120, +/* block 281 */ +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -/* block 276 */ -511, 24,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, -974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974, +/* block 282 */ +516, 24,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -/* block 277 */ -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, +/* block 283 */ +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -/* block 278 */ +/* block 284 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, @@ -4508,7 +4594,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -/* block 279 */ +/* block 285 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, @@ -4516,17 +4602,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */ 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, - -/* block 280 */ -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,120,120, +516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, + +/* block 286 */ +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120, }; diff --git a/thirdparty/pcre2/src/pcre2_ucp.h b/thirdparty/pcre2/src/pcre2_ucp.h index 9538062c71..d84f269e87 100644 --- a/thirdparty/pcre2/src/pcre2_ucp.h +++ b/thirdparty/pcre2/src/pcre2_ucp.h @@ -291,7 +291,13 @@ enum { ucp_Chorasmian, ucp_Dives_Akuru, ucp_Khitan_Small_Script, - ucp_Yezidi + ucp_Yezidi, + /* New for Unicode 14.0.0 */ + ucp_Cypro_Minoan, + ucp_Old_Uyghur, + ucp_Tangsa, + ucp_Toto, + ucp_Vithkuqi }; #endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */ diff --git a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h index eb1132db30..7bb9990a59 100644 --- a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h +++ b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h @@ -158,6 +158,8 @@ extern "C" { #define SLJIT_CONFIG_MIPS_64 1 #elif defined(__sparc__) || defined(__sparc) #define SLJIT_CONFIG_SPARC_32 1 +#elif defined(__s390x__) +#define SLJIT_CONFIG_S390X 1 #else /* Unsupported architecture */ #define SLJIT_CONFIG_UNSUPPORTED 1 @@ -759,6 +761,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \ (SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS) +/********************************/ +/* CPU status flags management. */ +/********************************/ + +#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ + || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ + || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ + || (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \ + || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) +#define SLJIT_HAS_STATUS_FLAGS_STATE 1 +#endif + /*************************************/ /* Debug and verbose related macros. */ /*************************************/ diff --git a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c index 61a32f23e9..6e5bf78e45 100644 --- a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c +++ b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c @@ -79,6 +79,7 @@ */ #ifdef _WIN32 +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) static SLJIT_INLINE void* alloc_chunk(sljit_uw size) { @@ -91,96 +92,108 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) VirtualFree(chunk, 0, MEM_RELEASE); } -#else - -#ifdef __APPLE__ -#ifdef MAP_ANON -/* Configures TARGET_OS_OSX when appropriate */ -#include <TargetConditionals.h> - -#if TARGET_OS_OSX && defined(MAP_JIT) -#include <sys/utsname.h> -#endif /* TARGET_OS_OSX && MAP_JIT */ - -#ifdef MAP_JIT +#else /* POSIX */ +#if defined(__APPLE__) && defined(MAP_JIT) /* On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a - version where it's OK to have more than one JIT block. + version where it's OK to have more than one JIT block or where MAP_JIT is + required. On non-macOS systems, returns MAP_JIT if it is defined. */ +#include <TargetConditionals.h> +#if TARGET_OS_OSX +#if defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86 +#ifdef MAP_ANON +#include <sys/utsname.h> +#include <stdlib.h> + +#define SLJIT_MAP_JIT (get_map_jit_flag()) + static SLJIT_INLINE int get_map_jit_flag() { -#if TARGET_OS_OSX - sljit_sw page_size = get_page_alignment() + 1; + sljit_sw page_size; void *ptr; + struct utsname name; static int map_jit_flag = -1; - /* - The following code is thread safe because multiple initialization - sets map_jit_flag to the same value and the code has no side-effects. - Changing the kernel version witout system restart is (very) unlikely. - */ - if (map_jit_flag == -1) { - struct utsname name; - + if (map_jit_flag < 0) { map_jit_flag = 0; uname(&name); - /* Kernel version for 10.14.0 (Mojave) */ + /* Kernel version for 10.14.0 (Mojave) or later */ if (atoi(name.release) >= 18) { + page_size = get_page_alignment() + 1; /* Only use MAP_JIT if a hardened runtime is used */ + ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANON, -1, 0); - ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); - - if (ptr == MAP_FAILED) { - map_jit_flag = MAP_JIT; - } else { + if (ptr != MAP_FAILED) munmap(ptr, page_size); - } + else + map_jit_flag = MAP_JIT; } } - return map_jit_flag; -#else /* !TARGET_OS_OSX */ - return MAP_JIT; -#endif /* TARGET_OS_OSX */ } - -#endif /* MAP_JIT */ #endif /* MAP_ANON */ -#endif /* __APPLE__ */ +#else /* !SLJIT_CONFIG_X86 */ +#if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) +#error Unsupported architecture +#endif /* SLJIT_CONFIG_ARM */ +#include <pthread.h> + +#define SLJIT_MAP_JIT (MAP_JIT) +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \ + apple_update_wx_flags(enable_exec) + +static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec) +{ + pthread_jit_write_protect_np(enable_exec); +} +#endif /* SLJIT_CONFIG_X86 */ +#else /* !TARGET_OS_OSX */ +#define SLJIT_MAP_JIT (MAP_JIT) +#endif /* TARGET_OS_OSX */ +#endif /* __APPLE__ && MAP_JIT */ +#ifndef SLJIT_UPDATE_WX_FLAGS +#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) +#endif /* !SLJIT_UPDATE_WX_FLAGS */ +#ifndef SLJIT_MAP_JIT +#define SLJIT_MAP_JIT (0) +#endif /* !SLJIT_MAP_JIT */ static SLJIT_INLINE void* alloc_chunk(sljit_uw size) { void *retval; - const int prot = PROT_READ | PROT_WRITE | PROT_EXEC; - -#ifdef MAP_ANON + int prot = PROT_READ | PROT_WRITE | PROT_EXEC; + int flags = MAP_PRIVATE; + int fd = -1; - int flags = MAP_PRIVATE | MAP_ANON; - -#ifdef MAP_JIT - flags |= get_map_jit_flag(); +#ifdef PROT_MAX + prot |= PROT_MAX(prot); #endif - retval = mmap(NULL, size, prot, flags, -1, 0); +#ifdef MAP_ANON + flags |= MAP_ANON | SLJIT_MAP_JIT; #else /* !MAP_ANON */ if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero())) return NULL; - retval = mmap(NULL, size, prot, MAP_PRIVATE, dev_zero, 0); + fd = dev_zero; #endif /* MAP_ANON */ + retval = mmap(NULL, size, prot, flags, fd, 0); if (retval == MAP_FAILED) - retval = NULL; - else { - if (mprotect(retval, size, prot) < 0) { - munmap(retval, size); - retval = NULL; - } + return NULL; + + if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) { + munmap(retval, size); + return NULL; } + SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0); + return retval; } @@ -189,7 +202,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) munmap(chunk, size); } -#endif +#endif /* windows */ /* --------------------------------------------------------------------- */ /* Common functions */ @@ -261,6 +274,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) while (free_block) { if (free_block->size >= size) { chunk_size = free_block->size; + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); if (chunk_size > size + 64) { /* We just cut a block from the end of the free block. */ chunk_size -= size; @@ -326,6 +340,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr) allocated_size -= header->size; /* Connecting free blocks together if possible. */ + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); /* If header->prev_size == 0, free_block will equal to header. In this case, free_block->header.size will be > 0. */ @@ -358,6 +373,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr) } } + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1); SLJIT_ALLOCATOR_UNLOCK(); } @@ -367,6 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void) struct free_block* next_free_block; SLJIT_ALLOCATOR_LOCK(); + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0); free_block = free_blocks; while (free_block) { @@ -381,5 +398,6 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void) } SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks)); + SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1); SLJIT_ALLOCATOR_UNLOCK(); } diff --git a/thirdparty/pcre2/src/sljit/sljitLir.c b/thirdparty/pcre2/src/sljit/sljitLir.c index d817c90b3a..a24a99ab87 100644 --- a/thirdparty/pcre2/src/sljit/sljitLir.c +++ b/thirdparty/pcre2/src/sljit/sljitLir.c @@ -532,13 +532,21 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_la put_label->label = label; } +#define SLJIT_CURRENT_FLAGS_ALL \ + (SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE) + SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags) { SLJIT_UNUSED_ARG(compiler); SLJIT_UNUSED_ARG(current_flags); +#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE) + compiler->status_flags_state = current_flags; +#endif + #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_I32_OP | SLJIT_SET_Z)) == 0) { + compiler->last_flags = 0; + if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) { compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z)); } #endif @@ -968,7 +976,7 @@ static const char* fop2_names[] = { }; #define JUMP_POSTFIX(type) \ - ((type & 0xff) <= SLJIT_MUL_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \ + ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \ : ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : "")) static char* jump_names[] = { @@ -978,7 +986,6 @@ static char* jump_names[] = { (char*)"sig_less", (char*)"sig_greater_equal", (char*)"sig_greater", (char*)"sig_less_equal", (char*)"overflow", (char*)"not_overflow", - (char*)"mul_overflow", (char*)"mul_not_overflow", (char*)"carry", (char*)"", (char*)"equal", (char*)"not_equal", (char*)"less", (char*)"greater_equal", @@ -1278,7 +1285,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler case SLJIT_MUL: CHECK_ARGUMENT(!(op & SLJIT_SET_Z)); CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) - || GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW); + || GET_FLAG_TYPE(op) == SLJIT_OVERFLOW); break; case SLJIT_ADD: CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) @@ -1601,9 +1608,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) - || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW) - || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW)); - CHECK_ARGUMENT((type & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP)); + || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); } #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) @@ -1818,8 +1823,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) - || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW) - || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW)); + || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); FUNCTION_CHECK_DST(dst, dstw, 0); @@ -1858,8 +1862,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) - || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW) - || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW)); + || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { diff --git a/thirdparty/pcre2/src/sljit/sljitLir.h b/thirdparty/pcre2/src/sljit/sljitLir.h index 93d2804675..0eb62fc21b 100644 --- a/thirdparty/pcre2/src/sljit/sljitLir.h +++ b/thirdparty/pcre2/src/sljit/sljitLir.h @@ -412,6 +412,10 @@ struct sljit_compiler { /* Executable size for statistical purposes. */ sljit_uw executable_size; +#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE) + sljit_s32 status_flags_state; +#endif + #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) sljit_s32 args; sljit_s32 locals_offset; @@ -460,7 +464,7 @@ struct sljit_compiler { #if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) /* Need to allocate register save area to make calls. */ - sljit_s32 have_save_area; + sljit_s32 mode; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) @@ -996,7 +1000,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #define SLJIT_SUBC (SLJIT_OP2_BASE + 3) #define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_I32_OP) /* Note: integer mul - Flags: MUL_OVERFLOW */ + Flags: OVERFLOW */ #define SLJIT_MUL (SLJIT_OP2_BASE + 4) #define SLJIT_MUL32 (SLJIT_MUL | SLJIT_I32_OP) /* Flags: Z */ @@ -1141,89 +1145,69 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi /* Integer comparison types. */ #define SLJIT_EQUAL 0 -#define SLJIT_EQUAL32 (SLJIT_EQUAL | SLJIT_I32_OP) -#define SLJIT_ZERO 0 -#define SLJIT_ZERO32 (SLJIT_ZERO | SLJIT_I32_OP) +#define SLJIT_ZERO SLJIT_EQUAL #define SLJIT_NOT_EQUAL 1 -#define SLJIT_NOT_EQUAL32 (SLJIT_NOT_EQUAL | SLJIT_I32_OP) -#define SLJIT_NOT_ZERO 1 -#define SLJIT_NOT_ZERO32 (SLJIT_NOT_ZERO | SLJIT_I32_OP) +#define SLJIT_NOT_ZERO SLJIT_NOT_EQUAL #define SLJIT_LESS 2 -#define SLJIT_LESS32 (SLJIT_LESS | SLJIT_I32_OP) #define SLJIT_SET_LESS SLJIT_SET(SLJIT_LESS) #define SLJIT_GREATER_EQUAL 3 -#define SLJIT_GREATER_EQUAL32 (SLJIT_GREATER_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_GREATER_EQUAL SLJIT_SET(SLJIT_GREATER_EQUAL) #define SLJIT_GREATER 4 -#define SLJIT_GREATER32 (SLJIT_GREATER | SLJIT_I32_OP) #define SLJIT_SET_GREATER SLJIT_SET(SLJIT_GREATER) #define SLJIT_LESS_EQUAL 5 -#define SLJIT_LESS_EQUAL32 (SLJIT_LESS_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_LESS_EQUAL SLJIT_SET(SLJIT_LESS_EQUAL) #define SLJIT_SIG_LESS 6 -#define SLJIT_SIG_LESS32 (SLJIT_SIG_LESS | SLJIT_I32_OP) #define SLJIT_SET_SIG_LESS SLJIT_SET(SLJIT_SIG_LESS) #define SLJIT_SIG_GREATER_EQUAL 7 -#define SLJIT_SIG_GREATER_EQUAL32 (SLJIT_SIG_GREATER_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_SIG_GREATER_EQUAL SLJIT_SET(SLJIT_SIG_GREATER_EQUAL) #define SLJIT_SIG_GREATER 8 -#define SLJIT_SIG_GREATER32 (SLJIT_SIG_GREATER | SLJIT_I32_OP) #define SLJIT_SET_SIG_GREATER SLJIT_SET(SLJIT_SIG_GREATER) #define SLJIT_SIG_LESS_EQUAL 9 -#define SLJIT_SIG_LESS_EQUAL32 (SLJIT_SIG_LESS_EQUAL | SLJIT_I32_OP) #define SLJIT_SET_SIG_LESS_EQUAL SLJIT_SET(SLJIT_SIG_LESS_EQUAL) #define SLJIT_OVERFLOW 10 -#define SLJIT_OVERFLOW32 (SLJIT_OVERFLOW | SLJIT_I32_OP) #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -#define SLJIT_NOT_OVERFLOW32 (SLJIT_NOT_OVERFLOW | SLJIT_I32_OP) - -#define SLJIT_MUL_OVERFLOW 12 -#define SLJIT_MUL_OVERFLOW32 (SLJIT_MUL_OVERFLOW | SLJIT_I32_OP) -#define SLJIT_SET_MUL_OVERFLOW SLJIT_SET(SLJIT_MUL_OVERFLOW) -#define SLJIT_MUL_NOT_OVERFLOW 13 -#define SLJIT_MUL_NOT_OVERFLOW32 (SLJIT_MUL_NOT_OVERFLOW | SLJIT_I32_OP) /* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */ -#define SLJIT_SET_CARRY SLJIT_SET(14) +#define SLJIT_SET_CARRY SLJIT_SET(12) /* Floating point comparison types. */ -#define SLJIT_EQUAL_F64 16 +#define SLJIT_EQUAL_F64 14 #define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_EQUAL_F SLJIT_SET(SLJIT_EQUAL_F64) -#define SLJIT_NOT_EQUAL_F64 17 +#define SLJIT_NOT_EQUAL_F64 15 #define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_NOT_EQUAL_F SLJIT_SET(SLJIT_NOT_EQUAL_F64) -#define SLJIT_LESS_F64 18 +#define SLJIT_LESS_F64 16 #define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_F32_OP) #define SLJIT_SET_LESS_F SLJIT_SET(SLJIT_LESS_F64) -#define SLJIT_GREATER_EQUAL_F64 19 +#define SLJIT_GREATER_EQUAL_F64 17 #define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_GREATER_EQUAL_F SLJIT_SET(SLJIT_GREATER_EQUAL_F64) -#define SLJIT_GREATER_F64 20 +#define SLJIT_GREATER_F64 18 #define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_F32_OP) #define SLJIT_SET_GREATER_F SLJIT_SET(SLJIT_GREATER_F64) -#define SLJIT_LESS_EQUAL_F64 21 +#define SLJIT_LESS_EQUAL_F64 19 #define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP) #define SLJIT_SET_LESS_EQUAL_F SLJIT_SET(SLJIT_LESS_EQUAL_F64) -#define SLJIT_UNORDERED_F64 22 +#define SLJIT_UNORDERED_F64 20 #define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_F32_OP) #define SLJIT_SET_UNORDERED_F SLJIT_SET(SLJIT_UNORDERED_F64) -#define SLJIT_ORDERED_F64 23 +#define SLJIT_ORDERED_F64 21 #define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_F32_OP) #define SLJIT_SET_ORDERED_F SLJIT_SET(SLJIT_ORDERED_F64) /* Unconditional jump types. */ -#define SLJIT_JUMP 24 +#define SLJIT_JUMP 22 /* Fast calling method. See sljit_emit_fast_enter / SLJIT_FAST_RETURN. */ -#define SLJIT_FAST_CALL 25 +#define SLJIT_FAST_CALL 23 /* Called function must be declared with the SLJIT_FUNC attribute. */ -#define SLJIT_CALL 26 +#define SLJIT_CALL 24 /* Called function must be declared with cdecl attribute. This is the default attribute for C functions. */ -#define SLJIT_CALL_CDECL 27 +#define SLJIT_CALL_CDECL 25 /* The target can be changed during runtime (see: sljit_set_jump_addr). */ #define SLJIT_REWRITABLE_JUMP 0x1000 @@ -1534,8 +1518,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_s32 size); -/* Define the currently available CPU status flags. It is usually used after an - sljit_emit_op_custom call to define which flags are set. */ +/* Flags were set by a 32 bit operation. */ +#define SLJIT_CURRENT_FLAGS_I32_OP SLJIT_I32_OP + +/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */ +#define SLJIT_CURRENT_FLAGS_ADD_SUB 0x01 + +/* Flags were set by a SUB with unused destination. + Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */ +#define SLJIT_CURRENT_FLAGS_COMPARE 0x02 + +/* Define the currently available CPU status flags. It is usually used after + an sljit_emit_label or sljit_emit_op_custom operations to define which CPU + status flags are available. + + The current_flags must be a valid combination of SLJIT_SET_* and + SLJIT_CURRENT_FLAGS_* constants. */ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c index ae8479f031..74cf55fcd2 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c @@ -1197,6 +1197,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_ADD: SLJIT_ASSERT(!(flags & INV_IMM)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1207,6 +1209,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_SUB: SLJIT_ASSERT(!(flags & INV_IMM)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS) @@ -1220,6 +1224,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MUL: SLJIT_ASSERT(!(flags & INV_IMM)); SLJIT_ASSERT(!(src2 & SRC2_IMM)); + compiler->status_flags_state = 0; if (!HAS_FLAGS(op)) return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]); @@ -2153,16 +2158,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * /* Conditional instructions */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type) +static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: - case SLJIT_MUL_NOT_OVERFLOW: case SLJIT_EQUAL_F64: return 0x00000000; case SLJIT_NOT_EQUAL: - case SLJIT_MUL_OVERFLOW: case SLJIT_NOT_EQUAL_F64: return 0x10000000; @@ -2195,10 +2198,16 @@ static sljit_uw get_cc(sljit_s32 type) return 0xd0000000; case SLJIT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x10000000; + case SLJIT_UNORDERED_F64: return 0x60000000; case SLJIT_NOT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x00000000; + case SLJIT_ORDERED_F64: return 0x70000000; @@ -2242,7 +2251,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile if (type >= SLJIT_FAST_CALL) PTR_FAIL_IF(prepare_blx(compiler)); PTR_FAIL_IF(push_inst_with_unique_literal(compiler, ((EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, - type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(type), 0)); + type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(compiler, type), 0)); if (jump->flags & SLJIT_REWRITABLE_JUMP) { jump->addr = compiler->size; @@ -2260,7 +2269,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile if (type >= SLJIT_FAST_CALL) jump->flags |= IS_BL; PTR_FAIL_IF(emit_imm(compiler, TMP_REG1, 0)); - PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(type))); + PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(compiler, type))); jump->addr = compiler->size; #endif return jump; @@ -2589,7 +2598,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co ADJUST_LOCAL_OFFSET(dst, dstw); op = GET_OPCODE(op); - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1; if (op < SLJIT_ADD) { @@ -2629,7 +2638,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil dst_reg &= ~SLJIT_I32_OP; - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { tmp = get_imm(srcw); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c index 52267e7df7..3f0f5fcc30 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c @@ -644,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s imm = -imm; /* Fall through. */ case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; if (imm == 0) { CHECK_FLAGS(1 << 29); return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg)); @@ -781,6 +782,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s break; /* Set flags. */ case SLJIT_NEG: SLJIT_ASSERT(arg1 == TMP_REG1); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; if (flags & SET_FLAGS) inv_bits |= 1 << 29; return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2)); @@ -789,17 +791,20 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2)); case SLJIT_ADD: CHECK_FLAGS(1 << 29); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_ADDC: CHECK_FLAGS(1 << 29); return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUB: CHECK_FLAGS(1 << 29); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUBC: CHECK_FLAGS(1 << 29); return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_MUL: + compiler->status_flags_state = 0; if (!(flags & SET_FLAGS)) return push_inst(compiler, (MADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2) | RT2(TMP_ZERO)); if (flags & INT_OP) { @@ -1600,16 +1605,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * /* Conditional instructions */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type) +static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: - case SLJIT_MUL_NOT_OVERFLOW: case SLJIT_EQUAL_F64: return 0x1; case SLJIT_NOT_EQUAL: - case SLJIT_MUL_OVERFLOW: case SLJIT_NOT_EQUAL_F64: return 0x0; @@ -1642,10 +1645,16 @@ static sljit_uw get_cc(sljit_s32 type) return 0xc; case SLJIT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x0; + case SLJIT_UNORDERED_F64: return 0x7; case SLJIT_NOT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x1; + case SLJIT_ORDERED_F64: return 0x6; @@ -1685,7 +1694,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile if (type < SLJIT_JUMP) { jump->flags |= IS_COND; - PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(type))); + PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(compiler, type))); } else if (type >= SLJIT_FAST_CALL) jump->flags |= IS_BL; @@ -1799,7 +1808,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); ADJUST_LOCAL_OFFSET(dst, dstw); - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; if (GET_OPCODE(op) < SLJIT_ADD) { @@ -1854,7 +1863,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil srcw = 0; } - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); dst_reg &= ~SLJIT_I32_OP; return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src)); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c index 4624882f42..e35dbe99b3 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c @@ -610,6 +610,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s Although some clever things could be done here, "NOT IMM" does not worth the efforts. */ break; case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; nimm = -(sljit_sw)imm; if (IS_2_LO_REGS(reg, dst)) { if (imm <= 0x7) @@ -643,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s break; case SLJIT_SUB: /* SUB operation can be replaced by ADD because of the negative carry flag. */ + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; if (flags & ARG1_IMM) { if (imm == 0 && IS_2_LO_REGS(reg, dst)) return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg)); @@ -801,6 +803,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2))); return SLJIT_SUCCESS; case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; if (IS_3_LO_REGS(dst, arg1, arg2)) return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2)); if (dst == arg1 && !(flags & SET_FLAGS)) @@ -811,6 +814,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; if (flags & UNUSED_RETURN) { if (IS_2_LO_REGS(arg1, arg2)) return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2)); @@ -824,6 +828,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_MUL: + compiler->status_flags_state = 0; if (!(flags & SET_FLAGS)) return push_inst32(compiler, MUL | RD4(dst) | RN4(arg1) | RM4(arg2)); SLJIT_ASSERT(dst != TMP_REG2); @@ -1760,16 +1765,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * /* Conditional instructions */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(sljit_s32 type) +static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: - case SLJIT_MUL_NOT_OVERFLOW: case SLJIT_EQUAL_F64: return 0x0; case SLJIT_NOT_EQUAL: - case SLJIT_MUL_OVERFLOW: case SLJIT_NOT_EQUAL_F64: return 0x1; @@ -1802,10 +1805,16 @@ static sljit_uw get_cc(sljit_s32 type) return 0xd; case SLJIT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x1; + case SLJIT_UNORDERED_F64: return 0x6; case SLJIT_NOT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return 0x0; + case SLJIT_ORDERED_F64: return 0x7; @@ -1847,7 +1856,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile PTR_FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0)); if (type < SLJIT_JUMP) { jump->flags |= IS_COND; - cc = get_cc(type); + cc = get_cc(compiler, type); jump->flags |= cc << 8; PTR_FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); } @@ -2177,7 +2186,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co ADJUST_LOCAL_OFFSET(dst, dstw); op = GET_OPCODE(op); - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; if (op < SLJIT_ADD) { @@ -2229,7 +2238,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil dst_reg &= ~SLJIT_I32_OP; - cc = get_cc(type & 0xff); + cc = get_cc(compiler, type & 0xff); if (!(src & SLJIT_IMM)) { FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c index f887ee1311..a90345f1f8 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c @@ -367,7 +367,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MUL: SLJIT_ASSERT(!(flags & SRC2_IMM)); - if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) { + if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */ diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c index 5ab9b7d06b..1f22e49ed9 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c @@ -458,7 +458,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MUL: SLJIT_ASSERT(!(flags & SRC2_IMM)); - if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) { + if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst)); #elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c index ecf4dac4c8..fd747695a7 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c @@ -1377,6 +1377,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); case SLJIT_NEG: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw); case SLJIT_CLZ: @@ -1424,13 +1425,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_MUL: + compiler->status_flags_state = 0; return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_AND: @@ -1860,7 +1864,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_LESS: case SLJIT_SIG_GREATER: case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: BR_Z(OTHER_FLAG); break; case SLJIT_GREATER_EQUAL: @@ -1868,7 +1871,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_GREATER_EQUAL: case SLJIT_SIG_LESS_EQUAL: case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: BR_NZ(OTHER_FLAG); break; case SLJIT_NOT_EQUAL_F64: @@ -2127,8 +2129,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co FAIL_IF(push_inst(compiler, SLTIU | SA(EQUAL_FLAG) | TA(dst_ar) | IMM(1), dst_ar)); src_ar = dst_ar; break; - case SLJIT_MUL_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: + case SLJIT_OVERFLOW: + case SLJIT_NOT_OVERFLOW: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) { + src_ar = OTHER_FLAG; + break; + } FAIL_IF(push_inst(compiler, SLTIU | SA(OTHER_FLAG) | TA(dst_ar) | IMM(1), dst_ar)); src_ar = dst_ar; type ^= 0x1; /* Flip type bit for the XORI below. */ @@ -2219,7 +2225,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil case SLJIT_SIG_LESS: case SLJIT_SIG_GREATER: case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: ins = MOVN | TA(OTHER_FLAG); break; case SLJIT_GREATER_EQUAL: @@ -2227,7 +2232,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil case SLJIT_SIG_GREATER_EQUAL: case SLJIT_SIG_LESS_EQUAL: case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: ins = MOVZ | TA(OTHER_FLAG); break; case SLJIT_EQUAL_F64: diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c index 7d9ec5338f..6ddb5508ec 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c @@ -119,9 +119,10 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(src2 == TMP_REG2); return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm); } + SLJIT_ASSERT(!(flags & ALT_FORM4)); if (!(flags & ALT_SET_FLAGS)) return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)); - if (flags & ALT_FORM4) + if (flags & ALT_FORM5) return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2)); return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2)); @@ -143,24 +144,29 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl } if (flags & ALT_FORM2) { + if (flags & ALT_FORM3) { + FAIL_IF(push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm)); + if (!(flags & ALT_FORM4)) + return SLJIT_SUCCESS; + return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff)); + } + FAIL_IF(push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2))); + if (!(flags & ALT_FORM4)) + return SLJIT_SUCCESS; + return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + + if (flags & ALT_FORM3) { /* Setting XER SO is not enough, CR SO is also needed. */ return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); } - if (flags & ALT_FORM3) { + if (flags & ALT_FORM4) { /* Flags does not set: BIN_IMM_EXTS unnecessary. */ SLJIT_ASSERT(src2 == TMP_REG2); return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (flags & ALT_FORM4) { - if (flags & ALT_FORM5) { - SLJIT_ASSERT(src2 == TMP_REG2); - return push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm); - } - return push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)); - } - if (!(flags & ALT_SET_FLAGS)) return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); if (flags & ALT_FORM5) diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c index 92147d2a5d..cbdf2dd8a2 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c @@ -252,10 +252,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl BIN_IMM_EXTS(); return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm); } + if (flags & ALT_FORM4) { + if (flags & ALT_FORM5) + FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm)); + else + FAIL_IF(push_inst(compiler, ADD | D(dst) | A(src1) | B(src2))); + return push_inst(compiler, CMPI | A(dst) | 0); + } if (!(flags & ALT_SET_FLAGS)) return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)); BIN_EXTS(); - if (flags & ALT_FORM4) + if (flags & ALT_FORM5) return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2)); return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2)); @@ -278,6 +285,19 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl } if (flags & ALT_FORM2) { + if (flags & ALT_FORM3) { + FAIL_IF(push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm)); + if (!(flags & ALT_FORM4)) + return SLJIT_SUCCESS; + return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff)); + } + FAIL_IF(push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2))); + if (!(flags & ALT_FORM4)) + return SLJIT_SUCCESS; + return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + + if (flags & ALT_FORM3) { if (flags & ALT_SIGN_EXT) { FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); src1 = TMP_REG1; @@ -291,20 +311,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return SLJIT_SUCCESS; } - if (flags & ALT_FORM3) { + if (flags & ALT_FORM4) { /* Flags does not set: BIN_IMM_EXTS unnecessary. */ SLJIT_ASSERT(src2 == TMP_REG2); return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (flags & ALT_FORM4) { - if (flags & ALT_FORM5) { - SLJIT_ASSERT(src2 == TMP_REG2); - return push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm); - } - return push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)); - } - if (!(flags & ALT_SET_FLAGS)) return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); BIN_EXTS(); diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c index d84562ce09..2174dbb07b 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c @@ -1324,6 +1324,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ((src) & SLJIT_IMM) #endif +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) +#define TEST_ADD_FORM1(op) \ + (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ + || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY)) +#define TEST_SUB_FORM2(op) \ + ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \ + || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z)) +#define TEST_SUB_FORM3(op) \ + (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ + || (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) +#else +#define TEST_ADD_FORM1(op) \ + (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) +#define TEST_SUB_FORM2(op) \ + (GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) +#define TEST_SUB_FORM3(op) \ + (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) +#endif + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, @@ -1362,7 +1381,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: - if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) + if (TEST_ADD_FORM1(op)) return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w); if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) { @@ -1392,6 +1411,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); } } + +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) { + if (TEST_SL_IMM(src2, src2w)) { + compiler->imm = src2w & 0xffff; + return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0); + } + if (TEST_SL_IMM(src1, src1w)) { + compiler->imm = src1w & 0xffff; + return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0); + } + return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); + } +#endif if (HAS_FLAGS(op)) { if (TEST_SL_IMM(src2, src2w)) { compiler->imm = src2w & 0xffff; @@ -1402,7 +1435,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } } - return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM4 : 0), dst, dstw, src1, src1w, src2, src2w); + return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); case SLJIT_ADDC: return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w); @@ -1424,18 +1457,36 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); } - if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) + if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { + if (TEST_SL_IMM(src2, src2w)) { + compiler->imm = src2w & 0xffff; + return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); + } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w); + } - if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) { - if (TEST_SL_IMM(src2, -src2w)) { - compiler->imm = (-src2w) & 0xffff; - return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); - } - if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; - return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); + if (TEST_SUB_FORM2(op)) { + if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) { + compiler->imm = src2w & 0xffff; + return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } + return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); + } + + if (TEST_SUB_FORM3(op)) + return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); + + if (TEST_SL_IMM(src2, -src2w)) { + compiler->imm = (-src2w) & 0xffff; + return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0); + } + + if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) { + compiler->imm = src1w & 0xffff; + return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); + } + + if (!HAS_FLAGS(op)) { if (TEST_SH_IMM(src2, -src2w)) { compiler->imm = ((-src2w) >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); @@ -1447,18 +1498,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile } } - if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) != GET_FLAG_TYPE(SLJIT_SET_CARRY)) { - if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; - return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0); - } - return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); - } - - if (TEST_SL_IMM(src2, -src2w)) { - compiler->imm = (-src2w) & 0xffff; - return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); - } /* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */ return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); @@ -1536,6 +1575,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +#undef TEST_ADD_FORM1 +#undef TEST_SUB_FORM2 +#undef TEST_SUB_FORM3 + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1941,11 +1984,9 @@ static sljit_ins get_bo_bi_flags(sljit_s32 type) return (4 << 21) | ((4 + 1) << 16); case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: return (12 << 21) | (3 << 16); case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: return (4 << 21) | (3 << 16); case SLJIT_EQUAL_F64: @@ -2143,12 +2184,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co break; case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: cr_bit = 3; break; case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: cr_bit = 3; invert = 1; break; diff --git a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c index a8b65112d4..716491ec72 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c @@ -42,10 +42,10 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) typedef sljit_uw sljit_ins; /* Instruction tags (most significant halfword). */ -const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; +static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = { - 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1 + 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1 }; /* there are also a[2-15] available, but they are slower to access and @@ -66,22 +66,22 @@ typedef sljit_uw sljit_gpr; * will be retired ASAP (TODO: carenas) */ -const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */ -const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */ -const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */ -const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */ -const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */ -const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */ -const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */ -const sljit_gpr r7 = 7; /* reg_map[6] */ -const sljit_gpr r8 = 8; /* reg_map[7] */ -const sljit_gpr r9 = 9; /* reg_map[8] */ -const sljit_gpr r10 = 10; /* reg_map[9] */ -const sljit_gpr r11 = 11; /* reg_map[10] */ -const sljit_gpr r12 = 12; /* reg_map[11]: GOT */ -const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */ -const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */ -const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */ +static const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */ +static const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */ +static const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */ +static const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */ +static const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */ +static const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */ +static const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */ +static const sljit_gpr r7 = 7; /* reg_map[6] */ +static const sljit_gpr r8 = 8; /* reg_map[7] */ +static const sljit_gpr r9 = 9; /* reg_map[8] */ +static const sljit_gpr r10 = 10; /* reg_map[9] */ +static const sljit_gpr r11 = 11; /* reg_map[10] */ +static const sljit_gpr r12 = 12; /* reg_map[11]: GOT */ +static const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */ +static const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */ +static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */ /* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */ /* TODO(carenas): r12 might conflict in PIC code, reserve? */ @@ -100,8 +100,8 @@ const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack point /* Link registers. The normal link register is r14, but since we use that for flags we need to use r0 instead to do fast calls so that flags are preserved. */ -const sljit_gpr link_r = 14; /* r14 */ -const sljit_gpr fast_link_r = 0; /* r0 */ +static const sljit_gpr link_r = 14; /* r14 */ +static const sljit_gpr fast_link_r = 0; /* r0 */ /* Flag register layout: @@ -110,7 +110,7 @@ const sljit_gpr fast_link_r = 0; /* r0 */ | ZERO | 0 | 0 | C C |///////| +---------------+---+---+-------+-------+ */ -const sljit_gpr flag_r = 14; /* r14 */ +static const sljit_gpr flag_r = 14; /* r14 */ struct sljit_s390x_const { struct sljit_const const_; /* must be first */ @@ -120,8 +120,7 @@ struct sljit_s390x_const { /* Convert SLJIT register to hardware register. */ static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r) { - SLJIT_ASSERT(r != SLJIT_UNUSED); - SLJIT_ASSERT(r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0]))); + SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0]))); return reg_map[r]; } @@ -172,51 +171,93 @@ static sljit_s32 encode_inst(void **ptr, sljit_ins ins) return SLJIT_SUCCESS; } +#define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \ + (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB) + /* Map the given type to a 4-bit condition code mask. */ -static SLJIT_INLINE sljit_u8 get_cc(sljit_s32 type) { - const sljit_u8 eq = 1 << 3; /* equal {,to zero} */ - const sljit_u8 lt = 1 << 2; /* less than {,zero} */ - const sljit_u8 gt = 1 << 1; /* greater than {,zero} */ - const sljit_u8 ov = 1 << 0; /* {overflow,NaN} */ +static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) { + const sljit_u8 cc0 = 1 << 3; /* equal {,to zero} */ + const sljit_u8 cc1 = 1 << 2; /* less than {,zero} */ + const sljit_u8 cc2 = 1 << 1; /* greater than {,zero} */ + const sljit_u8 cc3 = 1 << 0; /* {overflow,NaN} */ switch (type) { case SLJIT_EQUAL: + if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) { + sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state); + if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL) + return cc0; + if (type == SLJIT_OVERFLOW) + return (cc0 | cc3); + return (cc0 | cc2); + } + case SLJIT_EQUAL_F64: - return eq; + return cc0; case SLJIT_NOT_EQUAL: + if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) { + sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state); + if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL) + return (cc1 | cc2 | cc3); + if (type == SLJIT_OVERFLOW) + return (cc1 | cc2); + return (cc1 | cc3); + } + case SLJIT_NOT_EQUAL_F64: - return ~eq; + return (cc1 | cc2 | cc3); case SLJIT_LESS: + return cc1; + + case SLJIT_GREATER_EQUAL: + return (cc0 | cc2 | cc3); + + case SLJIT_GREATER: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE) + return cc2; + return cc3; + + case SLJIT_LESS_EQUAL: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE) + return (cc0 | cc1); + return (cc0 | cc1 | cc2); + case SLJIT_SIG_LESS: case SLJIT_LESS_F64: - return lt; + return cc1; - case SLJIT_LESS_EQUAL: case SLJIT_SIG_LESS_EQUAL: case SLJIT_LESS_EQUAL_F64: - return (lt | eq); + return (cc0 | cc1); - case SLJIT_GREATER: case SLJIT_SIG_GREATER: - case SLJIT_GREATER_F64: - return gt; + /* Overflow is considered greater, see SLJIT_SUB. */ + return cc2 | cc3; - case SLJIT_GREATER_EQUAL: case SLJIT_SIG_GREATER_EQUAL: - case SLJIT_GREATER_EQUAL_F64: - return (gt | eq); + return (cc0 | cc2 | cc3); case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: + if (compiler->status_flags_state & SLJIT_SET_Z) + return (cc2 | cc3); + case SLJIT_UNORDERED_F64: - return ov; + return cc3; case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: + if (compiler->status_flags_state & SLJIT_SET_Z) + return (cc0 | cc1); + case SLJIT_ORDERED_F64: - return ~ov; + return (cc0 | cc1 | cc2); + + case SLJIT_GREATER_F64: + return cc2; + + case SLJIT_GREATER_EQUAL_F64: + return (cc0 | cc2); } SLJIT_UNREACHABLE(); @@ -346,19 +387,20 @@ HAVE_FACILITY(have_misc2, MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY) #define is_u32(d) (0 <= (d) && (d) <= 0xffffffffL) #define CHECK_SIGNED(v, bitlen) \ - ((v) == (((v) << (sizeof(v) * 8 - bitlen)) >> (sizeof(v) * 8 - bitlen))) + ((v) >= -(1 << ((bitlen) - 1)) && (v) < (1 << ((bitlen) - 1))) +#define is_s8(d) CHECK_SIGNED((d), 8) #define is_s16(d) CHECK_SIGNED((d), 16) #define is_s20(d) CHECK_SIGNED((d), 20) -#define is_s32(d) CHECK_SIGNED((d), 32) +#define is_s32(d) ((d) == (sljit_s32)(d)) -static SLJIT_INLINE sljit_uw disp_s20(sljit_s32 d) +static SLJIT_INLINE sljit_ins disp_s20(sljit_s32 d) { + SLJIT_ASSERT(is_s20(d)); + sljit_uw dh = (d >> 12) & 0xff; sljit_uw dl = (d << 8) & 0xfff00; - - SLJIT_ASSERT(is_s20(d)); - return dh | dl; + return (dh | dl) << 8; } /* TODO(carenas): variadic macro is not strictly needed */ @@ -372,12 +414,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \ return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \ } -/* ADD */ -SLJIT_S390X_RR(ar, 0x1a00) - -/* ADD LOGICAL */ -SLJIT_S390X_RR(alr, 0x1e00) - /* AND */ SLJIT_S390X_RR(nr, 0x1400) @@ -387,12 +423,6 @@ SLJIT_S390X_RR(basr, 0x0d00) /* BRANCH ON CONDITION */ SLJIT_S390X_RR(bcr, 0x0700) /* TODO(mundaym): type for mask? */ -/* COMPARE */ -SLJIT_S390X_RR(cr, 0x1900) - -/* COMPARE LOGICAL */ -SLJIT_S390X_RR(clr, 0x1500) - /* DIVIDE */ SLJIT_S390X_RR(dr, 0x1d00) @@ -408,12 +438,6 @@ SLJIT_S390X_RR(lcr, 0x1300) /* OR */ SLJIT_S390X_RR(or, 0x1600) -/* SUBTRACT */ -SLJIT_S390X_RR(sr, 0x1b00) - -/* SUBTRACT LOGICAL */ -SLJIT_S390X_RR(slr, 0x1f00) - #undef SLJIT_S390X_RR /* RRE form instructions */ @@ -423,25 +447,9 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \ return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \ } -/* ADD */ -SLJIT_S390X_RRE(agr, 0xb9080000) - -/* ADD LOGICAL */ -SLJIT_S390X_RRE(algr, 0xb90a0000) - -/* ADD LOGICAL WITH CARRY */ -SLJIT_S390X_RRE(alcr, 0xb9980000) -SLJIT_S390X_RRE(alcgr, 0xb9880000) - /* AND */ SLJIT_S390X_RRE(ngr, 0xb9800000) -/* COMPARE */ -SLJIT_S390X_RRE(cgr, 0xb9200000) - -/* COMPARE LOGICAL */ -SLJIT_S390X_RRE(clgr, 0xb9210000) - /* DIVIDE LOGICAL */ SLJIT_S390X_RRE(dlr, 0xb9970000) SLJIT_S390X_RRE(dlgr, 0xb9870000) @@ -482,8 +490,6 @@ SLJIT_S390X_RRE(llghr, 0xb9850000) SLJIT_S390X_RRE(mlgr, 0xb9860000) /* MULTIPLY SINGLE */ -SLJIT_S390X_RRE(msr, 0xb2520000) -SLJIT_S390X_RRE(msgr, 0xb90c0000) SLJIT_S390X_RRE(msgfr, 0xb91c0000) /* OR */ @@ -492,13 +498,6 @@ SLJIT_S390X_RRE(ogr, 0xb9810000) /* SUBTRACT */ SLJIT_S390X_RRE(sgr, 0xb9090000) -/* SUBTRACT LOGICAL */ -SLJIT_S390X_RRE(slgr, 0xb90b0000) - -/* SUBTRACT LOGICAL WITH BORROW */ -SLJIT_S390X_RRE(slbr, 0xb9990000) -SLJIT_S390X_RRE(slbgr, 0xb9890000) - #undef SLJIT_S390X_RRE /* RI-a form instructions */ @@ -509,13 +508,8 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ } /* ADD HALFWORD IMMEDIATE */ -SLJIT_S390X_RIA(ahi, 0xa70a0000, sljit_s16) SLJIT_S390X_RIA(aghi, 0xa70b0000, sljit_s16) -/* COMPARE HALFWORD IMMEDIATE */ -SLJIT_S390X_RIA(chi, 0xa70e0000, sljit_s16) -SLJIT_S390X_RIA(cghi, 0xa70f0000, sljit_s16) - /* LOAD HALFWORD IMMEDIATE */ SLJIT_S390X_RIA(lhi, 0xa7080000, sljit_s16) SLJIT_S390X_RIA(lghi, 0xa7090000, sljit_s16) @@ -533,9 +527,6 @@ SLJIT_S390X_RIA(mghi, 0xa70d0000, sljit_s16) /* OR IMMEDIATE */ SLJIT_S390X_RIA(oilh, 0xa50a0000, sljit_u16) -/* TEST UNDER MASK */ -SLJIT_S390X_RIA(tmlh, 0xa7000000, sljit_u16) - #undef SLJIT_S390X_RIA /* RIL-a form instructions (requires extended immediate facility) */ @@ -547,30 +538,13 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ } /* ADD IMMEDIATE */ -SLJIT_S390X_RILA(afi, 0xc20900000000, sljit_s32) SLJIT_S390X_RILA(agfi, 0xc20800000000, sljit_s32) /* ADD IMMEDIATE HIGH */ SLJIT_S390X_RILA(aih, 0xcc0800000000, sljit_s32) /* TODO(mundaym): high-word facility? */ -/* ADD LOGICAL IMMEDIATE */ -SLJIT_S390X_RILA(alfi, 0xc20b00000000, sljit_u32) -SLJIT_S390X_RILA(algfi, 0xc20a00000000, sljit_u32) - /* AND IMMEDIATE */ SLJIT_S390X_RILA(nihf, 0xc00a00000000, sljit_u32) -SLJIT_S390X_RILA(nilf, 0xc00b00000000, sljit_u32) - -/* COMPARE IMMEDIATE */ -SLJIT_S390X_RILA(cfi, 0xc20d00000000, sljit_s32) -SLJIT_S390X_RILA(cgfi, 0xc20c00000000, sljit_s32) - -/* COMPARE IMMEDIATE HIGH */ -SLJIT_S390X_RILA(cih, 0xcc0d00000000, sljit_s32) /* TODO(mundaym): high-word facility? */ - -/* COMPARE LOGICAL IMMEDIATE */ -SLJIT_S390X_RILA(clfi, 0xc20f00000000, sljit_u32) -SLJIT_S390X_RILA(clgfi, 0xc20e00000000, sljit_u32) /* EXCLUSIVE OR IMMEDIATE */ SLJIT_S390X_RILA(xilf, 0xc00700000000, sljit_u32) @@ -586,8 +560,8 @@ SLJIT_S390X_RILA(lgfi, 0xc00100000000, sljit_s32) SLJIT_S390X_RILA(llihf, 0xc00e00000000, sljit_u32) SLJIT_S390X_RILA(llilf, 0xc00f00000000, sljit_u32) -/* OR IMMEDIATE */ -SLJIT_S390X_RILA(oilf, 0xc00d00000000, sljit_u32) +/* SUBTRACT LOGICAL IMMEDIATE */ +SLJIT_S390X_RILA(slfi, 0xc20500000000, sljit_u32) #undef SLJIT_S390X_RILA @@ -606,18 +580,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b return (pattern) | ri | xi | bi | di; \ } -/* ADD */ -SLJIT_S390X_RXA(a, 0x5a000000) - -/* ADD LOGICAL */ -SLJIT_S390X_RXA(al, 0x5e000000) - -/* AND */ -SLJIT_S390X_RXA(n, 0x54000000) - -/* EXCLUSIVE OR */ -SLJIT_S390X_RXA(x, 0x57000000) - /* LOAD */ SLJIT_S390X_RXA(l, 0x58000000) @@ -630,9 +592,6 @@ SLJIT_S390X_RXA(lh, 0x48000000) /* MULTIPLY SINGLE */ SLJIT_S390X_RXA(ms, 0x71000000) -/* OR */ -SLJIT_S390X_RXA(o, 0x56000000) - /* STORE */ SLJIT_S390X_RXA(st, 0x50000000) @@ -642,12 +601,6 @@ SLJIT_S390X_RXA(stc, 0x42000000) /* STORE HALFWORD */ SLJIT_S390X_RXA(sth, 0x40000000) -/* SUBTRACT */ -SLJIT_S390X_RXA(s, 0x5b000000) - -/* SUBTRACT LOGICAL */ -SLJIT_S390X_RXA(sl, 0x5f000000) - #undef SLJIT_S390X_RXA /* RXY-a instructions */ @@ -660,31 +613,11 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b ri = (sljit_ins)(r & 0xf) << 36; \ xi = (sljit_ins)(x & 0xf) << 32; \ bi = (sljit_ins)(b & 0xf) << 28; \ - di = (sljit_ins)disp_s20(d) << 8; \ + di = disp_s20(d); \ \ return (pattern) | ri | xi | bi | di; \ } -/* ADD */ -SLJIT_S390X_RXYA(ay, 0xe3000000005a, have_ldisp()) -SLJIT_S390X_RXYA(ag, 0xe30000000008, 1) - -/* ADD LOGICAL */ -SLJIT_S390X_RXYA(aly, 0xe3000000005e, have_ldisp()) -SLJIT_S390X_RXYA(alg, 0xe3000000000a, 1) - -/* ADD LOGICAL WITH CARRY */ -SLJIT_S390X_RXYA(alc, 0xe30000000098, 1) -SLJIT_S390X_RXYA(alcg, 0xe30000000088, 1) - -/* AND */ -SLJIT_S390X_RXYA(ny, 0xe30000000054, have_ldisp()) -SLJIT_S390X_RXYA(ng, 0xe30000000080, 1) - -/* EXCLUSIVE OR */ -SLJIT_S390X_RXYA(xy, 0xe30000000057, have_ldisp()) -SLJIT_S390X_RXYA(xg, 0xe30000000082, 1) - /* LOAD */ SLJIT_S390X_RXYA(ly, 0xe30000000058, have_ldisp()) SLJIT_S390X_RXYA(lg, 0xe30000000004, 1) @@ -713,10 +646,6 @@ SLJIT_S390X_RXYA(llgh, 0xe30000000091, 1) SLJIT_S390X_RXYA(msy, 0xe30000000051, have_ldisp()) SLJIT_S390X_RXYA(msg, 0xe3000000000c, 1) -/* OR */ -SLJIT_S390X_RXYA(oy, 0xe30000000056, have_ldisp()) -SLJIT_S390X_RXYA(og, 0xe30000000081, 1) - /* STORE */ SLJIT_S390X_RXYA(sty, 0xe30000000050, have_ldisp()) SLJIT_S390X_RXYA(stg, 0xe30000000024, 1) @@ -727,41 +656,8 @@ SLJIT_S390X_RXYA(stcy, 0xe30000000072, have_ldisp()) /* STORE HALFWORD */ SLJIT_S390X_RXYA(sthy, 0xe30000000070, have_ldisp()) -/* SUBTRACT */ -SLJIT_S390X_RXYA(sy, 0xe3000000005b, have_ldisp()) -SLJIT_S390X_RXYA(sg, 0xe30000000009, 1) - -/* SUBTRACT LOGICAL */ -SLJIT_S390X_RXYA(sly, 0xe3000000005f, have_ldisp()) -SLJIT_S390X_RXYA(slg, 0xe3000000000b, 1) - -/* SUBTRACT LOGICAL WITH BORROW */ -SLJIT_S390X_RXYA(slb, 0xe30000000099, 1) -SLJIT_S390X_RXYA(slbg, 0xe30000000089, 1) - #undef SLJIT_S390X_RXYA -/* RS-a instructions */ -#define SLJIT_S390X_RSA(name, pattern) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw d, sljit_gpr b) \ -{ \ - sljit_ins r1 = (sljit_ins)(reg & 0xf) << 20; \ - sljit_ins b2 = (sljit_ins)(b & 0xf) << 12; \ - sljit_ins d2 = (sljit_ins)(d & 0xfff); \ - return (pattern) | r1 | b2 | d2; \ -} - -/* SHIFT LEFT SINGLE LOGICAL */ -SLJIT_S390X_RSA(sll, 0x89000000) - -/* SHIFT RIGHT SINGLE */ -SLJIT_S390X_RSA(sra, 0x8a000000) - -/* SHIFT RIGHT SINGLE LOGICAL */ -SLJIT_S390X_RSA(srl, 0x88000000) - -#undef SLJIT_S390X_RSA - /* RSY-a instructions */ #define SLJIT_S390X_RSYA(name, pattern, cond) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \ @@ -772,7 +668,7 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gp r1 = (sljit_ins)(dst & 0xf) << 36; \ r3 = (sljit_ins)(src & 0xf) << 32; \ b2 = (sljit_ins)(b & 0xf) << 28; \ - d2 = (sljit_ins)disp_s20(d) << 8; \ + d2 = disp_s20(d); \ \ return (pattern) | r1 | r3 | b2 | d2; \ } @@ -786,9 +682,6 @@ SLJIT_S390X_RSYA(sllg, 0xeb000000000d, 1) /* SHIFT RIGHT SINGLE */ SLJIT_S390X_RSYA(srag, 0xeb000000000a, 1) -/* SHIFT RIGHT SINGLE LOGICAL */ -SLJIT_S390X_RSYA(srlg, 0xeb000000000c, 1) - /* STORE MULTIPLE */ SLJIT_S390X_RSYA(stmg, 0xeb0000000024, 1) @@ -831,26 +724,6 @@ SLJIT_S390X_RIEF(risbhg, 0xec000000005d) #undef SLJIT_S390X_RIEF -/* RRF-a instructions */ -#define SLJIT_S390X_RRFA(name, pattern, cond) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src1, sljit_gpr src2) \ -{ \ - sljit_ins r1, r2, r3; \ -\ - SLJIT_ASSERT(cond); \ - r1 = (sljit_ins)(dst & 0xf) << 4; \ - r2 = (sljit_ins)(src1 & 0xf); \ - r3 = (sljit_ins)(src2 & 0xf) << 12; \ -\ - return (pattern) | r3 | r1 | r2; \ -} - -/* MULTIPLY */ -SLJIT_S390X_RRFA(msrkc, 0xb9fd0000, have_misc2()) -SLJIT_S390X_RRFA(msgrkc, 0xb9ed0000, have_misc2()) - -#undef SLJIT_S390X_RRFA - /* RRF-c instructions (require load/store-on-condition 1 facility) */ #define SLJIT_S390X_RRFC(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \ @@ -919,6 +792,13 @@ SLJIT_S390X_INSTRUCTION(br, sljit_gpr target) return 0x07f0 | target; } +SLJIT_S390X_INSTRUCTION(brc, sljit_uw mask, sljit_sw target) +{ + sljit_ins m1 = (sljit_ins)(mask & 0xf) << 20; + sljit_ins ri2 = (sljit_ins)target & 0xffff; + return 0xa7040000L | m1 | ri2; +} + SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target) { sljit_ins m1 = (sljit_ins)(mask & 0xf) << 36; @@ -940,6 +820,12 @@ SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst) return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4); } +/* SET PROGRAM MASK */ +SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst) +{ + return 0x0400 | ((sljit_ins)(dst & 0xf) << 4); +} + /* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */ SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot) { @@ -948,30 +834,20 @@ SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, s #undef SLJIT_S390X_INSTRUCTION -/* load condition code as needed to match type */ -static sljit_s32 push_load_cc(struct sljit_compiler *compiler, sljit_s32 type) +static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr dst_r) { - type &= ~SLJIT_I32_OP; - switch (type) { - case SLJIT_ZERO: - case SLJIT_NOT_ZERO: - return push_inst(compiler, cih(flag_r, 0)); - break; - default: - return push_inst(compiler, tmlh(flag_r, 0x3000)); - break; - } - return SLJIT_SUCCESS; -} - -static sljit_s32 push_store_zero_flag(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr source) -{ - /* insert low 32-bits into high 32-bits of flag register */ - FAIL_IF(push_inst(compiler, risbhgz(flag_r, source, 0, 31, 32))); - if (!(op & SLJIT_I32_OP)) { - /* OR high 32-bits with high 32-bits of flag register */ - return push_inst(compiler, rosbg(flag_r, source, 0, 31, 0)); - } + /* Condition codes: bits 18 and 19. + Transformation: + 0 (zero and no overflow) : unchanged + 1 (non-zero and no overflow) : unchanged + 2 (zero and overflow) : decreased by 1 + 3 (non-zero and overflow) : decreased by 1 if non-zero */ + FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1))); + FAIL_IF(push_inst(compiler, ipm(flag_r))); + FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r))); + FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3))); + FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000))); + FAIL_IF(push_inst(compiler, spm(flag_r))); return SLJIT_SUCCESS; } @@ -1088,18 +964,19 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler, #define WHEN(cond, r, i1, i2, addr) \ (cond) ? EVAL(i1, r, addr) : EVAL(i2, r, addr) +/* May clobber tmp1. */ static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst, sljit_s32 src, sljit_sw srcw, - sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit) + sljit_s32 is_32bit) { struct addr addr; sljit_ins ins; SLJIT_ASSERT(src & SLJIT_MEM); if (have_ldisp() || !is_32bit) - FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp)); + FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp1)); else - FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp)); + FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1)); if (is_32bit) ins = WHEN(is_u12(addr.offset), dst, l, ly, addr); @@ -1109,18 +986,19 @@ static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst, return push_inst(compiler, ins); } +/* May clobber tmp1. */ static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src, sljit_s32 dst, sljit_sw dstw, - sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit) + sljit_s32 is_32bit) { struct addr addr; sljit_ins ins; SLJIT_ASSERT(dst & SLJIT_MEM); if (have_ldisp() || !is_32bit) - FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp)); + FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp1)); else - FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp)); + FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp1)); if (is_32bit) ins = WHEN(is_u12(addr.offset), src, st, sty, addr); @@ -1132,6 +1010,358 @@ static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src, #undef WHEN +static sljit_s32 emit_move(struct sljit_compiler *compiler, + sljit_gpr dst_r, + sljit_s32 src, sljit_sw srcw) +{ + SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK)); + + if (src & SLJIT_IMM) + return push_load_imm_inst(compiler, dst_r, srcw); + + if (src & SLJIT_MEM) + return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0); + + sljit_gpr src_r = gpr(src & REG_MASK); + return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r)); +} + +static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_gpr dst_r = tmp0; + sljit_gpr src_r = tmp1; + sljit_s32 needs_move = 1; + + if (SLOW_IS_REG(dst)) { + dst_r = gpr(dst & REG_MASK); + + if (dst == src1) + needs_move = 0; + else if (dst == src2) { + dst_r = tmp0; + needs_move = 2; + } + } + + if (needs_move) + FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); + + if (FAST_IS_REG(src2)) + src_r = gpr(src2 & REG_MASK); + else + FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); + + FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r)); + + if (needs_move != 2) + return SLJIT_SUCCESS; + + dst_r = gpr(dst & REG_MASK); + return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); +} + +static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr src1_r = tmp0; + sljit_gpr src2_r = tmp1; + + if (FAST_IS_REG(src1)) + src1_r = gpr(src1 & REG_MASK); + else + FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); + + if (FAST_IS_REG(src2)) + src2_r = gpr(src2 & REG_MASK); + else + FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); + + return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12)); +} + +typedef enum { + RI_A, + RIL_A, +} emit_ril_type; + +static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w, + sljit_sw src2w, + emit_ril_type type) +{ + sljit_gpr dst_r = tmp0; + sljit_s32 needs_move = 1; + + if (SLOW_IS_REG(dst)) { + dst_r = gpr(dst & REG_MASK); + + if (dst == src1) + needs_move = 0; + } + + if (needs_move) + FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); + + if (type == RIL_A) + return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff)); + return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff)); +} + +static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w, + sljit_sw src2w) +{ + sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr src_r = tmp0; + + if (!SLOW_IS_REG(src1)) + FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); + else + src_r = gpr(src1 & REG_MASK); + + return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16); +} + +typedef enum { + RX_A, + RXY_A, +} emit_rx_type; + +static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w, + emit_rx_type type) +{ + sljit_gpr dst_r = tmp0; + sljit_s32 needs_move = 1; + sljit_gpr base, index; + + SLJIT_ASSERT(src2 & SLJIT_MEM); + + if (SLOW_IS_REG(dst)) { + dst_r = gpr(dst); + + if (dst == src1) + needs_move = 0; + else if (dst == (src2 & REG_MASK) || (dst == OFFS_REG(src2))) { + dst_r = tmp0; + needs_move = 2; + } + } + + if (needs_move) + FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); + + base = gpr(src2 & REG_MASK); + index = tmp0; + + if (src2 & OFFS_REG_MASK) { + index = gpr(OFFS_REG(src2)); + + if (src2w != 0) { + FAIL_IF(push_inst(compiler, sllg(tmp1, index, src2w & 0x3, 0))); + src2w = 0; + index = tmp1; + } + } else if ((type == RX_A && !is_u12(src2w)) || (type == RXY_A && !is_s20(src2w))) { + FAIL_IF(push_load_imm_inst(compiler, tmp1, src2w)); + + if (src2 & REG_MASK) + index = tmp1; + else + base = tmp1; + src2w = 0; + } + + if (type == RX_A) + ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w; + else + ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w); + + FAIL_IF(push_inst(compiler, ins)); + + if (needs_move != 2) + return SLJIT_SUCCESS; + + dst_r = gpr(dst); + return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); +} + +static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, sljit_sw dstw, + sljit_sw srcw) +{ + SLJIT_ASSERT(dst & SLJIT_MEM); + + sljit_gpr dst_r = tmp1; + + if (dst & OFFS_REG_MASK) { + sljit_gpr index = tmp1; + + if ((dstw & 0x3) == 0) + index = gpr(OFFS_REG(dst)); + else + FAIL_IF(push_inst(compiler, sllg(tmp1, index, dstw & 0x3, 0))); + + FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, index))); + dstw = 0; + } + else if (!is_s20(dstw)) { + FAIL_IF(push_load_imm_inst(compiler, tmp1, dstw)); + + if (dst & REG_MASK) + FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, tmp1))); + + dstw = 0; + } + else + dst_r = gpr(dst & REG_MASK); + + return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw)); +} + +struct ins_forms { + sljit_ins op_r; + sljit_ins op_gr; + sljit_ins op_rk; + sljit_ins op_grk; + sljit_ins op; + sljit_ins op_y; + sljit_ins op_g; +}; + +static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 mode = compiler->mode; + sljit_ins ins, ins_k; + + if ((src1 | src2) & SLJIT_MEM) { + sljit_ins ins12, ins20; + + if (mode & SLJIT_I32_OP) { + ins12 = forms->op; + ins20 = forms->op_y; + } + else { + ins12 = 0; + ins20 = forms->op_g; + } + + if (ins12 && ins20) { + /* Extra instructions needed for address computation can be executed independently. */ + if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM) + || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : is_s20(src1w)))) { + if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w)) + return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A); + + return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A); + } + + if (src1 & SLJIT_MEM) { + if ((src1 & OFFS_REG_MASK) || is_u12(src1w) || !is_s20(src1w)) + return emit_rx(compiler, ins12, dst, src2, src2w, src1, src1w, RX_A); + + return emit_rx(compiler, ins20, dst, src2, src2w, src1, src1w, RXY_A); + } + } + else if (ins12 || ins20) { + emit_rx_type rx_type; + + if (ins12) { + rx_type = RX_A; + ins = ins12; + } + else { + rx_type = RXY_A; + ins = ins20; + } + + if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM) + || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : (rx_type == RX_A ? is_u12(src1w) : is_s20(src1w))))) + return emit_rx(compiler, ins, dst, src1, src1w, src2, src2w, rx_type); + + if (src1 & SLJIT_MEM) + return emit_rx(compiler, ins, dst, src2, src2w, src1, src1w, rx_type); + } + } + + if (mode & SLJIT_I32_OP) { + ins = forms->op_r; + ins_k = forms->op_rk; + } + else { + ins = forms->op_gr; + ins_k = forms->op_grk; + } + + SLJIT_ASSERT(ins != 0 || ins_k != 0); + + if (ins && SLOW_IS_REG(dst)) { + if (dst == src1) + return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w); + + if (dst == src2) + return emit_rr(compiler, ins, dst, src2, src2w, src1, src1w); + } + + if (ins_k == 0) + return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w); + + return emit_rrf(compiler, ins_k, dst, src1, src1w, src2, src2w); +} + +static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 mode = compiler->mode; + sljit_ins ins; + + if (src2 & SLJIT_MEM) { + sljit_ins ins12, ins20; + + if (mode & SLJIT_I32_OP) { + ins12 = forms->op; + ins20 = forms->op_y; + } + else { + ins12 = 0; + ins20 = forms->op_g; + } + + if (ins12 && ins20) { + if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w)) + return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A); + + return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A); + } + else if (ins12) + return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A); + else if (ins20) + return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A); + } + + ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk; + + if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1)) + return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w); + + return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler) { struct sljit_label *label; @@ -1465,7 +1695,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile op = GET_OPCODE(op) | (op & SLJIT_I32_OP); switch (op) { case SLJIT_BREAKPOINT: - /* TODO(mundaym): insert real breakpoint? */ + /* The following invalid instruction is emitted by gdb. */ + return push_inst(compiler, 0x0001 /* 2-byte trap */); case SLJIT_NOP: return push_inst(compiler, 0x0700 /* 2-byte nop */); case SLJIT_LMUL_UW: @@ -1559,6 +1790,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile /* TODO(carenas): implement prefetch? */ return SLJIT_SUCCESS; } + if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) { /* LOAD REGISTER */ if (FAST_IS_REG(dst) && FAST_IS_REG(src)) { @@ -1609,11 +1841,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile SLJIT_UNREACHABLE(); } FAIL_IF(push_inst(compiler, ins)); - if (HAS_FLAGS(op)) { - /* only handle zero flag */ - SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK)); - return push_store_zero_flag(compiler, op, dst_r); - } return SLJIT_SUCCESS; } /* LOAD IMMEDIATE */ @@ -1690,11 +1917,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile SLJIT_UNREACHABLE(); } FAIL_IF(push_inst(compiler, ins)); - if (HAS_FLAGS(op)) { - /* only handle zero flag */ - SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK)); - return push_store_zero_flag(compiler, op, reg); - } return SLJIT_SUCCESS; } /* STORE and STORE IMMEDIATE */ @@ -1723,11 +1945,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV_P: case SLJIT_MOV: FAIL_IF(push_inst(compiler, LEVAL(stg))); - if (HAS_FLAGS(op)) { - /* only handle zero flag */ - SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK)); - return push_store_zero_flag(compiler, op, reg); - } return SLJIT_SUCCESS; default: SLJIT_UNREACHABLE(); @@ -1767,11 +1984,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1)); FAIL_IF(push_inst(compiler, EVAL(stg, tmp0, mem))); - if (HAS_FLAGS(op)) { - /* only handle zero flag */ - SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK)); - return push_store_zero_flag(compiler, op, tmp0); - } return SLJIT_SUCCESS; default: SLJIT_UNREACHABLE(); @@ -1785,7 +1997,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0; src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0; if (src & SLJIT_MEM) - FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, src & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP)); + + compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); /* TODO(mundaym): optimize loads and stores */ switch (opcode | (op & SLJIT_I32_OP)) { @@ -1810,9 +2024,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile } break; case SLJIT_NEG: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r))); break; case SLJIT_NEG32: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; FAIL_IF(push_inst(compiler, lcr(dst_r, src_r))); break; case SLJIT_CLZ: @@ -1839,17 +2055,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile SLJIT_UNREACHABLE(); } - /* write condition code to emulated flag register */ - if (op & VARIABLE_FLAG_MASK) - FAIL_IF(push_inst(compiler, ipm(flag_r))); - - /* write zero flag to emulated flag register */ - if (op & SLJIT_SET_Z) - FAIL_IF(push_store_zero_flag(compiler, op, dst_r)); + if ((op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW)) + FAIL_IF(update_zero_overflow(compiler, op, dst_r)); /* TODO(carenas): doesn't need FAIL_IF */ if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM)) - FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP)); + FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); return SLJIT_SUCCESS; } @@ -1887,530 +2098,554 @@ static SLJIT_INLINE int sets_signed_flag(sljit_s32 op) return 0; } -/* Report whether we have an instruction for: - op dst src imm - where dst and src are separate registers. */ -static int have_op_3_imm(sljit_s32 op, sljit_sw imm) { - return 0; /* TODO(mundaym): implement */ -} - -/* Report whether we have an instruction for: - op reg imm - where reg is both a source and the destination. */ -static int have_op_2_imm(sljit_s32 op, sljit_sw imm) { - switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) { - case SLJIT_ADD32: - case SLJIT_ADD: - if (!HAS_FLAGS(op) || sets_signed_flag(op)) - return have_eimm() ? is_s32(imm) : is_s16(imm); +static const struct ins_forms add_forms = { + 0x1a00, /* ar */ + 0xb9080000, /* agr */ + 0xb9f80000, /* ark */ + 0xb9e80000, /* agrk */ + 0x5a000000, /* a */ + 0xe3000000005a, /* ay */ + 0xe30000000008, /* ag */ +}; - return have_eimm() && is_u32(imm); - case SLJIT_MUL32: - case SLJIT_MUL: - /* TODO(mundaym): general extension check */ - /* for ms{,g}fi */ - if (op & VARIABLE_FLAG_MASK) - return 0; - - return have_genext() && is_s16(imm); - case SLJIT_OR32: - case SLJIT_XOR32: - case SLJIT_AND32: - /* only use if have extended immediate facility */ - /* this ensures flags are set correctly */ - return have_eimm(); - case SLJIT_AND: - case SLJIT_OR: - case SLJIT_XOR: - /* TODO(mundaym): make this more flexible */ - /* avoid using immediate variations, flags */ - /* won't be set correctly */ - return 0; - case SLJIT_ADDC32: - case SLJIT_ADDC: - /* no ADD LOGICAL WITH CARRY IMMEDIATE */ - return 0; - case SLJIT_SUB: - case SLJIT_SUB32: - case SLJIT_SUBC: - case SLJIT_SUBC32: - /* no SUBTRACT IMMEDIATE */ - /* TODO(mundaym): SUBTRACT LOGICAL IMMEDIATE */ - return 0; - } - return 0; -} +static const struct ins_forms logical_add_forms = { + 0x1e00, /* alr */ + 0xb90a0000, /* algr */ + 0xb9fa0000, /* alrk */ + 0xb9ea0000, /* algrk */ + 0x5e000000, /* al */ + 0xe3000000005e, /* aly */ + 0xe3000000000a, /* alg */ +}; -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, +static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); - ADJUST_LOCAL_OFFSET(dst, dstw); - ADJUST_LOCAL_OFFSET(src1, src1w); - ADJUST_LOCAL_OFFSET(src2, src2w); - - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + int sets_overflow = (op & VARIABLE_FLAG_MASK) == SLJIT_SET_OVERFLOW; + int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW); + const struct ins_forms *forms; + sljit_ins ins; - if (is_commutative(op)) { - #define SWAP_ARGS \ - do { \ - sljit_s32 t = src1; \ - sljit_sw tw = src1w; \ - src1 = src2; \ - src1w = src2w; \ - src2 = t; \ - src2w = tw; \ - } while(0); - - /* prefer immediate in src2 */ - if (src1 & SLJIT_IMM) { - SWAP_ARGS + if (src2 & SLJIT_IMM) { + if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { + if (sets_overflow) + ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + else + ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + return emit_siy(compiler, ins, dst, dstw, src2w); } - /* prefer to have src1 use same register as dst */ - if (FAST_IS_REG(src2) && gpr(src2 & REG_MASK) == dst_r) { - SWAP_ARGS + if (is_s16(src2w)) { + if (sets_overflow) + ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + else + ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w)); + goto done; } - /* prefer memory argument in src2 */ - if (FAST_IS_REG(src2) && (src1 & SLJIT_MEM)) { - SWAP_ARGS + if (!sets_overflow) { + if ((op & SLJIT_I32_OP) || is_u32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */; + FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); + goto done; + } + if (is_u32(-src2w)) { + FAIL_IF(emit_ri(compiler, 0xc20400000000 /* slgfi */, dst, src1, src1w, -src2w, RIL_A)); + goto done; + } + } + else if ((op & SLJIT_I32_OP) || is_s32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); + goto done; } - #undef SWAP_ARGS } - /* src1 must be in a register */ - sljit_gpr src1_r = FAST_IS_REG(src1) ? gpr(src1 & REG_MASK) : tmp0; - if (src1 & SLJIT_IMM) - FAIL_IF(push_load_imm_inst(compiler, src1_r, src1w)); - - if (src1 & SLJIT_MEM) - FAIL_IF(load_word(compiler, src1_r, src1, src1w, tmp1, op & SLJIT_I32_OP)); - - /* emit comparison before subtract */ - if (GET_OPCODE(op) == SLJIT_SUB && (op & VARIABLE_FLAG_MASK)) { - sljit_sw cmp = 0; - switch (GET_FLAG_TYPE(op)) { - case SLJIT_LESS: - case SLJIT_LESS_EQUAL: - case SLJIT_GREATER: - case SLJIT_GREATER_EQUAL: - cmp = 1; /* unsigned */ - break; - case SLJIT_EQUAL: - case SLJIT_SIG_LESS: - case SLJIT_SIG_LESS_EQUAL: - case SLJIT_SIG_GREATER: - case SLJIT_SIG_GREATER_EQUAL: - cmp = -1; /* signed */ - break; - } - if (cmp) { - /* clear flags - no need to generate now */ - op &= ~VARIABLE_FLAG_MASK; - sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1; - if (src2 & SLJIT_IMM) { - #define LEVAL(i) i(src1_r, src2w) - if (cmp > 0 && is_u32(src2w)) { - /* unsigned */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, clfi, clgfi))); - } - else if (cmp < 0 && is_s16(src2w)) { - /* signed */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, chi, cghi))); - } - else if (cmp < 0 && is_s32(src2w)) { - /* signed */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, cfi, cgfi))); - } - #undef LEVAL - #define LEVAL(i) i(src1_r, src2_r) - else { - FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w)); - if (cmp > 0) { - /* unsigned */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, clr, clgr))); - } - if (cmp < 0) { - /* signed */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, cr, cgr))); - } + forms = sets_overflow ? &add_forms : &logical_add_forms; + FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + +done: + if (sets_zero_overflow) + FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0)); + + if (dst & SLJIT_MEM) + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + + return SLJIT_SUCCESS; +} + +static const struct ins_forms sub_forms = { + 0x1b00, /* sr */ + 0xb9090000, /* sgr */ + 0xb9f90000, /* srk */ + 0xb9e90000, /* sgrk */ + 0x5b000000, /* s */ + 0xe3000000005b, /* sy */ + 0xe30000000009, /* sg */ +}; + +static const struct ins_forms logical_sub_forms = { + 0x1f00, /* slr */ + 0xb90b0000, /* slgr */ + 0xb9fb0000, /* slrk */ + 0xb9eb0000, /* slgrk */ + 0x5f000000, /* sl */ + 0xe3000000005f, /* sly */ + 0xe3000000000b, /* slg */ +}; + +static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + int sets_signed = sets_signed_flag(op); + int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW); + const struct ins_forms *forms; + sljit_ins ins; + + if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { + int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS; + + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE; + + if (src2 & SLJIT_IMM) { + if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w))) + { + if ((op & SLJIT_I32_OP) || is_s32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */; + return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } } else { - if (src2 & SLJIT_MEM) { - /* TODO(mundaym): comparisons with memory */ - /* load src2 into register */ - FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP)); + if ((op & SLJIT_I32_OP) || is_u32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */; + return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } - if (cmp > 0) { - /* unsigned */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, clr, clgr))); - } - if (cmp < 0) { - /* signed */ - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, cr, cgr))); - } - #undef LEVAL + if (is_s16(src2w)) + return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w); } - FAIL_IF(push_inst(compiler, ipm(flag_r))); } - } + else if (src2 & SLJIT_MEM) { + if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) { + ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */; + return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A); + } - if (!HAS_FLAGS(op) && dst == SLJIT_UNUSED) - return SLJIT_SUCCESS; + if (compare_signed) + ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */; + else + ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */; + return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A); + } - /* need to specify signed or logical operation */ - int signed_flags = sets_signed_flag(op); + if (compare_signed) + ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */; + else + ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */; + return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w); + } - if (is_shift(op)) { - /* handle shifts first, they have more constraints than other operations */ - sljit_sw d = 0; - sljit_gpr b = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : r0; - if (src2 & SLJIT_IMM) - d = src2w & ((op & SLJIT_I32_OP) ? 31 : 63); + if (src2 & SLJIT_IMM) { + sljit_sw neg_src2w = -src2w; - if (src2 & SLJIT_MEM) { - /* shift amount (b) cannot be in r0 (i.e. tmp0) */ - FAIL_IF(load_word(compiler, tmp1, src2, src2w, tmp1, op & SLJIT_I32_OP)); - b = tmp1; - } - /* src1 and dst share the same register in the base 32-bit ISA */ - /* TODO(mundaym): not needed when distinct-operand facility is available */ - int workaround_alias = op & SLJIT_I32_OP && src1_r != dst_r; - if (workaround_alias) { - /* put src1 into tmp0 so we can overwrite it */ - FAIL_IF(push_inst(compiler, lr(tmp0, src1_r))); - src1_r = tmp0; - } - switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) { - case SLJIT_SHL: - FAIL_IF(push_inst(compiler, sllg(dst_r, src1_r, d, b))); - break; - case SLJIT_SHL32: - FAIL_IF(push_inst(compiler, sll(src1_r, d, b))); - break; - case SLJIT_LSHR: - FAIL_IF(push_inst(compiler, srlg(dst_r, src1_r, d, b))); - break; - case SLJIT_LSHR32: - FAIL_IF(push_inst(compiler, srl(src1_r, d, b))); - break; - case SLJIT_ASHR: - FAIL_IF(push_inst(compiler, srag(dst_r, src1_r, d, b))); - break; - case SLJIT_ASHR32: - FAIL_IF(push_inst(compiler, sra(src1_r, d, b))); - break; - default: - SLJIT_UNREACHABLE(); + if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) { + if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { + if (sets_signed) + ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + else + ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + return emit_siy(compiler, ins, dst, dstw, neg_src2w); + } + + if (is_s16(neg_src2w)) { + if (sets_signed) + ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + else + ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w)); + goto done; + } } - if (workaround_alias && dst_r != src1_r) - FAIL_IF(push_inst(compiler, lr(dst_r, src1_r))); - } - else if ((GET_OPCODE(op) == SLJIT_MUL) && HAS_FLAGS(op)) { - /* multiply instructions do not generally set flags so we need to manually */ - /* detect overflow conditions */ - /* TODO(mundaym): 64-bit overflow */ - SLJIT_ASSERT(GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW || - GET_FLAG_TYPE(op) == SLJIT_MUL_NOT_OVERFLOW); - sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1; - if (src2 & SLJIT_IMM) { - /* load src2 into register */ - FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w)); + if (!sets_signed) { + if ((op & SLJIT_I32_OP) || is_u32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */; + FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); + goto done; + } + if (is_u32(neg_src2w)) { + FAIL_IF(emit_ri(compiler, 0xc20a00000000 /* algfi */, dst, src1, src1w, neg_src2w, RIL_A)); + goto done; + } } - if (src2 & SLJIT_MEM) { - /* load src2 into register */ - FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP)); + else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A)); + goto done; } - if (have_misc2()) { - #define LEVAL(i) i(dst_r, src1_r, src2_r) - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, msrkc, msgrkc))); - #undef LEVAL + } + + forms = sets_signed ? &sub_forms : &logical_sub_forms; + FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + +done: + if (sets_signed) { + sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + + if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) { + /* In case of overflow, the sign bit of the two source operands must be different, and + - the first operand is greater if the sign bit of the result is set + - the first operand is less if the sign bit of the result is not set + The -result operation sets the corrent sign, because the result cannot be zero. + The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */ + FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2))); + FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r))); } - else if (op & SLJIT_I32_OP) { - op &= ~VARIABLE_FLAG_MASK; - FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r))); - FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r))); - if (dst_r != tmp0) { - FAIL_IF(push_inst(compiler, lr(dst_r, tmp0))); - } - FAIL_IF(push_inst(compiler, aih(tmp0, 1))); - FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U))); - FAIL_IF(push_inst(compiler, ipm(flag_r))); - FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); + else if (op & SLJIT_SET_Z) + FAIL_IF(update_zero_overflow(compiler, op, dst_r)); + } + + if (dst & SLJIT_MEM) + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + + return SLJIT_SUCCESS; +} + +static const struct ins_forms multiply_forms = { + 0xb2520000, /* msr */ + 0xb90c0000, /* msgr */ + 0xb9fd0000, /* msrkc */ + 0xb9ed0000, /* msgrkc */ + 0x71000000, /* ms */ + 0xe30000000051, /* msy */ + 0xe3000000000c, /* msg */ +}; + +static const struct ins_forms multiply_overflow_forms = { + 0, + 0, + 0xb9fd0000, /* msrkc */ + 0xb9ed0000, /* msgrkc */ + 0, + 0xe30000000053, /* msc */ + 0xe30000000083, /* msgc */ +}; + +static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_ins ins; + + if (HAS_FLAGS(op)) { + /* if have_misc2 fails, this operation should be emulated. 32 bit emulation: + FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r))); + FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r))); + if (dst_r != tmp0) { + FAIL_IF(push_inst(compiler, lr(dst_r, tmp0))); } - else - return SLJIT_ERR_UNSUPPORTED; + FAIL_IF(push_inst(compiler, aih(tmp0, 1))); + FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U))); + FAIL_IF(push_inst(compiler, ipm(flag_r))); + FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */ + return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w); } - else if ((GET_OPCODE(op) == SLJIT_SUB) && (op & SLJIT_SET_Z) && !signed_flags) { - /* subtract logical instructions do not set the right flags unfortunately */ - /* instead, negate src2 and issue an add logical */ - /* TODO(mundaym): distinct operand facility where needed */ - if (src1_r != dst_r && src1_r != tmp0) { - #define LEVAL(i) i(tmp0, src1_r) - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, lr, lgr))); - src1_r = tmp0; - #undef LEVAL - } - sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1; - if (src2 & SLJIT_IMM) { - /* load src2 into register */ - FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w)); + + if (src2 & SLJIT_IMM) { + if (is_s16(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */; + return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A); } - if (src2 & SLJIT_MEM) { - /* load src2 into register */ - FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP)); + + if (is_s32(src2w)) { + ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */; + return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A); } - if (op & SLJIT_I32_OP) { - FAIL_IF(push_inst(compiler, lcr(tmp1, src2_r))); - FAIL_IF(push_inst(compiler, alr(src1_r, tmp1))); - if (src1_r != dst_r) - FAIL_IF(push_inst(compiler, lr(dst_r, src1_r))); + } + + return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w); +} + +static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_uw imm, sljit_s32 count16) +{ + sljit_s32 mode = compiler->mode; + sljit_gpr dst_r = tmp0; + sljit_s32 needs_move = 1; + + if (SLOW_IS_REG(dst)) { + dst_r = gpr(dst & REG_MASK); + if (dst == src1) + needs_move = 0; + } + + if (needs_move) + FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); + + if (type == SLJIT_AND) { + if (!(mode & SLJIT_I32_OP)) + FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32))); + return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff)); + } + else if (type == SLJIT_OR) { + if (count16 >= 3) { + FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32))); + return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); } - else { - FAIL_IF(push_inst(compiler, lcgr(tmp1, src2_r))); - FAIL_IF(push_inst(compiler, algr(src1_r, tmp1))); - if (src1_r != dst_r) - FAIL_IF(push_inst(compiler, lgr(dst_r, src1_r))); + + if (count16 >= 2) { + if ((imm & 0x00000000ffffffffull) == 0) + return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)); + if ((imm & 0xffffffff00000000ull) == 0) + return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); } + + if ((imm & 0xffff000000000000ull) != 0) + FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48))); + if ((imm & 0x0000ffff00000000ull) != 0) + FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff))); + if ((imm & 0x00000000ffff0000ull) != 0) + FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff))); + if ((imm & 0x000000000000ffffull) != 0 || imm == 0) + return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff)); + return SLJIT_SUCCESS; } - else if ((src2 & SLJIT_IMM) && (src1_r == dst_r) && have_op_2_imm(op, src2w)) { - switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) { - #define LEVAL(i) i(dst_r, src2w) - case SLJIT_ADD: - if (!HAS_FLAGS(op) || signed_flags) { - FAIL_IF(push_inst(compiler, - WHEN2(is_s16(src2w), aghi, agfi))); - } - else - FAIL_IF(push_inst(compiler, LEVAL(algfi))); - break; - case SLJIT_ADD32: - if (!HAS_FLAGS(op) || signed_flags) - FAIL_IF(push_inst(compiler, - WHEN2(is_s16(src2w), ahi, afi))); + if ((imm & 0xffffffff00000000ull) != 0) + FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32))); + if ((imm & 0x00000000ffffffffull) != 0 || imm == 0) + return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff)); + return SLJIT_SUCCESS; +} + +static const struct ins_forms bitwise_and_forms = { + 0x1400, /* nr */ + 0xb9800000, /* ngr */ + 0xb9f40000, /* nrk */ + 0xb9e40000, /* ngrk */ + 0x54000000, /* n */ + 0xe30000000054, /* ny */ + 0xe30000000080, /* ng */ +}; + +static const struct ins_forms bitwise_or_forms = { + 0x1600, /* or */ + 0xb9810000, /* ogr */ + 0xb9f60000, /* ork */ + 0xb9e60000, /* ogrk */ + 0x56000000, /* o */ + 0xe30000000056, /* oy */ + 0xe30000000081, /* og */ +}; + +static const struct ins_forms bitwise_xor_forms = { + 0x1700, /* xr */ + 0xb9820000, /* xgr */ + 0xb9f70000, /* xrk */ + 0xb9e70000, /* xgrk */ + 0x57000000, /* x */ + 0xe30000000057, /* xy */ + 0xe30000000082, /* xg */ +}; + +static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 type = GET_OPCODE(op); + const struct ins_forms *forms; + + if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) { + sljit_s32 count16 = 0; + sljit_uw imm = (sljit_uw)src2w; + + if (op & SLJIT_I32_OP) + imm &= 0xffffffffull; + + if ((imm & 0x000000000000ffffull) != 0 || imm == 0) + count16++; + if ((imm & 0x00000000ffff0000ull) != 0) + count16++; + if ((imm & 0x0000ffff00000000ull) != 0) + count16++; + if ((imm & 0xffff000000000000ull) != 0) + count16++; + + if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) { + sljit_gpr src_r = tmp0; + + if (FAST_IS_REG(src1)) + src_r = gpr(src1 & REG_MASK); else - FAIL_IF(push_inst(compiler, LEVAL(alfi))); - - break; - #undef LEVAL /* TODO(carenas): move down and refactor? */ - case SLJIT_MUL: - FAIL_IF(push_inst(compiler, mhi(dst_r, src2w))); - break; - case SLJIT_MUL32: - FAIL_IF(push_inst(compiler, mghi(dst_r, src2w))); - break; - case SLJIT_OR32: - FAIL_IF(push_inst(compiler, oilf(dst_r, src2w))); - break; - case SLJIT_XOR32: - FAIL_IF(push_inst(compiler, xilf(dst_r, src2w))); - break; - case SLJIT_AND32: - FAIL_IF(push_inst(compiler, nilf(dst_r, src2w))); - break; - default: - SLJIT_UNREACHABLE(); + FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); + + if ((imm & 0x000000000000ffffull) != 0 || imm == 0) + return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm); + if ((imm & 0x00000000ffff0000ull) != 0) + return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16)); + if ((imm & 0x0000ffff00000000ull) != 0) + return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32)); + return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48)); } + + if (!(op & SLJIT_SET_Z)) + return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16); } - else if ((src2 & SLJIT_IMM) && have_op_3_imm(op, src2w)) { - abort(); /* TODO(mundaym): implement */ + + if (type == SLJIT_AND) + forms = &bitwise_and_forms; + else if (type == SLJIT_OR) + forms = &bitwise_or_forms; + else + forms = &bitwise_xor_forms; + + return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w); +} + +static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 type = GET_OPCODE(op); + sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr src_r = tmp0; + sljit_gpr base_r = tmp0; + sljit_ins imm = 0; + sljit_ins ins; + + if (FAST_IS_REG(src1)) + src_r = gpr(src1 & REG_MASK); + else + FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); + + if (src2 & SLJIT_IMM) + imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f); + else if (FAST_IS_REG(src2)) + base_r = gpr(src2 & REG_MASK); + else { + FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); + base_r = tmp1; } - else if ((src2 & SLJIT_MEM) && (dst_r == src1_r)) { - /* most 32-bit instructions can only handle 12-bit immediate offsets */ - int need_u12 = !have_ldisp() && - (op & SLJIT_I32_OP) && - (GET_OPCODE(op) != SLJIT_ADDC) && - (GET_OPCODE(op) != SLJIT_SUBC); - struct addr mem; - if (need_u12) - FAIL_IF(make_addr_bx(compiler, &mem, src2, src2w, tmp1)); + + if ((op & SLJIT_I32_OP) && dst_r == src_r) { + if (type == SLJIT_SHL) + ins = 0x89000000 /* sll */; + else if (type == SLJIT_LSHR) + ins = 0x88000000 /* srl */; else - FAIL_IF(make_addr_bxy(compiler, &mem, src2, src2w, tmp1)); - - int can_u12 = is_u12(mem.offset) ? 1 : 0; - sljit_ins ins = 0; - switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) { - /* 64-bit ops */ - #define LEVAL(i) EVAL(i, dst_r, mem) - case SLJIT_ADD: - ins = WHEN2(signed_flags, ag, alg); - break; - case SLJIT_SUB: - ins = WHEN2(signed_flags, sg, slg); - break; - case SLJIT_ADDC: - ins = LEVAL(alcg); - break; - case SLJIT_SUBC: - ins = LEVAL(slbg); - break; - case SLJIT_MUL: - ins = LEVAL(msg); - break; - case SLJIT_OR: - ins = LEVAL(og); - break; - case SLJIT_XOR: - ins = LEVAL(xg); - break; - case SLJIT_AND: - ins = LEVAL(ng); - break; - /* 32-bit ops */ - case SLJIT_ADD32: - if (signed_flags) - ins = WHEN2(can_u12, a, ay); - else - ins = WHEN2(can_u12, al, aly); - break; - case SLJIT_SUB32: - if (signed_flags) - ins = WHEN2(can_u12, s, sy); - else - ins = WHEN2(can_u12, sl, sly); - break; - case SLJIT_ADDC32: - ins = LEVAL(alc); - break; - case SLJIT_SUBC32: - ins = LEVAL(slb); - break; - case SLJIT_MUL32: - ins = WHEN2(can_u12, ms, msy); - break; - case SLJIT_OR32: - ins = WHEN2(can_u12, o, oy); - break; - case SLJIT_XOR32: - ins = WHEN2(can_u12, x, xy); - break; - case SLJIT_AND32: - ins = WHEN2(can_u12, n, ny); - break; - #undef LEVAL - default: - SLJIT_UNREACHABLE(); - } - FAIL_IF(push_inst(compiler, ins)); + ins = 0x8a000000 /* sra */; + + FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm)); } else { - sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1; - if (src2 & SLJIT_IMM) { - /* load src2 into register */ - FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w)); - } - if (src2 & SLJIT_MEM) { - /* load src2 into register */ - FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP)); - } - /* TODO(mundaym): distinct operand facility where needed */ - #define LEVAL(i) i(tmp0, src1_r) - if (src1_r != dst_r && src1_r != tmp0) { - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, lr, lgr))); - src1_r = tmp0; - } - #undef LEVAL - sljit_ins ins = 0; - switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) { - #define LEVAL(i) i(src1_r, src2_r) - /* 64-bit ops */ - case SLJIT_ADD: - ins = WHEN2(signed_flags, agr, algr); - break; - case SLJIT_SUB: - ins = WHEN2(signed_flags, sgr, slgr); - break; - case SLJIT_ADDC: - ins = LEVAL(alcgr); - break; - case SLJIT_SUBC: - ins = LEVAL(slbgr); - break; - case SLJIT_MUL: - ins = LEVAL(msgr); - break; - case SLJIT_AND: - ins = LEVAL(ngr); - break; - case SLJIT_OR: - ins = LEVAL(ogr); - break; - case SLJIT_XOR: - ins = LEVAL(xgr); - break; - /* 32-bit ops */ - case SLJIT_ADD32: - ins = WHEN2(signed_flags, ar, alr); - break; - case SLJIT_SUB32: - ins = WHEN2(signed_flags, sr, slr); - break; - case SLJIT_ADDC32: - ins = LEVAL(alcr); - break; - case SLJIT_SUBC32: - ins = LEVAL(slbr); - break; - case SLJIT_MUL32: - ins = LEVAL(msr); - break; - case SLJIT_AND32: - ins = LEVAL(nr); - break; - case SLJIT_OR32: - ins = LEVAL(or); - break; - case SLJIT_XOR32: - ins = LEVAL(xr); - break; - #undef LEVAL - default: - SLJIT_UNREACHABLE(); - } - FAIL_IF(push_inst(compiler, ins)); - #define LEVAL(i) i(dst_r, src1_r) - if (src1_r != dst_r) - FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, lr, lgr))); - #undef LEVAL + if (type == SLJIT_SHL) + ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */; + else if (type == SLJIT_LSHR) + ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */; + else + ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */; + + FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16))); } - /* write condition code to emulated flag register */ - if (op & VARIABLE_FLAG_MASK) - FAIL_IF(push_inst(compiler, ipm(flag_r))); + if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR) + return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)); + + return SLJIT_SUCCESS; +} + +static const struct ins_forms addc_forms = { + 0xb9980000, /* alcr */ + 0xb9880000, /* alcgr */ + 0, + 0, + 0, + 0xe30000000098, /* alc */ + 0xe30000000088, /* alcg */ +}; + +static const struct ins_forms subc_forms = { + 0xb9990000, /* slbr */ + 0xb9890000, /* slbgr */ + 0, + 0, + 0, + 0xe30000000099, /* slb */ + 0xe30000000089, /* slbg */ +}; + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) + return SLJIT_SUCCESS; - /* write zero flag to emulated flag register */ - if (op & SLJIT_SET_Z) - FAIL_IF(push_store_zero_flag(compiler, op, dst_r)); + compiler->mode = op & SLJIT_I32_OP; + compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); + + if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC) + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; + + if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) { + src1 ^= src2; + src2 ^= src1; + src1 ^= src2; + + src1w ^= src2w; + src2w ^= src1w; + src1w ^= src2w; + } - /* finally write the result to memory if required */ - if (dst & SLJIT_MEM) { - SLJIT_ASSERT(dst_r != tmp1); - /* TODO(carenas): s/FAIL_IF/ return */ - FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP)); + switch (GET_OPCODE(op)) { + case SLJIT_ADD: + return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w); + case SLJIT_ADDC: + FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w)); + if (dst & SLJIT_MEM) + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return SLJIT_SUCCESS; + case SLJIT_SUB: + return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w); + case SLJIT_SUBC: + FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w)); + if (dst & SLJIT_MEM) + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return SLJIT_SUCCESS; + case SLJIT_MUL: + FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + break; + case SLJIT_AND: + case SLJIT_OR: + case SLJIT_XOR: + FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + break; + case SLJIT_SHL: + case SLJIT_LSHR: + case SLJIT_ASHR: + FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + break; } + if (dst & SLJIT_MEM) + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); return SLJIT_SUCCESS; } @@ -2428,7 +2663,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src( case SLJIT_FAST_RETURN: src_r = FAST_IS_REG(src) ? gpr(src) : tmp1; if (src & SLJIT_MEM) - FAIL_IF(load_word(compiler, tmp1, src, srcw, tmp1, 0)); + FAIL_IF(load_word(compiler, tmp1, src, srcw, 0)); return push_inst(compiler, br(src_r)); case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: @@ -2507,7 +2742,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * return push_inst(compiler, lgr(gpr(dst), fast_link_r)); /* memory */ - return store_word(compiler, fast_link_r, dst, dstw, tmp1, 0); + return store_word(compiler, fast_link_r, dst, dstw, 0); } /* --------------------------------------------------------------------- */ @@ -2532,15 +2767,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type) { - sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(type & 0xff) : 0xf; + sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(compiler, type & 0xff) : 0xf; CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_jump(compiler, type)); - /* reload condition code */ - if (mask != 0xf) - PTR_FAIL_IF(push_load_cc(compiler, type & 0xff)); - /* record jump */ struct sljit_jump *jump = (struct sljit_jump *) ensure_abuf(compiler, sizeof(struct sljit_jump)); @@ -2585,7 +2816,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi FAIL_IF(push_load_imm_inst(compiler, src_r, srcw)); } else if (src & SLJIT_MEM) - FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, 0 /* 64-bit */)); + FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */)); /* emit jump instruction */ if (type >= SLJIT_FAST_CALL) @@ -2613,7 +2844,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co sljit_s32 dst, sljit_sw dstw, sljit_s32 type) { - sljit_u8 mask = get_cc(type & 0xff); + sljit_u8 mask = get_cc(compiler, type & 0xff); CHECK_ERROR(); CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); @@ -2624,9 +2855,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_AND: case SLJIT_OR: case SLJIT_XOR: + compiler->status_flags_state = op & SLJIT_SET_Z; + /* dst is also source operand */ if (dst & SLJIT_MEM) - FAIL_IF(load_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); break; case SLJIT_MOV: @@ -2638,9 +2871,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co SLJIT_UNREACHABLE(); } - if (mask != 0xf) - FAIL_IF(push_load_cc(compiler, type & 0xff)); - /* TODO(mundaym): fold into cmov helper function? */ #define LEVAL(i) i(loc_r, 1, mask) if (have_lscond2()) { @@ -2671,14 +2901,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co #undef LEVAL } - /* set zero flag if needed */ - if (op & SLJIT_SET_Z) - FAIL_IF(push_store_zero_flag(compiler, op, dst_r)); - /* store result to memory if required */ - /* TODO(carenas): s/FAIL_IF/ return */ if (dst & SLJIT_MEM) - FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP)); + return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP); return SLJIT_SUCCESS; } @@ -2687,16 +2912,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 dst_reg, sljit_s32 src, sljit_sw srcw) { - sljit_u8 mask = get_cc(type & 0xff); + sljit_u8 mask = get_cc(compiler, type & 0xff); sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP); sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0; CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); - if (mask != 0xf) - FAIL_IF(push_load_cc(compiler, type & 0xff)); - if (src & SLJIT_IMM) { /* TODO(mundaym): fast path with lscond2 */ FAIL_IF(push_load_imm_inst(compiler, src_r, srcw)); @@ -2750,7 +2972,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi } if (dst & SLJIT_MEM) - PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0 /* always 64-bit */)); + PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0 /* always 64-bit */)); return (struct sljit_const*)const_; } @@ -2797,7 +3019,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label( } if (dst & SLJIT_MEM) - PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0)); + PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0)); return put_label; } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c index e5167f02ba..28886405af 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c @@ -93,18 +93,21 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS); case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); case SLJIT_ADDC: return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); case SLJIT_SUBC: return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); case SLJIT_MUL: + compiler->status_flags_state = 0; FAIL_IF(push_inst(compiler, SMUL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst))); if (!(flags & SET_FLAGS)) return SLJIT_SUCCESS; diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c index 544d80d028..e833f09d7a 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c @@ -1275,16 +1275,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi return label; } -static sljit_ins get_cc(sljit_s32 type) +static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: - case SLJIT_MUL_NOT_OVERFLOW: case SLJIT_NOT_EQUAL_F64: /* Unordered. */ return DA(0x1); case SLJIT_NOT_EQUAL: - case SLJIT_MUL_OVERFLOW: case SLJIT_EQUAL_F64: return DA(0x9); @@ -1317,10 +1315,16 @@ static sljit_ins get_cc(sljit_s32 type) return DA(0x2); case SLJIT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return DA(0x9); + case SLJIT_UNORDERED_F64: return DA(0x7); case SLJIT_NOT_OVERFLOW: + if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + return DA(0x1); + case SLJIT_ORDERED_F64: return DA(0xf); @@ -1347,7 +1351,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET)) jump->flags |= IS_MOVABLE; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) - PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(type ^ 1) | 5, UNMOVABLE_INS)); + PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS)); #else #error "Implementation required" #endif @@ -1357,7 +1361,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & FCC_IS_SET)) jump->flags |= IS_MOVABLE; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) - PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(type ^ 1) | 5, UNMOVABLE_INS)); + PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS)); #else #error "Implementation required" #endif @@ -1474,9 +1478,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co type &= 0xff; if (type < SLJIT_EQUAL_F64) - FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type) | 3, UNMOVABLE_INS)); else - FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type) | 3, UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS)); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c index ddcc5ebf76..515d98aefd 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c @@ -411,11 +411,9 @@ static sljit_u8 get_jump_code(sljit_s32 type) return 0x8e /* jle */; case SLJIT_OVERFLOW: - case SLJIT_MUL_OVERFLOW: return 0x80 /* jo */; case SLJIT_NOT_OVERFLOW: - case SLJIT_MUL_NOT_OVERFLOW: return 0x81 /* jno */; case SLJIT_UNORDERED_F64: diff --git a/thirdparty/pcre2/src/sljit/sljitUtils.c b/thirdparty/pcre2/src/sljit/sljitUtils.c index 08ca35cf37..9bce714735 100644 --- a/thirdparty/pcre2/src/sljit/sljitUtils.c +++ b/thirdparty/pcre2/src/sljit/sljitUtils.c @@ -48,7 +48,7 @@ static HANDLE allocator_lock; static SLJIT_INLINE void allocator_grab_lock(void) { HANDLE lock; - if (SLJIT_UNLIKELY(!allocator_lock)) { + if (SLJIT_UNLIKELY(!InterlockedCompareExchangePointer(&allocator_lock, NULL, NULL))) { lock = CreateMutex(NULL, FALSE, NULL); if (InterlockedCompareExchangePointer(&allocator_lock, lock, NULL)) CloseHandle(lock); @@ -146,9 +146,13 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) { #include <unistd.h> static SLJIT_INLINE sljit_sw get_page_alignment(void) { - static sljit_sw sljit_page_align; - if (!sljit_page_align) { + static sljit_sw sljit_page_align = -1; + if (sljit_page_align < 0) { +#ifdef _SC_PAGESIZE sljit_page_align = sysconf(_SC_PAGESIZE); +#else + sljit_page_align = getpagesize(); +#endif /* Should never happen. */ if (sljit_page_align < 0) sljit_page_align = 4096; diff --git a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c index 6ef71f7d83..72d5b8dd2b 100644 --- a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c +++ b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c @@ -121,14 +121,18 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER; #endif static int se_protected = !SLJIT_PROT_WX; + int prot = PROT_READ | PROT_WRITE | SLJIT_PROT_WX; sljit_uw* ptr; if (SLJIT_UNLIKELY(se_protected < 0)) return NULL; +#ifdef PROT_MAX + prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC); +#endif + size += sizeof(sljit_uw); - ptr = (sljit_uw*)mmap(NULL, size, PROT_READ | PROT_WRITE | SLJIT_PROT_WX, - MAP_PRIVATE | MAP_ANON, -1, 0); + ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); if (ptr == MAP_FAILED) return NULL; diff --git a/thirdparty/tinyexr/tinyexr.cc b/thirdparty/tinyexr/tinyexr.cc index fef8f66c98..70115ea5c2 100644 --- a/thirdparty/tinyexr/tinyexr.cc +++ b/thirdparty/tinyexr/tinyexr.cc @@ -4,5 +4,9 @@ #endif #endif +// -- GODOT start -- +#include <zlib.h> // Should come before including tinyexr. +// -- GODOT end -- + #define TINYEXR_IMPLEMENTATION #include "tinyexr.h" diff --git a/thirdparty/tinyexr/tinyexr.h b/thirdparty/tinyexr/tinyexr.h index a3e7b23161..969f07ad79 100644 --- a/thirdparty/tinyexr/tinyexr.h +++ b/thirdparty/tinyexr/tinyexr.h @@ -1,7 +1,7 @@ #ifndef TINYEXR_H_ #define TINYEXR_H_ /* -Copyright (c) 2014 - 2020, Syoyo Fujita and many contributors. +Copyright (c) 2014 - 2021, Syoyo Fujita and many contributors. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -65,6 +65,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // End of OpenEXR license ------------------------------------------------- + // // // Do this: @@ -88,7 +89,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. extern "C" { #endif -// Use embedded miniz or not to decode ZIP format pixel. Linking with zlib +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \ + defined(__i386) || defined(__i486__) || defined(__i486) || \ + defined(i386) || defined(__ia64__) || defined(__x86_64__) +#define TINYEXR_X86_OR_X64_CPU 1 +#else +#define TINYEXR_X86_OR_X64_CPU 0 +#endif + +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || TINYEXR_X86_OR_X64_CPU +#define TINYEXR_LITTLE_ENDIAN 1 +#else +#define TINYEXR_LITTLE_ENDIAN 0 +#endif + +// Use miniz or not to decode ZIP format pixel. Linking with zlib // required if this flas is 0. #ifndef TINYEXR_USE_MINIZ #define TINYEXR_USE_MINIZ (1) @@ -162,9 +177,13 @@ extern "C" { typedef struct _EXRVersion { int version; // this must be 2 - int tiled; // tile format image + // tile format image; + // not zero for only a single-part "normal" tiled file (according to spec.) + int tiled; int long_name; // long name attribute - int non_image; // deep image(EXR 2.0) + // deep image(EXR 2.0); + // for a multi-part file, indicates that at least one part is of type deep* (according to spec.) + int non_image; int multipart; // multi-part(EXR 2.0) } EXRVersion; @@ -222,6 +241,8 @@ typedef struct _EXRHeader { int tile_rounding_mode; int long_name; + // for a single-part file, agree with the version field bit 11 + // for a multi-part file, it is consistent with the type of part int non_image; int multipart; unsigned int header_len; @@ -244,7 +265,11 @@ typedef struct _EXRHeader { // ParseEXRHeaderFrom(Meomory|File), then users // can edit it(only valid for HALF pixel type // channel) - + // name attribute required for multipart files; + // must be unique and non empty (according to spec.); + // use EXRSetNameAttr for setting value; + // max 255 character allowed - excluding terminating zero + char name[256]; } EXRHeader; typedef struct _EXRMultiPartHeader { @@ -256,6 +281,10 @@ typedef struct _EXRMultiPartHeader { typedef struct _EXRImage { EXRTile *tiles; // Tiled pixel data. The application must reconstruct image // from tiles manually. NULL if scanline format. + struct _EXRImage* next_level; // NULL if scanline format or image is the last level. + int level_x; // x level index + int level_y; // y level index + unsigned char **images; // image[channels][pixels]. NULL if tiled format. int width; @@ -339,9 +368,15 @@ extern int SaveEXR(const float *data, const int width, const int height, const int components, const int save_as_fp16, const char *filename, const char **err); +// Returns the number of resolution levels of the image (including the base) +extern int EXRNumLevels(const EXRImage* exr_image); + // Initialize EXRHeader struct extern void InitEXRHeader(EXRHeader *exr_header); +// Set name attribute of EXRHeader struct (it makes a copy) +extern void EXRSetNameAttr(EXRHeader *exr_header, const char* name); + // Initialize EXRImage struct extern void InitEXRImage(EXRImage *exr_image); @@ -465,6 +500,30 @@ extern size_t SaveEXRImageToMemory(const EXRImage *image, const EXRHeader *exr_header, unsigned char **memory, const char **err); +// Saves multi-channel, multi-frame OpenEXR image to a memory. +// Image is compressed using EXRImage.compression value. +// File global attributes (eg. display_window) must be set in the first header. +// Returns negative value and may set error string in `err` when there's an +// error +// When there was an error message, Application must free `err` with +// FreeEXRErrorMessage() +extern int SaveEXRMultipartImageToFile(const EXRImage *images, + const EXRHeader **exr_headers, + unsigned int num_parts, + const char *filename, const char **err); + +// Saves multi-channel, multi-frame OpenEXR image to a memory. +// Image is compressed using EXRImage.compression value. +// File global attributes (eg. display_window) must be set in the first header. +// Return the number of bytes if success. +// Return zero and will set error string in `err` when there's an +// error. +// When there was an error message, Application must free `err` with +// FreeEXRErrorMessage() +extern size_t SaveEXRMultipartImageToMemory(const EXRImage *images, + const EXRHeader **exr_headers, + unsigned int num_parts, + unsigned char **memory, const char **err); // Loads single-frame OpenEXR deep image. // Application must free memory of variables in DeepImage(image, offset_table) // Returns negative value and may set error string in `err` when there's an @@ -514,6 +573,9 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height, #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif +#ifndef NOMINMAX +#define NOMINMAX +#endif #include <windows.h> // for UTF-8 #endif @@ -530,8 +592,11 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height, #include <limits> #include <string> #include <vector> +#include <set> -#if __cplusplus > 199711L +// https://stackoverflow.com/questions/5047971/how-do-i-check-for-c11-support +#if __cplusplus > 199711L || (defined(_MSC_VER) && _MSC_VER >= 1900) +#define TINYEXR_HAS_CXX11 (1) // C++11 #include <cstdint> @@ -547,6 +612,7 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height, #endif #if TINYEXR_USE_MINIZ +#include <miniz.h> #else // Issue #46. Please include your own zlib-compatible API header before // including `tinyexr.h` @@ -588,6467 +654,6 @@ typedef long long tinyexr_int64; #endif #endif -#if TINYEXR_USE_MINIZ - -namespace miniz { - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wc++11-long-long" -#pragma clang diagnostic ignored "-Wold-style-cast" -#pragma clang diagnostic ignored "-Wpadded" -#pragma clang diagnostic ignored "-Wsign-conversion" -#pragma clang diagnostic ignored "-Wc++11-extensions" -#pragma clang diagnostic ignored "-Wconversion" -#pragma clang diagnostic ignored "-Wunused-function" -#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" -#pragma clang diagnostic ignored "-Wundef" - -#if __has_warning("-Wcomma") -#pragma clang diagnostic ignored "-Wcomma" -#endif - -#if __has_warning("-Wmacro-redefined") -#pragma clang diagnostic ignored "-Wmacro-redefined" -#endif - -#if __has_warning("-Wcast-qual") -#pragma clang diagnostic ignored "-Wcast-qual" -#endif - -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif - -#if __has_warning("-Wtautological-constant-compare") -#pragma clang diagnostic ignored "-Wtautological-constant-compare" -#endif - -#if __has_warning("-Wextra-semi-stmt") -#pragma clang diagnostic ignored "-Wextra-semi-stmt" -#endif - -#endif - -/* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP - reading/writing/appending, PNG writing - See "unlicense" statement at the end of this file. - Rich Geldreich <richgel99@gmail.com>, last updated Oct. 13, 2013 - Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: - http://www.ietf.org/rfc/rfc1951.txt - - Most API's defined in miniz.c are optional. For example, to disable the - archive related functions just define - MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO - (see the list below for more macros). - - * Change History - 10/13/13 v1.15 r4 - Interim bugfix release while I work on the next major - release with Zip64 support (almost there!): - - Critical fix for the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY bug - (thanks kahmyong.moon@hp.com) which could cause locate files to not find - files. This bug - would only have occurred in earlier versions if you explicitly used this - flag, OR if you used mz_zip_extract_archive_file_to_heap() or - mz_zip_add_mem_to_archive_file_in_place() - (which used this flag). If you can't switch to v1.15 but want to fix - this bug, just remove the uses of this flag from both helper funcs (and of - course don't use the flag). - - Bugfix in mz_zip_reader_extract_to_mem_no_alloc() from kymoon when - pUser_read_buf is not NULL and compressed size is > uncompressed size - - Fixing mz_zip_reader_extract_*() funcs so they don't try to extract - compressed data from directory entries, to account for weird zipfiles which - contain zero-size compressed data on dir entries. - Hopefully this fix won't cause any issues on weird zip archives, - because it assumes the low 16-bits of zip external attributes are DOS - attributes (which I believe they always are in practice). - - Fixing mz_zip_reader_is_file_a_directory() so it doesn't check the - internal attributes, just the filename and external attributes - - mz_zip_reader_init_file() - missing MZ_FCLOSE() call if the seek failed - - Added cmake support for Linux builds which builds all the examples, - tested with clang v3.3 and gcc v4.6. - - Clang fix for tdefl_write_image_to_png_file_in_memory() from toffaletti - - Merged MZ_FORCEINLINE fix from hdeanclark - - Fix <time.h> include before config #ifdef, thanks emil.brink - - Added tdefl_write_image_to_png_file_in_memory_ex(): supports Y flipping - (super useful for OpenGL apps), and explicit control over the compression - level (so you can - set it to 1 for real-time compression). - - Merged in some compiler fixes from paulharris's github repro. - - Retested this build under Windows (VS 2010, including static analysis), - tcc 0.9.26, gcc v4.6 and clang v3.3. - - Added example6.c, which dumps an image of the mandelbrot set to a PNG - file. - - Modified example2 to help test the - MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY flag more. - - In r3: Bugfix to mz_zip_writer_add_file() found during merge: Fix - possible src file fclose() leak if alignment bytes+local header file write - faiiled - - In r4: Minor bugfix to mz_zip_writer_add_from_zip_reader(): - Was pushing the wrong central dir header offset, appears harmless in this - release, but it became a problem in the zip64 branch - 5/20/12 v1.14 - MinGW32/64 GCC 4.6.1 compiler fixes: added MZ_FORCEINLINE, - #include <time.h> (thanks fermtect). - 5/19/12 v1.13 - From jason@cornsyrup.org and kelwert@mtu.edu - Fix - mz_crc32() so it doesn't compute the wrong CRC-32's when mz_ulong is 64-bit. - - Temporarily/locally slammed in "typedef unsigned long mz_ulong" and - re-ran a randomized regression test on ~500k files. - - Eliminated a bunch of warnings when compiling with GCC 32-bit/64. - - Ran all examples, miniz.c, and tinfl.c through MSVC 2008's /analyze - (static analysis) option and fixed all warnings (except for the silly - "Use of the comma-operator in a tested expression.." analysis warning, - which I purposely use to work around a MSVC compiler warning). - - Created 32-bit and 64-bit Codeblocks projects/workspace. Built and - tested Linux executables. The codeblocks workspace is compatible with - Linux+Win32/x64. - - Added miniz_tester solution/project, which is a useful little app - derived from LZHAM's tester app that I use as part of the regression test. - - Ran miniz.c and tinfl.c through another series of regression testing on - ~500,000 files and archives. - - Modified example5.c so it purposely disables a bunch of high-level - functionality (MINIZ_NO_STDIO, etc.). (Thanks to corysama for the - MINIZ_NO_STDIO bug report.) - - Fix ftell() usage in examples so they exit with an error on files which - are too large (a limitation of the examples, not miniz itself). - 4/12/12 v1.12 - More comments, added low-level example5.c, fixed a couple - minor level_and_flags issues in the archive API's. - level_and_flags can now be set to MZ_DEFAULT_COMPRESSION. Thanks to Bruce - Dawson <bruced@valvesoftware.com> for the feedback/bug report. - 5/28/11 v1.11 - Added statement from unlicense.org - 5/27/11 v1.10 - Substantial compressor optimizations: - - Level 1 is now ~4x faster than before. The L1 compressor's throughput - now varies between 70-110MB/sec. on a - - Core i7 (actual throughput varies depending on the type of data, and x64 - vs. x86). - - Improved baseline L2-L9 compression perf. Also, greatly improved - compression perf. issues on some file types. - - Refactored the compression code for better readability and - maintainability. - - Added level 10 compression level (L10 has slightly better ratio than - level 9, but could have a potentially large - drop in throughput on some files). - 5/15/11 v1.09 - Initial stable release. - - * Low-level Deflate/Inflate implementation notes: - - Compression: Use the "tdefl" API's. The compressor supports raw, static, - and dynamic blocks, lazy or - greedy parsing, match length filtering, RLE-only, and Huffman-only streams. - It performs and compresses - approximately as well as zlib. - - Decompression: Use the "tinfl" API's. The entire decompressor is - implemented as a single function - coroutine: see tinfl_decompress(). It supports decompression into a 32KB - (or larger power of 2) wrapping buffer, or into a memory - block large enough to hold the entire file. - - The low-level tdefl/tinfl API's do not make any use of dynamic memory - allocation. - - * zlib-style API notes: - - miniz.c implements a fairly large subset of zlib. There's enough - functionality present for it to be a drop-in - zlib replacement in many apps: - The z_stream struct, optional memory allocation callbacks - deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound - inflateInit/inflateInit2/inflate/inflateEnd - compress, compress2, compressBound, uncompress - CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly - routines. - Supports raw deflate streams or standard zlib streams with adler-32 - checking. - - Limitations: - The callback API's are not implemented yet. No support for gzip headers or - zlib static dictionaries. - I've tried to closely emulate zlib's various flavors of stream flushing - and return status codes, but - there are no guarantees that miniz.c pulls this off perfectly. - - * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function, - originally written by - Alex Evans. Supports 1-4 bytes/pixel images. - - * ZIP archive API notes: - - The ZIP archive API's where designed with simplicity and efficiency in - mind, with just enough abstraction to - get the job done with minimal fuss. There are simple API's to retrieve file - information, read files from - existing archives, create new archives, append new files to existing - archives, or clone archive data from - one archive to another. It supports archives located in memory or the heap, - on disk (using stdio.h), - or you can specify custom file read/write callbacks. - - - Archive reading: Just call this function to read a single file from a - disk archive: - - void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const - char *pArchive_name, - size_t *pSize, mz_uint zip_flags); - - For more complex cases, use the "mz_zip_reader" functions. Upon opening an - archive, the entire central - directory is located and read as-is into memory, and subsequent file access - only occurs when reading individual files. - - - Archives file scanning: The simple way is to use this function to scan a - loaded archive for a specific file: - - int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, - const char *pComment, mz_uint flags); - - The locate operation can optionally check file comments too, which (as one - example) can be used to identify - multiple versions of the same file in an archive. This function uses a - simple linear search through the central - directory, so it's not very fast. - - Alternately, you can iterate through all the files in an archive (using - mz_zip_reader_get_num_files()) and - retrieve detailed info on each file by calling mz_zip_reader_file_stat(). - - - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer - immediately writes compressed file data - to disk and builds an exact image of the central directory in memory. The - central directory image is written - all at once at the end of the archive file when the archive is finalized. - - The archive writer can optionally align each file's local header and file - data to any power of 2 alignment, - which can be useful when the archive will be read from optical media. Also, - the writer supports placing - arbitrary data blobs at the very beginning of ZIP archives. Archives - written using either feature are still - readable by any ZIP tool. - - - Archive appending: The simple way to add a single file to an archive is - to call this function: - - mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, - const char *pArchive_name, - const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 - comment_size, mz_uint level_and_flags); - - The archive will be created if it doesn't already exist, otherwise it'll be - appended to. - Note the appending is done in-place and is not an atomic operation, so if - something goes wrong - during the operation it's possible the archive could be left without a - central directory (although the local - file headers and file data will be fine, so the archive will be - recoverable). - - For more complex archive modification scenarios: - 1. The safest way is to use a mz_zip_reader to read the existing archive, - cloning only those bits you want to - preserve into a new archive using using the - mz_zip_writer_add_from_zip_reader() function (which compiles the - compressed file data as-is). When you're done, delete the old archive and - rename the newly written archive, and - you're done. This is safe but requires a bunch of temporary disk space or - heap memory. - - 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using - mz_zip_writer_init_from_reader(), - append new files as needed, then finalize the archive which will write an - updated central directory to the - original archive. (This is basically what - mz_zip_add_mem_to_archive_file_in_place() does.) There's a - possibility that the archive's central directory could be lost with this - method if anything goes wrong, though. - - - ZIP archive support limitations: - No zip64 or spanning support. Extraction functions can only handle - unencrypted, stored or deflated files. - Requires streams capable of seeking. - - * This is a header file library, like stb_image.c. To get only a header file, - either cut and paste the - below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then - include miniz.c from it. - - * Important: For best perf. be sure to customize the below macros for your - target platform: - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 - #define MINIZ_LITTLE_ENDIAN 1 - #define MINIZ_HAS_64BIT_REGISTERS 1 - - * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before - including miniz.c to ensure miniz - uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be - able to process large files - (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes). -*/ - -#ifndef MINIZ_HEADER_INCLUDED -#define MINIZ_HEADER_INCLUDED - -//#include <stdlib.h> - -// Defines to completely disable specific portions of miniz.c: -// If all macros here are defined the only functionality remaining will be -// CRC-32, adler-32, tinfl, and tdefl. - -// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on -// stdio for file I/O. -//#define MINIZ_NO_STDIO - -// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able -// to get the current time, or -// get/set file times, and the C run-time funcs that get/set times won't be -// called. -// The current downside is the times written to your archives will be from 1979. -#define MINIZ_NO_TIME - -// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. -#define MINIZ_NO_ARCHIVE_APIS - -// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive -// API's. -//#define MINIZ_NO_ARCHIVE_WRITING_APIS - -// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression -// API's. -//#define MINIZ_NO_ZLIB_APIS - -// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent -// conflicts against stock zlib. -//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES - -// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. -// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom -// user alloc/free/realloc -// callbacks to the zlib and archive API's, and a few stand-alone helper API's -// which don't provide custom user -// functions (such as tdefl_compress_mem_to_heap() and -// tinfl_decompress_mem_to_heap()) won't work. -//#define MINIZ_NO_MALLOC - -#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) -// TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc -// on Linux -#define MINIZ_NO_TIME -#endif - -#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) -//#include <time.h> -#endif - -#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \ - defined(__i386) || defined(__i486__) || defined(__i486) || \ - defined(i386) || defined(__ia64__) || defined(__x86_64__) -// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. -#define MINIZ_X86_OR_X64_CPU 1 -#endif - -#if defined(__sparcv9) -// Big endian -#else -#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU -// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. -#define MINIZ_LITTLE_ENDIAN 1 -#endif -#endif - -#if MINIZ_X86_OR_X64_CPU -// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient -// integer loads and stores from unaligned addresses. -//#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 -#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES \ - 0 // disable to suppress compiler warnings -#endif - -#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \ - defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \ - defined(__x86_64__) -// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are -// reasonably fast (and don't involve compiler generated calls to helper -// functions). -#define MINIZ_HAS_64BIT_REGISTERS 1 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// ------------------- zlib-style API Definitions. - -// For more compatibility with zlib, miniz.c uses unsigned long for some -// parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! -typedef unsigned long mz_ulong; - -// mz_free() internally uses the MZ_FREE() macro (which by default calls free() -// unless you've modified the MZ_MALLOC macro) to release a block allocated from -// the heap. -void mz_free(void *p); - -#define MZ_ADLER32_INIT (1) -// mz_adler32() returns the initial adler-32 value to use when called with -// ptr==NULL. -mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); - -#define MZ_CRC32_INIT (0) -// mz_crc32() returns the initial CRC-32 value to use when called with -// ptr==NULL. -mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); - -// Compression strategies. -enum { - MZ_DEFAULT_STRATEGY = 0, - MZ_FILTERED = 1, - MZ_HUFFMAN_ONLY = 2, - MZ_RLE = 3, - MZ_FIXED = 4 -}; - -// Method -#define MZ_DEFLATED 8 - -#ifndef MINIZ_NO_ZLIB_APIS - -// Heap allocation callbacks. -// Note that mz_alloc_func parameter types purpsosely differ from zlib's: -// items/size is size_t, not unsigned long. -typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); -typedef void (*mz_free_func)(void *opaque, void *address); -typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, - size_t size); - -#define MZ_VERSION "9.1.15" -#define MZ_VERNUM 0x91F0 -#define MZ_VER_MAJOR 9 -#define MZ_VER_MINOR 1 -#define MZ_VER_REVISION 15 -#define MZ_VER_SUBREVISION 0 - -// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The -// other values are for advanced use (refer to the zlib docs). -enum { - MZ_NO_FLUSH = 0, - MZ_PARTIAL_FLUSH = 1, - MZ_SYNC_FLUSH = 2, - MZ_FULL_FLUSH = 3, - MZ_FINISH = 4, - MZ_BLOCK = 5 -}; - -// Return status codes. MZ_PARAM_ERROR is non-standard. -enum { - MZ_OK = 0, - MZ_STREAM_END = 1, - MZ_NEED_DICT = 2, - MZ_ERRNO = -1, - MZ_STREAM_ERROR = -2, - MZ_DATA_ERROR = -3, - MZ_MEM_ERROR = -4, - MZ_BUF_ERROR = -5, - MZ_VERSION_ERROR = -6, - MZ_PARAM_ERROR = -10000 -}; - -// Compression levels: 0-9 are the standard zlib-style levels, 10 is best -// possible compression (not zlib compatible, and may be very slow), -// MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. -enum { - MZ_NO_COMPRESSION = 0, - MZ_BEST_SPEED = 1, - MZ_BEST_COMPRESSION = 9, - MZ_UBER_COMPRESSION = 10, - MZ_DEFAULT_LEVEL = 6, - MZ_DEFAULT_COMPRESSION = -1 -}; - -// Window bits -#define MZ_DEFAULT_WINDOW_BITS 15 - -struct mz_internal_state; - -// Compression/decompression stream struct. -typedef struct mz_stream_s { - const unsigned char *next_in; // pointer to next byte to read - unsigned int avail_in; // number of bytes available at next_in - mz_ulong total_in; // total number of bytes consumed so far - - unsigned char *next_out; // pointer to next byte to write - unsigned int avail_out; // number of bytes that can be written to next_out - mz_ulong total_out; // total number of bytes produced so far - - char *msg; // error msg (unused) - struct mz_internal_state *state; // internal state, allocated by zalloc/zfree - - mz_alloc_func - zalloc; // optional heap allocation function (defaults to malloc) - mz_free_func zfree; // optional heap free function (defaults to free) - void *opaque; // heap alloc function user pointer - - int data_type; // data_type (unused) - mz_ulong adler; // adler32 of the source or uncompressed data - mz_ulong reserved; // not used -} mz_stream; - -typedef mz_stream *mz_streamp; - -// Returns the version string of miniz.c. -const char *mz_version(void); - -// mz_deflateInit() initializes a compressor with default options: -// Parameters: -// pStream must point to an initialized mz_stream struct. -// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. -// level 1 enables a specially optimized compression function that's been -// optimized purely for performance, not ratio. -// (This special func. is currently only enabled when -// MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) -// Return values: -// MZ_OK on success. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_PARAM_ERROR if the input parameters are bogus. -// MZ_MEM_ERROR on out of memory. -int mz_deflateInit(mz_streamp pStream, int level); - -// mz_deflateInit2() is like mz_deflate(), except with more control: -// Additional parameters: -// method must be MZ_DEFLATED -// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with -// zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no -// header or footer) -// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) -int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, - int mem_level, int strategy); - -// Quickly resets a compressor without having to reallocate anything. Same as -// calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). -int mz_deflateReset(mz_streamp pStream); - -// mz_deflate() compresses the input to output, consuming as much of the input -// and producing as much output as possible. -// Parameters: -// pStream is the stream to read from and write to. You must initialize/update -// the next_in, avail_in, next_out, and avail_out members. -// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or -// MZ_FINISH. -// Return values: -// MZ_OK on success (when flushing, or if more input is needed but not -// available, and/or there's more output to be written but the output buffer -// is full). -// MZ_STREAM_END if all input has been consumed and all output bytes have been -// written. Don't call mz_deflate() on the stream anymore. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_PARAM_ERROR if one of the parameters is invalid. -// MZ_BUF_ERROR if no forward progress is possible because the input and/or -// output buffers are empty. (Fill up the input buffer or free up some output -// space and try again.) -int mz_deflate(mz_streamp pStream, int flush); - -// mz_deflateEnd() deinitializes a compressor: -// Return values: -// MZ_OK on success. -// MZ_STREAM_ERROR if the stream is bogus. -int mz_deflateEnd(mz_streamp pStream); - -// mz_deflateBound() returns a (very) conservative upper bound on the amount of -// data that could be generated by deflate(), assuming flush is set to only -// MZ_NO_FLUSH or MZ_FINISH. -mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); - -// Single-call compression functions mz_compress() and mz_compress2(): -// Returns MZ_OK on success, or one of the error codes from mz_deflate() on -// failure. -int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len); -int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len, int level); - -// mz_compressBound() returns a (very) conservative upper bound on the amount of -// data that could be generated by calling mz_compress(). -mz_ulong mz_compressBound(mz_ulong source_len); - -// Initializes a decompressor. -int mz_inflateInit(mz_streamp pStream); - -// mz_inflateInit2() is like mz_inflateInit() with an additional option that -// controls the window size and whether or not the stream has been wrapped with -// a zlib header/footer: -// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -// -MZ_DEFAULT_WINDOW_BITS (raw deflate). -int mz_inflateInit2(mz_streamp pStream, int window_bits); - -// Decompresses the input stream to the output, consuming only as much of the -// input as needed, and writing as much to the output as possible. -// Parameters: -// pStream is the stream to read from and write to. You must initialize/update -// the next_in, avail_in, next_out, and avail_out members. -// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. -// On the first call, if flush is MZ_FINISH it's assumed the input and output -// buffers are both sized large enough to decompress the entire stream in a -// single call (this is slightly faster). -// MZ_FINISH implies that there are no more source bytes available beside -// what's already in the input buffer, and that the output buffer is large -// enough to hold the rest of the decompressed data. -// Return values: -// MZ_OK on success. Either more input is needed but not available, and/or -// there's more output to be written but the output buffer is full. -// MZ_STREAM_END if all needed input has been consumed and all output bytes -// have been written. For zlib streams, the adler-32 of the decompressed data -// has also been verified. -// MZ_STREAM_ERROR if the stream is bogus. -// MZ_DATA_ERROR if the deflate stream is invalid. -// MZ_PARAM_ERROR if one of the parameters is invalid. -// MZ_BUF_ERROR if no forward progress is possible because the input buffer is -// empty but the inflater needs more input to continue, or if the output -// buffer is not large enough. Call mz_inflate() again -// with more input data, or with more room in the output buffer (except when -// using single call decompression, described above). -int mz_inflate(mz_streamp pStream, int flush); - -// Deinitializes a decompressor. -int mz_inflateEnd(mz_streamp pStream); - -// Single-call decompression. -// Returns MZ_OK on success, or one of the error codes from mz_inflate() on -// failure. -int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len); - -// Returns a string description of the specified error code, or NULL if the -// error code is invalid. -const char *mz_error(int err); - -// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used -// as a drop-in replacement for the subset of zlib that miniz.c supports. -// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you -// use zlib in the same project. -#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES -typedef unsigned char Byte; -typedef unsigned int uInt; -typedef mz_ulong uLong; -typedef Byte Bytef; -typedef uInt uIntf; -typedef char charf; -typedef int intf; -typedef void *voidpf; -typedef uLong uLongf; -typedef void *voidp; -typedef void *const voidpc; -#define Z_NULL 0 -#define Z_NO_FLUSH MZ_NO_FLUSH -#define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH -#define Z_SYNC_FLUSH MZ_SYNC_FLUSH -#define Z_FULL_FLUSH MZ_FULL_FLUSH -#define Z_FINISH MZ_FINISH -#define Z_BLOCK MZ_BLOCK -#define Z_OK MZ_OK -#define Z_STREAM_END MZ_STREAM_END -#define Z_NEED_DICT MZ_NEED_DICT -#define Z_ERRNO MZ_ERRNO -#define Z_STREAM_ERROR MZ_STREAM_ERROR -#define Z_DATA_ERROR MZ_DATA_ERROR -#define Z_MEM_ERROR MZ_MEM_ERROR -#define Z_BUF_ERROR MZ_BUF_ERROR -#define Z_VERSION_ERROR MZ_VERSION_ERROR -#define Z_PARAM_ERROR MZ_PARAM_ERROR -#define Z_NO_COMPRESSION MZ_NO_COMPRESSION -#define Z_BEST_SPEED MZ_BEST_SPEED -#define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION -#define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION -#define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY -#define Z_FILTERED MZ_FILTERED -#define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY -#define Z_RLE MZ_RLE -#define Z_FIXED MZ_FIXED -#define Z_DEFLATED MZ_DEFLATED -#define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS -#define alloc_func mz_alloc_func -#define free_func mz_free_func -#define internal_state mz_internal_state -#define z_stream mz_stream -#define deflateInit mz_deflateInit -#define deflateInit2 mz_deflateInit2 -#define deflateReset mz_deflateReset -#define deflate mz_deflate -#define deflateEnd mz_deflateEnd -#define deflateBound mz_deflateBound -#define compress mz_compress -#define compress2 mz_compress2 -#define compressBound mz_compressBound -#define inflateInit mz_inflateInit -#define inflateInit2 mz_inflateInit2 -#define inflate mz_inflate -#define inflateEnd mz_inflateEnd -#define uncompress mz_uncompress -#define crc32 mz_crc32 -#define adler32 mz_adler32 -#define MAX_WBITS 15 -#define MAX_MEM_LEVEL 9 -#define zError mz_error -#define ZLIB_VERSION MZ_VERSION -#define ZLIB_VERNUM MZ_VERNUM -#define ZLIB_VER_MAJOR MZ_VER_MAJOR -#define ZLIB_VER_MINOR MZ_VER_MINOR -#define ZLIB_VER_REVISION MZ_VER_REVISION -#define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION -#define zlibVersion mz_version -#define zlib_version mz_version() -#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES - -#endif // MINIZ_NO_ZLIB_APIS - -// ------------------- Types and macros - -typedef unsigned char mz_uint8; -typedef signed short mz_int16; -typedef unsigned short mz_uint16; -typedef unsigned int mz_uint32; -typedef unsigned int mz_uint; -typedef long long mz_int64; -typedef unsigned long long mz_uint64; -typedef int mz_bool; - -#define MZ_FALSE (0) -#define MZ_TRUE (1) - -// An attempt to work around MSVC's spammy "warning C4127: conditional -// expression is constant" message. -#ifdef _MSC_VER -#define MZ_MACRO_END while (0, 0) -#else -#define MZ_MACRO_END while (0) -#endif - -// ------------------- ZIP archive reading/writing - -#ifndef MINIZ_NO_ARCHIVE_APIS - -enum { - MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024, - MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260, - MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256 -}; - -typedef struct { - mz_uint32 m_file_index; - mz_uint32 m_central_dir_ofs; - mz_uint16 m_version_made_by; - mz_uint16 m_version_needed; - mz_uint16 m_bit_flag; - mz_uint16 m_method; -#ifndef MINIZ_NO_TIME - time_t m_time; -#endif - mz_uint32 m_crc32; - mz_uint64 m_comp_size; - mz_uint64 m_uncomp_size; - mz_uint16 m_internal_attr; - mz_uint32 m_external_attr; - mz_uint64 m_local_header_ofs; - mz_uint32 m_comment_size; - char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; - char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; -} mz_zip_archive_file_stat; - -typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, - void *pBuf, size_t n); -typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, - const void *pBuf, size_t n); - -struct mz_zip_internal_state_tag; -typedef struct mz_zip_internal_state_tag mz_zip_internal_state; - -typedef enum { - MZ_ZIP_MODE_INVALID = 0, - MZ_ZIP_MODE_READING = 1, - MZ_ZIP_MODE_WRITING = 2, - MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 -} mz_zip_mode; - -typedef struct mz_zip_archive_tag { - mz_uint64 m_archive_size; - mz_uint64 m_central_directory_file_ofs; - mz_uint m_total_files; - mz_zip_mode m_zip_mode; - - mz_uint m_file_offset_alignment; - - mz_alloc_func m_pAlloc; - mz_free_func m_pFree; - mz_realloc_func m_pRealloc; - void *m_pAlloc_opaque; - - mz_file_read_func m_pRead; - mz_file_write_func m_pWrite; - void *m_pIO_opaque; - - mz_zip_internal_state *m_pState; - -} mz_zip_archive; - -typedef enum { - MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, - MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, - MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, - MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800 -} mz_zip_flags; - -// ZIP archive reading - -// Inits a ZIP archive reader. -// These functions read and validate the archive's central directory. -mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, - mz_uint32 flags); -mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, - size_t size, mz_uint32 flags); - -#ifndef MINIZ_NO_STDIO -mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, - mz_uint32 flags); -#endif - -// Returns the total number of files in the archive. -mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); - -// Returns detailed information about an archive file entry. -mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, - mz_zip_archive_file_stat *pStat); - -// Determines if an archive file entry is a directory entry. -mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, - mz_uint file_index); -mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, - mz_uint file_index); - -// Retrieves the filename of an archive file entry. -// Returns the number of bytes written to pFilename, or if filename_buf_size is -// 0 this function returns the number of bytes needed to fully store the -// filename. -mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, - char *pFilename, mz_uint filename_buf_size); - -// Attempts to locates a file in the archive's central directory. -// Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH -// Returns -1 if the file cannot be found. -int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, - const char *pComment, mz_uint flags); - -// Extracts a archive file to a memory buffer using no memory allocation. -mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, - mz_uint file_index, void *pBuf, - size_t buf_size, mz_uint flags, - void *pUser_read_buf, - size_t user_read_buf_size); -mz_bool mz_zip_reader_extract_file_to_mem_no_alloc( - mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, - mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); - -// Extracts a archive file to a memory buffer. -mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, - void *pBuf, size_t buf_size, - mz_uint flags); -mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, - const char *pFilename, void *pBuf, - size_t buf_size, mz_uint flags); - -// Extracts a archive file to a dynamically allocated heap buffer. -void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, - size_t *pSize, mz_uint flags); -void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, - const char *pFilename, size_t *pSize, - mz_uint flags); - -// Extracts a archive file using a callback function to output the file's data. -mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, - mz_uint file_index, - mz_file_write_func pCallback, - void *pOpaque, mz_uint flags); -mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, - const char *pFilename, - mz_file_write_func pCallback, - void *pOpaque, mz_uint flags); - -#ifndef MINIZ_NO_STDIO -// Extracts a archive file to a disk file and sets its last accessed and -// modified times. -// This function only extracts files, not archive directory records. -mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, - const char *pDst_filename, mz_uint flags); -mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, - const char *pArchive_filename, - const char *pDst_filename, - mz_uint flags); -#endif - -// Ends archive reading, freeing all allocations, and closing the input archive -// file if mz_zip_reader_init_file() was used. -mz_bool mz_zip_reader_end(mz_zip_archive *pZip); - -// ZIP archive writing - -#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS - -// Inits a ZIP archive writer. -mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); -mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, - size_t size_to_reserve_at_beginning, - size_t initial_allocation_size); - -#ifndef MINIZ_NO_STDIO -mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, - mz_uint64 size_to_reserve_at_beginning); -#endif - -// Converts a ZIP archive reader object into a writer object, to allow efficient -// in-place file appends to occur on an existing archive. -// For archives opened using mz_zip_reader_init_file, pFilename must be the -// archive's filename so it can be reopened for writing. If the file can't be -// reopened, mz_zip_reader_end() will be called. -// For archives opened using mz_zip_reader_init_mem, the memory block must be -// growable using the realloc callback (which defaults to realloc unless you've -// overridden it). -// Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's -// user provided m_pWrite function cannot be NULL. -// Note: In-place archive modification is not recommended unless you know what -// you're doing, because if execution stops or something goes wrong before -// the archive is finalized the file's central directory will be hosed. -mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, - const char *pFilename); - -// Adds the contents of a memory buffer to an archive. These functions record -// the current local time into the archive. -// To add a directory entry, call this method with an archive name ending in a -// forwardslash with empty buffer. -// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, -// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or -// just set to MZ_DEFAULT_COMPRESSION. -mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, - const void *pBuf, size_t buf_size, - mz_uint level_and_flags); -mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, - const char *pArchive_name, const void *pBuf, - size_t buf_size, const void *pComment, - mz_uint16 comment_size, - mz_uint level_and_flags, mz_uint64 uncomp_size, - mz_uint32 uncomp_crc32); - -#ifndef MINIZ_NO_STDIO -// Adds the contents of a disk file to an archive. This function also records -// the disk file's modified time into the archive. -// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, -// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or -// just set to MZ_DEFAULT_COMPRESSION. -mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, - const char *pSrc_filename, const void *pComment, - mz_uint16 comment_size, mz_uint level_and_flags); -#endif - -// Adds a file to an archive by fully cloning the data from another archive. -// This function fully clones the source file's compressed data (no -// recompression), along with its full filename, extra data, and comment fields. -mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, - mz_zip_archive *pSource_zip, - mz_uint file_index); - -// Finalizes the archive by writing the central directory records followed by -// the end of central directory record. -// After an archive is finalized, the only valid call on the mz_zip_archive -// struct is mz_zip_writer_end(). -// An archive must be manually finalized by calling this function for it to be -// valid. -mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); -mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, - size_t *pSize); - -// Ends archive writing, freeing all allocations, and closing the output file if -// mz_zip_writer_init_file() was used. -// Note for the archive to be valid, it must have been finalized before ending. -mz_bool mz_zip_writer_end(mz_zip_archive *pZip); - -// Misc. high-level helper functions: - -// mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) -// appends a memory blob to a ZIP archive. -// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, -// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or -// just set to MZ_DEFAULT_COMPRESSION. -mz_bool mz_zip_add_mem_to_archive_file_in_place( - const char *pZip_filename, const char *pArchive_name, const void *pBuf, - size_t buf_size, const void *pComment, mz_uint16 comment_size, - mz_uint level_and_flags); - -// Reads a single file from an archive into a heap block. -// Returns NULL on failure. -void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, - const char *pArchive_name, - size_t *pSize, mz_uint zip_flags); - -#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS - -#endif // #ifndef MINIZ_NO_ARCHIVE_APIS - -// ------------------- Low-level Decompression API Definitions - -// Decompression flags used by tinfl_decompress(). -// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and -// ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the -// input is a raw deflate stream. -// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available -// beyond the end of the supplied input buffer. If clear, the input buffer -// contains all remaining input. -// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large -// enough to hold the entire decompressed stream. If clear, the output buffer is -// at least the size of the dictionary (typically 32KB). -// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the -// decompressed bytes. -enum { - TINFL_FLAG_PARSE_ZLIB_HEADER = 1, - TINFL_FLAG_HAS_MORE_INPUT = 2, - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, - TINFL_FLAG_COMPUTE_ADLER32 = 8 -}; - -// High level decompression functions: -// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block -// allocated via malloc(). -// On entry: -// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data -// to decompress. -// On return: -// Function returns a pointer to the decompressed data, or NULL on failure. -// *pOut_len will be set to the decompressed data's size, which could be larger -// than src_buf_len on uncompressible data. -// The caller must call mz_free() on the returned block when it's no longer -// needed. -void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, - size_t *pOut_len, int flags); - -// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block -// in memory. -// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes -// written on success. -#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) -size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, - const void *pSrc_buf, size_t src_buf_len, - int flags); - -// tinfl_decompress_mem_to_callback() decompresses a block in memory to an -// internal 32KB buffer, and a user provided callback function will be called to -// flush the buffer. -// Returns 1 on success or 0 on failure. -typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); -int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, - tinfl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags); - -struct tinfl_decompressor_tag; -typedef struct tinfl_decompressor_tag tinfl_decompressor; - -// Max size of LZ dictionary. -#define TINFL_LZ_DICT_SIZE 32768 - -// Return status. -typedef enum { - TINFL_STATUS_BAD_PARAM = -3, - TINFL_STATUS_ADLER32_MISMATCH = -2, - TINFL_STATUS_FAILED = -1, - TINFL_STATUS_DONE = 0, - TINFL_STATUS_NEEDS_MORE_INPUT = 1, - TINFL_STATUS_HAS_MORE_OUTPUT = 2 -} tinfl_status; - -// Initializes the decompressor to its initial state. -#define tinfl_init(r) \ - do { \ - (r)->m_state = 0; \ - } \ - MZ_MACRO_END -#define tinfl_get_adler32(r) (r)->m_check_adler32 - -// Main low-level decompressor coroutine function. This is the only function -// actually needed for decompression. All the other functions are just -// high-level helpers for improved usability. -// This is a universal API, i.e. it can be used as a building block to build any -// desired higher level decompression API. In the limit case, it can be called -// once per every byte input or output. -tinfl_status tinfl_decompress(tinfl_decompressor *r, - const mz_uint8 *pIn_buf_next, - size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, - mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, - const mz_uint32 decomp_flags); - -// Internal/private bits follow. -enum { - TINFL_MAX_HUFF_TABLES = 3, - TINFL_MAX_HUFF_SYMBOLS_0 = 288, - TINFL_MAX_HUFF_SYMBOLS_1 = 32, - TINFL_MAX_HUFF_SYMBOLS_2 = 19, - TINFL_FAST_LOOKUP_BITS = 10, - TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS -}; - -typedef struct { - mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; - mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], - m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; -} tinfl_huff_table; - -#if MINIZ_HAS_64BIT_REGISTERS -#define TINFL_USE_64BIT_BITBUF 1 -#endif - -#if TINFL_USE_64BIT_BITBUF -typedef mz_uint64 tinfl_bit_buf_t; -#define TINFL_BITBUF_SIZE (64) -#else -typedef mz_uint32 tinfl_bit_buf_t; -#define TINFL_BITBUF_SIZE (32) -#endif - -struct tinfl_decompressor_tag { - mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, - m_check_adler32, m_dist, m_counter, m_num_extra, - m_table_sizes[TINFL_MAX_HUFF_TABLES]; - tinfl_bit_buf_t m_bit_buf; - size_t m_dist_from_out_buf_start; - tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; - mz_uint8 m_raw_header[4], - m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; -}; - -// ------------------- Low-level Compression API Definitions - -// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly -// slower, and raw/dynamic blocks will be output more frequently). -#define TDEFL_LESS_MEMORY 0 - -// tdefl_init() compression flags logically OR'd together (low 12 bits contain -// the max. number of probes per dictionary search): -// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes -// per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap -// compression), 4095=Huffman+LZ (slowest/best compression). -enum { - TDEFL_HUFFMAN_ONLY = 0, - TDEFL_DEFAULT_MAX_PROBES = 128, - TDEFL_MAX_PROBES_MASK = 0xFFF -}; - -// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before -// the deflate data, and the Adler-32 of the source data at the end. Otherwise, -// you'll get raw deflate data. -// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even -// when not writing zlib headers). -// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more -// efficient lazy parsing. -// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's -// initialization time to the minimum, but the output may vary from run to run -// given the same input (depending on the contents of memory). -// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) -// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. -// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. -// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. -// The low 12 bits are reserved to control the max # of hash probes per -// dictionary lookup (see TDEFL_MAX_PROBES_MASK). -enum { - TDEFL_WRITE_ZLIB_HEADER = 0x01000, - TDEFL_COMPUTE_ADLER32 = 0x02000, - TDEFL_GREEDY_PARSING_FLAG = 0x04000, - TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, - TDEFL_RLE_MATCHES = 0x10000, - TDEFL_FILTER_MATCHES = 0x20000, - TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, - TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 -}; - -// High level compression functions: -// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block -// allocated via malloc(). -// On entry: -// pSrc_buf, src_buf_len: Pointer and size of source block to compress. -// flags: The max match finder probes (default is 128) logically OR'd against -// the above flags. Higher probes are slower but improve compression. -// On return: -// Function returns a pointer to the compressed data, or NULL on failure. -// *pOut_len will be set to the compressed data's size, which could be larger -// than src_buf_len on uncompressible data. -// The caller must free() the returned block when it's no longer needed. -void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, - size_t *pOut_len, int flags); - -// tdefl_compress_mem_to_mem() compresses a block in memory to another block in -// memory. -// Returns 0 on failure. -size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, - const void *pSrc_buf, size_t src_buf_len, - int flags); - -// Compresses an image to a compressed PNG file in memory. -// On entry: -// pImage, w, h, and num_chans describe the image to compress. num_chans may be -// 1, 2, 3, or 4. -// The image pitch in bytes per scanline will be w*num_chans. The leftmost -// pixel on the top scanline is stored first in memory. -// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, -// MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL -// If flip is true, the image will be flipped on the Y axis (useful for OpenGL -// apps). -// On return: -// Function returns a pointer to the compressed data, or NULL on failure. -// *pLen_out will be set to the size of the PNG image file. -// The caller must mz_free() the returned heap block (which will typically be -// larger than *pLen_out) when it's no longer needed. -void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, - int h, int num_chans, - size_t *pLen_out, - mz_uint level, mz_bool flip); -void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, - int num_chans, size_t *pLen_out); - -// Output stream interface. The compressor uses this interface to write -// compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. -typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len, - void *pUser); - -// tdefl_compress_mem_to_output() compresses a block to an output stream. The -// above helpers use this function internally. -mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, - tdefl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags); - -enum { - TDEFL_MAX_HUFF_TABLES = 3, - TDEFL_MAX_HUFF_SYMBOLS_0 = 288, - TDEFL_MAX_HUFF_SYMBOLS_1 = 32, - TDEFL_MAX_HUFF_SYMBOLS_2 = 19, - TDEFL_LZ_DICT_SIZE = 32768, - TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, - TDEFL_MIN_MATCH_LEN = 3, - TDEFL_MAX_MATCH_LEN = 258 -}; - -// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed -// output block (using static/fixed Huffman codes). -#if TDEFL_LESS_MEMORY -enum { - TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, - TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, - TDEFL_MAX_HUFF_SYMBOLS = 288, - TDEFL_LZ_HASH_BITS = 12, - TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, - TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, - TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS -}; -#else -enum { - TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, - TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, - TDEFL_MAX_HUFF_SYMBOLS = 288, - TDEFL_LZ_HASH_BITS = 15, - TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, - TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, - TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS -}; -#endif - -// The low-level tdefl functions below may be used directly if the above helper -// functions aren't flexible enough. The low-level functions don't make any heap -// allocations, unlike the above helper functions. -typedef enum { - TDEFL_STATUS_BAD_PARAM = -2, - TDEFL_STATUS_PUT_BUF_FAILED = -1, - TDEFL_STATUS_OKAY = 0, - TDEFL_STATUS_DONE = 1 -} tdefl_status; - -// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums -typedef enum { - TDEFL_NO_FLUSH = 0, - TDEFL_SYNC_FLUSH = 2, - TDEFL_FULL_FLUSH = 3, - TDEFL_FINISH = 4 -} tdefl_flush; - -// tdefl's compression state structure. -typedef struct { - tdefl_put_buf_func_ptr m_pPut_buf_func; - void *m_pPut_buf_user; - mz_uint m_flags, m_max_probes[2]; - int m_greedy_parsing; - mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; - mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; - mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, - m_bit_buffer; - mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, - m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, - m_wants_to_finish; - tdefl_status m_prev_return_status; - const void *m_pIn_buf; - void *m_pOut_buf; - size_t *m_pIn_buf_size, *m_pOut_buf_size; - tdefl_flush m_flush; - const mz_uint8 *m_pSrc; - size_t m_src_buf_left, m_out_buf_ofs; - mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; - mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; - mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; - mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; - mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; - mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; -} tdefl_compressor; - -// Initializes the compressor. -// There is no corresponding deinit() function because the tdefl API's do not -// dynamically allocate memory. -// pBut_buf_func: If NULL, output data will be supplied to the specified -// callback. In this case, the user should call the tdefl_compress_buffer() API -// for compression. -// If pBut_buf_func is NULL the user should always call the tdefl_compress() -// API. -// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, -// etc.) -tdefl_status tdefl_init(tdefl_compressor *d, - tdefl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags); - -// Compresses a block of data, consuming as much of the specified input buffer -// as possible, and writing as much compressed data to the specified output -// buffer as possible. -tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, - size_t *pIn_buf_size, void *pOut_buf, - size_t *pOut_buf_size, tdefl_flush flush); - -// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a -// non-NULL tdefl_put_buf_func_ptr. -// tdefl_compress_buffer() always consumes the entire input buffer. -tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, - size_t in_buf_size, tdefl_flush flush); - -tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); -mz_uint32 tdefl_get_adler32(tdefl_compressor *d); - -// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't -// defined, because it uses some of its macros. -#ifndef MINIZ_NO_ZLIB_APIS -// Create tdefl_compress() flags given zlib-style compression parameters. -// level may range from [0,10] (where 10 is absolute max compression, but may be -// much slower on some files) -// window_bits may be -15 (raw deflate) or 15 (zlib) -// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, -// MZ_RLE, or MZ_FIXED -mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, - int strategy); -#endif // #ifndef MINIZ_NO_ZLIB_APIS - -#ifdef __cplusplus -} -#endif - -#endif // MINIZ_HEADER_INCLUDED - -// ------------------- End of Header: Implementation follows. (If you only want -// the header, define MINIZ_HEADER_FILE_ONLY.) - -#ifndef MINIZ_HEADER_FILE_ONLY - -typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1]; -typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1]; -typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; - -//#include <assert.h> -//#include <string.h> - -#define MZ_ASSERT(x) assert(x) - -#ifdef MINIZ_NO_MALLOC -#define MZ_MALLOC(x) NULL -#define MZ_FREE(x) (void)x, ((void)0) -#define MZ_REALLOC(p, x) NULL -#else -#define MZ_MALLOC(x) malloc(x) -#define MZ_FREE(x) free(x) -#define MZ_REALLOC(p, x) realloc(p, x) -#endif - -#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b)) -#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN -#define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) -#define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) -#else -#define MZ_READ_LE16(p) \ - ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) -#define MZ_READ_LE32(p) \ - ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | \ - ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) -#endif - -#ifdef _MSC_VER -#define MZ_FORCEINLINE __forceinline -#elif defined(__GNUC__) -#define MZ_FORCEINLINE inline __attribute__((__always_inline__)) -#else -#define MZ_FORCEINLINE inline -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// ------------------- zlib-style API's - -mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) { - mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); - size_t block_len = buf_len % 5552; - if (!ptr) return MZ_ADLER32_INIT; - while (buf_len) { - for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { - s1 += ptr[0], s2 += s1; - s1 += ptr[1], s2 += s1; - s1 += ptr[2], s2 += s1; - s1 += ptr[3], s2 += s1; - s1 += ptr[4], s2 += s1; - s1 += ptr[5], s2 += s1; - s1 += ptr[6], s2 += s1; - s1 += ptr[7], s2 += s1; - } - for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; - s1 %= 65521U, s2 %= 65521U; - buf_len -= block_len; - block_len = 5552; - } - return (s2 << 16) + s1; -} - -// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C -// implementation that balances processor cache usage against speed": -// http://www.geocities.com/malbrain/ -mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { - static const mz_uint32 s_crc32[16] = { - 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, - 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, - 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c}; - mz_uint32 crcu32 = (mz_uint32)crc; - if (!ptr) return MZ_CRC32_INIT; - crcu32 = ~crcu32; - while (buf_len--) { - mz_uint8 b = *ptr++; - crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; - crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; - } - return ~crcu32; -} - -void mz_free(void *p) { MZ_FREE(p); } - -#ifndef MINIZ_NO_ZLIB_APIS - -static void *def_alloc_func(void *opaque, size_t items, size_t size) { - (void)opaque, (void)items, (void)size; - return MZ_MALLOC(items * size); -} -static void def_free_func(void *opaque, void *address) { - (void)opaque, (void)address; - MZ_FREE(address); -} -// static void *def_realloc_func(void *opaque, void *address, size_t items, -// size_t size) { -// (void)opaque, (void)address, (void)items, (void)size; -// return MZ_REALLOC(address, items * size); -//} - -const char *mz_version(void) { return MZ_VERSION; } - -int mz_deflateInit(mz_streamp pStream, int level) { - return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, - MZ_DEFAULT_STRATEGY); -} - -int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, - int mem_level, int strategy) { - tdefl_compressor *pComp; - mz_uint comp_flags = - TDEFL_COMPUTE_ADLER32 | - tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); - - if (!pStream) return MZ_STREAM_ERROR; - if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || - ((window_bits != MZ_DEFAULT_WINDOW_BITS) && - (-window_bits != MZ_DEFAULT_WINDOW_BITS))) - return MZ_PARAM_ERROR; - - pStream->data_type = 0; - pStream->adler = MZ_ADLER32_INIT; - pStream->msg = NULL; - pStream->reserved = 0; - pStream->total_in = 0; - pStream->total_out = 0; - if (!pStream->zalloc) pStream->zalloc = def_alloc_func; - if (!pStream->zfree) pStream->zfree = def_free_func; - - pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, - sizeof(tdefl_compressor)); - if (!pComp) return MZ_MEM_ERROR; - - pStream->state = (struct mz_internal_state *)pComp; - - if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) { - mz_deflateEnd(pStream); - return MZ_PARAM_ERROR; - } - - return MZ_OK; -} - -int mz_deflateReset(mz_streamp pStream) { - if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || - (!pStream->zfree)) - return MZ_STREAM_ERROR; - pStream->total_in = pStream->total_out = 0; - tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL, - ((tdefl_compressor *)pStream->state)->m_flags); - return MZ_OK; -} - -int mz_deflate(mz_streamp pStream, int flush) { - size_t in_bytes, out_bytes; - mz_ulong orig_total_in, orig_total_out; - int mz_status = MZ_OK; - - if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || - (!pStream->next_out)) - return MZ_STREAM_ERROR; - if (!pStream->avail_out) return MZ_BUF_ERROR; - - if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; - - if (((tdefl_compressor *)pStream->state)->m_prev_return_status == - TDEFL_STATUS_DONE) - return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; - - orig_total_in = pStream->total_in; - orig_total_out = pStream->total_out; - for (;;) { - tdefl_status defl_status; - in_bytes = pStream->avail_in; - out_bytes = pStream->avail_out; - - defl_status = tdefl_compress((tdefl_compressor *)pStream->state, - pStream->next_in, &in_bytes, pStream->next_out, - &out_bytes, (tdefl_flush)flush); - pStream->next_in += (mz_uint)in_bytes; - pStream->avail_in -= (mz_uint)in_bytes; - pStream->total_in += (mz_uint)in_bytes; - pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state); - - pStream->next_out += (mz_uint)out_bytes; - pStream->avail_out -= (mz_uint)out_bytes; - pStream->total_out += (mz_uint)out_bytes; - - if (defl_status < 0) { - mz_status = MZ_STREAM_ERROR; - break; - } else if (defl_status == TDEFL_STATUS_DONE) { - mz_status = MZ_STREAM_END; - break; - } else if (!pStream->avail_out) - break; - else if ((!pStream->avail_in) && (flush != MZ_FINISH)) { - if ((flush) || (pStream->total_in != orig_total_in) || - (pStream->total_out != orig_total_out)) - break; - return MZ_BUF_ERROR; // Can't make forward progress without some input. - } - } - return mz_status; -} - -int mz_deflateEnd(mz_streamp pStream) { - if (!pStream) return MZ_STREAM_ERROR; - if (pStream->state) { - pStream->zfree(pStream->opaque, pStream->state); - pStream->state = NULL; - } - return MZ_OK; -} - -mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) { - (void)pStream; - // This is really over conservative. (And lame, but it's actually pretty - // tricky to compute a true upper bound given the way tdefl's blocking works.) - return MZ_MAX(128 + (source_len * 110) / 100, - 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); -} - -int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len, int level) { - int status; - mz_stream stream; - memset(&stream, 0, sizeof(stream)); - - // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; - - stream.next_in = pSource; - stream.avail_in = (mz_uint32)source_len; - stream.next_out = pDest; - stream.avail_out = (mz_uint32)*pDest_len; - - status = mz_deflateInit(&stream, level); - if (status != MZ_OK) return status; - - status = mz_deflate(&stream, MZ_FINISH); - if (status != MZ_STREAM_END) { - mz_deflateEnd(&stream); - return (status == MZ_OK) ? MZ_BUF_ERROR : status; - } - - *pDest_len = stream.total_out; - return mz_deflateEnd(&stream); -} - -int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len) { - return mz_compress2(pDest, pDest_len, pSource, source_len, - MZ_DEFAULT_COMPRESSION); -} - -mz_ulong mz_compressBound(mz_ulong source_len) { - return mz_deflateBound(NULL, source_len); -} - -typedef struct { - tinfl_decompressor m_decomp; - mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; - int m_window_bits; - mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; - tinfl_status m_last_status; -} inflate_state; - -int mz_inflateInit2(mz_streamp pStream, int window_bits) { - inflate_state *pDecomp; - if (!pStream) return MZ_STREAM_ERROR; - if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && - (-window_bits != MZ_DEFAULT_WINDOW_BITS)) - return MZ_PARAM_ERROR; - - pStream->data_type = 0; - pStream->adler = 0; - pStream->msg = NULL; - pStream->total_in = 0; - pStream->total_out = 0; - pStream->reserved = 0; - if (!pStream->zalloc) pStream->zalloc = def_alloc_func; - if (!pStream->zfree) pStream->zfree = def_free_func; - - pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, - sizeof(inflate_state)); - if (!pDecomp) return MZ_MEM_ERROR; - - pStream->state = (struct mz_internal_state *)pDecomp; - - tinfl_init(&pDecomp->m_decomp); - pDecomp->m_dict_ofs = 0; - pDecomp->m_dict_avail = 0; - pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; - pDecomp->m_first_call = 1; - pDecomp->m_has_flushed = 0; - pDecomp->m_window_bits = window_bits; - - return MZ_OK; -} - -int mz_inflateInit(mz_streamp pStream) { - return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); -} - -int mz_inflate(mz_streamp pStream, int flush) { - inflate_state *pState; - mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; - size_t in_bytes, out_bytes, orig_avail_in; - tinfl_status status; - - if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; - if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; - if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) - return MZ_STREAM_ERROR; - - pState = (inflate_state *)pStream->state; - if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; - orig_avail_in = pStream->avail_in; - - first_call = pState->m_first_call; - pState->m_first_call = 0; - if (pState->m_last_status < 0) return MZ_DATA_ERROR; - - if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; - pState->m_has_flushed |= (flush == MZ_FINISH); - - if ((flush == MZ_FINISH) && (first_call)) { - // MZ_FINISH on the first call implies that the input and output buffers are - // large enough to hold the entire compressed/decompressed file. - decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; - in_bytes = pStream->avail_in; - out_bytes = pStream->avail_out; - status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, - pStream->next_out, pStream->next_out, &out_bytes, - decomp_flags); - pState->m_last_status = status; - pStream->next_in += (mz_uint)in_bytes; - pStream->avail_in -= (mz_uint)in_bytes; - pStream->total_in += (mz_uint)in_bytes; - pStream->adler = tinfl_get_adler32(&pState->m_decomp); - pStream->next_out += (mz_uint)out_bytes; - pStream->avail_out -= (mz_uint)out_bytes; - pStream->total_out += (mz_uint)out_bytes; - - if (status < 0) - return MZ_DATA_ERROR; - else if (status != TINFL_STATUS_DONE) { - pState->m_last_status = TINFL_STATUS_FAILED; - return MZ_BUF_ERROR; - } - return MZ_STREAM_END; - } - // flush != MZ_FINISH then we must assume there's more input. - if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; - - if (pState->m_dict_avail) { - n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); - memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); - pStream->next_out += n; - pStream->avail_out -= n; - pStream->total_out += n; - pState->m_dict_avail -= n; - pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); - return ((pState->m_last_status == TINFL_STATUS_DONE) && - (!pState->m_dict_avail)) - ? MZ_STREAM_END - : MZ_OK; - } - - for (;;) { - in_bytes = pStream->avail_in; - out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; - - status = tinfl_decompress( - &pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, - pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); - pState->m_last_status = status; - - pStream->next_in += (mz_uint)in_bytes; - pStream->avail_in -= (mz_uint)in_bytes; - pStream->total_in += (mz_uint)in_bytes; - pStream->adler = tinfl_get_adler32(&pState->m_decomp); - - pState->m_dict_avail = (mz_uint)out_bytes; - - n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); - memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); - pStream->next_out += n; - pStream->avail_out -= n; - pStream->total_out += n; - pState->m_dict_avail -= n; - pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); - - if (status < 0) - return MZ_DATA_ERROR; // Stream is corrupted (there could be some - // uncompressed data left in the output dictionary - - // oh well). - else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) - return MZ_BUF_ERROR; // Signal caller that we can't make forward progress - // without supplying more input or by setting flush - // to MZ_FINISH. - else if (flush == MZ_FINISH) { - // The output buffer MUST be large to hold the remaining uncompressed data - // when flush==MZ_FINISH. - if (status == TINFL_STATUS_DONE) - return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; - // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's - // at least 1 more byte on the way. If there's no more room left in the - // output buffer then something is wrong. - else if (!pStream->avail_out) - return MZ_BUF_ERROR; - } else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || - (!pStream->avail_out) || (pState->m_dict_avail)) - break; - } - - return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) - ? MZ_STREAM_END - : MZ_OK; -} - -int mz_inflateEnd(mz_streamp pStream) { - if (!pStream) return MZ_STREAM_ERROR; - if (pStream->state) { - pStream->zfree(pStream->opaque, pStream->state); - pStream->state = NULL; - } - return MZ_OK; -} - -int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, - const unsigned char *pSource, mz_ulong source_len) { - mz_stream stream; - int status; - memset(&stream, 0, sizeof(stream)); - - // In case mz_ulong is 64-bits (argh I hate longs). - if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; - - stream.next_in = pSource; - stream.avail_in = (mz_uint32)source_len; - stream.next_out = pDest; - stream.avail_out = (mz_uint32)*pDest_len; - - status = mz_inflateInit(&stream); - if (status != MZ_OK) return status; - - status = mz_inflate(&stream, MZ_FINISH); - if (status != MZ_STREAM_END) { - mz_inflateEnd(&stream); - return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR - : status; - } - *pDest_len = stream.total_out; - - return mz_inflateEnd(&stream); -} - -const char *mz_error(int err) { - static struct { - int m_err; - const char *m_pDesc; - } s_error_descs[] = {{MZ_OK, ""}, - {MZ_STREAM_END, "stream end"}, - {MZ_NEED_DICT, "need dictionary"}, - {MZ_ERRNO, "file error"}, - {MZ_STREAM_ERROR, "stream error"}, - {MZ_DATA_ERROR, "data error"}, - {MZ_MEM_ERROR, "out of memory"}, - {MZ_BUF_ERROR, "buf error"}, - {MZ_VERSION_ERROR, "version error"}, - {MZ_PARAM_ERROR, "parameter error"}}; - mz_uint i; - for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) - if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; - return NULL; -} - -#endif // MINIZ_NO_ZLIB_APIS - -// ------------------- Low-level Decompression (completely independent from all -// compression API's) - -#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) -#define TINFL_MEMSET(p, c, l) memset(p, c, l) - -#define TINFL_CR_BEGIN \ - switch (r->m_state) { \ - case 0: -#define TINFL_CR_RETURN(state_index, result) \ - do { \ - status = result; \ - r->m_state = state_index; \ - goto common_exit; \ - case state_index:; \ - } \ - MZ_MACRO_END -#define TINFL_CR_RETURN_FOREVER(state_index, result) \ - do { \ - for (;;) { \ - TINFL_CR_RETURN(state_index, result); \ - } \ - } \ - MZ_MACRO_END -#define TINFL_CR_FINISH } - -// TODO: If the caller has indicated that there's no more input, and we attempt -// to read beyond the input buf, then something is wrong with the input because -// the inflator never -// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of -// the stream with 0's in this scenario. -#define TINFL_GET_BYTE(state_index, c) \ - do { \ - if (pIn_buf_cur >= pIn_buf_end) { \ - for (;;) { \ - if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ - TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ - if (pIn_buf_cur < pIn_buf_end) { \ - c = *pIn_buf_cur++; \ - break; \ - } \ - } else { \ - c = 0; \ - break; \ - } \ - } \ - } else \ - c = *pIn_buf_cur++; \ - } \ - MZ_MACRO_END - -#define TINFL_NEED_BITS(state_index, n) \ - do { \ - mz_uint c; \ - TINFL_GET_BYTE(state_index, c); \ - bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ - num_bits += 8; \ - } while (num_bits < (mz_uint)(n)) -#define TINFL_SKIP_BITS(state_index, n) \ - do { \ - if (num_bits < (mz_uint)(n)) { \ - TINFL_NEED_BITS(state_index, n); \ - } \ - bit_buf >>= (n); \ - num_bits -= (n); \ - } \ - MZ_MACRO_END -#define TINFL_GET_BITS(state_index, b, n) \ - do { \ - if (num_bits < (mz_uint)(n)) { \ - TINFL_NEED_BITS(state_index, n); \ - } \ - b = bit_buf & ((1 << (n)) - 1); \ - bit_buf >>= (n); \ - num_bits -= (n); \ - } \ - MZ_MACRO_END - -// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes -// remaining in the input buffer falls below 2. -// It reads just enough bytes from the input stream that are needed to decode -// the next Huffman code (and absolutely no more). It works by trying to fully -// decode a -// Huffman code by using whatever bits are currently present in the bit buffer. -// If this fails, it reads another byte, and tries again until it succeeds or -// until the -// bit buffer contains >=15 bits (deflate's max. Huffman code size). -#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ - do { \ - temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ - if (temp >= 0) { \ - code_len = temp >> 9; \ - if ((code_len) && (num_bits >= code_len)) break; \ - } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ - code_len = TINFL_FAST_LOOKUP_BITS; \ - do { \ - temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ - } while ((temp < 0) && (num_bits >= (code_len + 1))); \ - if (temp >= 0) break; \ - } \ - TINFL_GET_BYTE(state_index, c); \ - bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ - num_bits += 8; \ - } while (num_bits < 15); - -// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex -// than you would initially expect because the zlib API expects the decompressor -// to never read -// beyond the final byte of the deflate stream. (In other words, when this macro -// wants to read another byte from the input, it REALLY needs another byte in -// order to fully -// decode the next Huffman code.) Handling this properly is particularly -// important on raw deflate (non-zlib) streams, which aren't followed by a byte -// aligned adler-32. -// The slow path is only executed at the very end of the input buffer. -#define TINFL_HUFF_DECODE(state_index, sym, pHuff) \ - do { \ - int temp; \ - mz_uint code_len, c; \ - if (num_bits < 15) { \ - if ((pIn_buf_end - pIn_buf_cur) < 2) { \ - TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ - } else { \ - bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | \ - (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \ - pIn_buf_cur += 2; \ - num_bits += 16; \ - } \ - } \ - if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= \ - 0) \ - code_len = temp >> 9, temp &= 511; \ - else { \ - code_len = TINFL_FAST_LOOKUP_BITS; \ - do { \ - temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ - } while (temp < 0); \ - } \ - sym = temp; \ - bit_buf >>= code_len; \ - num_bits -= code_len; \ - } \ - MZ_MACRO_END - -tinfl_status tinfl_decompress(tinfl_decompressor *r, - const mz_uint8 *pIn_buf_next, - size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, - mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, - const mz_uint32 decomp_flags) { - static const int s_length_base[31] = { - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - static const int s_length_extra[31] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, - 4, 4, 5, 5, 5, 5, 0, 0, 0}; - static const int s_dist_base[32] = { - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, - 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, - 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0}; - static const int s_dist_extra[32] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, - 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; - static const mz_uint8 s_length_dezigzag[19] = { - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - static const int s_min_table_sizes[3] = {257, 1, 4}; - - tinfl_status status = TINFL_STATUS_FAILED; - mz_uint32 num_bits, dist, counter, num_extra; - tinfl_bit_buf_t bit_buf; - const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = - pIn_buf_next + *pIn_buf_size; - mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = - pOut_buf_next + *pOut_buf_size; - size_t out_buf_size_mask = - (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) - ? (size_t)-1 - : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, - dist_from_out_buf_start; - - // Ensure the output buffer's size is a power of 2, unless the output buffer - // is large enough to hold the entire output file (in which case it doesn't - // matter). - if (((out_buf_size_mask + 1) & out_buf_size_mask) || - (pOut_buf_next < pOut_buf_start)) { - *pIn_buf_size = *pOut_buf_size = 0; - return TINFL_STATUS_BAD_PARAM; - } - - num_bits = r->m_num_bits; - bit_buf = r->m_bit_buf; - dist = r->m_dist; - counter = r->m_counter; - num_extra = r->m_num_extra; - dist_from_out_buf_start = r->m_dist_from_out_buf_start; - TINFL_CR_BEGIN - - bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; - r->m_z_adler32 = r->m_check_adler32 = 1; - if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { - TINFL_GET_BYTE(1, r->m_zhdr0); - TINFL_GET_BYTE(2, r->m_zhdr1); - counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || - (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); - if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) - counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || - ((out_buf_size_mask + 1) < - (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4))))); - if (counter) { - TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); - } - } - - do { - TINFL_GET_BITS(3, r->m_final, 3); - r->m_type = r->m_final >> 1; - if (r->m_type == 0) { - TINFL_SKIP_BITS(5, num_bits & 7); - for (counter = 0; counter < 4; ++counter) { - if (num_bits) - TINFL_GET_BITS(6, r->m_raw_header[counter], 8); - else - TINFL_GET_BYTE(7, r->m_raw_header[counter]); - } - if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != - (mz_uint)(0xFFFF ^ - (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { - TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); - } - while ((counter) && (num_bits)) { - TINFL_GET_BITS(51, dist, 8); - while (pOut_buf_cur >= pOut_buf_end) { - TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); - } - *pOut_buf_cur++ = (mz_uint8)dist; - counter--; - } - while (counter) { - size_t n; - while (pOut_buf_cur >= pOut_buf_end) { - TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); - } - while (pIn_buf_cur >= pIn_buf_end) { - if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { - TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT); - } else { - TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED); - } - } - n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), - (size_t)(pIn_buf_end - pIn_buf_cur)), - counter); - TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); - pIn_buf_cur += n; - pOut_buf_cur += n; - counter -= (mz_uint)n; - } - } else if (r->m_type == 3) { - TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); - } else { - if (r->m_type == 1) { - mz_uint8 *p = r->m_tables[0].m_code_size; - mz_uint i; - r->m_table_sizes[0] = 288; - r->m_table_sizes[1] = 32; - TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); - for (i = 0; i <= 143; ++i) *p++ = 8; - for (; i <= 255; ++i) *p++ = 9; - for (; i <= 279; ++i) *p++ = 7; - for (; i <= 287; ++i) *p++ = 8; - } else { - for (counter = 0; counter < 3; counter++) { - TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); - r->m_table_sizes[counter] += s_min_table_sizes[counter]; - } - MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); - for (counter = 0; counter < r->m_table_sizes[2]; counter++) { - mz_uint s; - TINFL_GET_BITS(14, s, 3); - r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; - } - r->m_table_sizes[2] = 19; - } - for (; (int)r->m_type >= 0; r->m_type--) { - int tree_next, tree_cur; - tinfl_huff_table *pTable; - mz_uint i, j, used_syms, total, sym_index, next_code[17], - total_syms[16]; - pTable = &r->m_tables[r->m_type]; - MZ_CLEAR_OBJ(total_syms); - MZ_CLEAR_OBJ(pTable->m_look_up); - MZ_CLEAR_OBJ(pTable->m_tree); - for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) - total_syms[pTable->m_code_size[i]]++; - used_syms = 0, total = 0; - next_code[0] = next_code[1] = 0; - for (i = 1; i <= 15; ++i) { - used_syms += total_syms[i]; - next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); - } - if ((65536 != total) && (used_syms > 1)) { - TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); - } - for (tree_next = -1, sym_index = 0; - sym_index < r->m_table_sizes[r->m_type]; ++sym_index) { - mz_uint rev_code = 0, l, cur_code, - code_size = pTable->m_code_size[sym_index]; - if (!code_size) continue; - cur_code = next_code[code_size]++; - for (l = code_size; l > 0; l--, cur_code >>= 1) - rev_code = (rev_code << 1) | (cur_code & 1); - if (code_size <= TINFL_FAST_LOOKUP_BITS) { - mz_int16 k = (mz_int16)((code_size << 9) | sym_index); - while (rev_code < TINFL_FAST_LOOKUP_SIZE) { - pTable->m_look_up[rev_code] = k; - rev_code += (1 << code_size); - } - continue; - } - if (0 == - (tree_cur = pTable->m_look_up[rev_code & - (TINFL_FAST_LOOKUP_SIZE - 1)])) { - pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = - (mz_int16)tree_next; - tree_cur = tree_next; - tree_next -= 2; - } - rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); - for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) { - tree_cur -= ((rev_code >>= 1) & 1); - if (!pTable->m_tree[-tree_cur - 1]) { - pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; - tree_cur = tree_next; - tree_next -= 2; - } else - tree_cur = pTable->m_tree[-tree_cur - 1]; - } - tree_cur -= ((rev_code >>= 1) & 1); - pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; - } - if (r->m_type == 2) { - for (counter = 0; - counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) { - mz_uint s; - TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); - if (dist < 16) { - r->m_len_codes[counter++] = (mz_uint8)dist; - continue; - } - if ((dist == 16) && (!counter)) { - TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); - } - num_extra = "\02\03\07"[dist - 16]; - TINFL_GET_BITS(18, s, num_extra); - s += "\03\03\013"[dist - 16]; - TINFL_MEMSET(r->m_len_codes + counter, - (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); - counter += s; - } - if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) { - TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); - } - TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, - r->m_table_sizes[0]); - TINFL_MEMCPY(r->m_tables[1].m_code_size, - r->m_len_codes + r->m_table_sizes[0], - r->m_table_sizes[1]); - } - } - for (;;) { - mz_uint8 *pSrc; - for (;;) { - if (((pIn_buf_end - pIn_buf_cur) < 4) || - ((pOut_buf_end - pOut_buf_cur) < 2)) { - TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); - if (counter >= 256) break; - while (pOut_buf_cur >= pOut_buf_end) { - TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); - } - *pOut_buf_cur++ = (mz_uint8)counter; - } else { - int sym2; - mz_uint code_len; -#if TINFL_USE_64BIT_BITBUF - if (num_bits < 30) { - bit_buf |= - (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); - pIn_buf_cur += 4; - num_bits += 32; - } -#else - if (num_bits < 15) { - bit_buf |= - (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); - pIn_buf_cur += 2; - num_bits += 16; - } -#endif - if ((sym2 = - r->m_tables[0] - .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= - 0) - code_len = sym2 >> 9; - else { - code_len = TINFL_FAST_LOOKUP_BITS; - do { - sym2 = r->m_tables[0] - .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; - } while (sym2 < 0); - } - counter = sym2; - bit_buf >>= code_len; - num_bits -= code_len; - if (counter & 256) break; - -#if !TINFL_USE_64BIT_BITBUF - if (num_bits < 15) { - bit_buf |= - (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); - pIn_buf_cur += 2; - num_bits += 16; - } -#endif - if ((sym2 = - r->m_tables[0] - .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= - 0) - code_len = sym2 >> 9; - else { - code_len = TINFL_FAST_LOOKUP_BITS; - do { - sym2 = r->m_tables[0] - .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; - } while (sym2 < 0); - } - bit_buf >>= code_len; - num_bits -= code_len; - - pOut_buf_cur[0] = (mz_uint8)counter; - if (sym2 & 256) { - pOut_buf_cur++; - counter = sym2; - break; - } - pOut_buf_cur[1] = (mz_uint8)sym2; - pOut_buf_cur += 2; - } - } - if ((counter &= 511) == 256) break; - - num_extra = s_length_extra[counter - 257]; - counter = s_length_base[counter - 257]; - if (num_extra) { - mz_uint extra_bits; - TINFL_GET_BITS(25, extra_bits, num_extra); - counter += extra_bits; - } - - TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); - num_extra = s_dist_extra[dist]; - dist = s_dist_base[dist]; - if (num_extra) { - mz_uint extra_bits; - TINFL_GET_BITS(27, extra_bits, num_extra); - dist += extra_bits; - } - - dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; - if ((dist > dist_from_out_buf_start) && - (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) { - TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); - } - - pSrc = pOut_buf_start + - ((dist_from_out_buf_start - dist) & out_buf_size_mask); - - if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) { - while (counter--) { - while (pOut_buf_cur >= pOut_buf_end) { - TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); - } - *pOut_buf_cur++ = - pOut_buf_start[(dist_from_out_buf_start++ - dist) & - out_buf_size_mask]; - } - continue; - } -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES - else if ((counter >= 9) && (counter <= dist)) { - const mz_uint8 *pSrc_end = pSrc + (counter & ~7); - do { - ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; - ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; - pOut_buf_cur += 8; - } while ((pSrc += 8) < pSrc_end); - if ((counter &= 7) < 3) { - if (counter) { - pOut_buf_cur[0] = pSrc[0]; - if (counter > 1) pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur += counter; - } - continue; - } - } -#endif - do { - pOut_buf_cur[0] = pSrc[0]; - pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur[2] = pSrc[2]; - pOut_buf_cur += 3; - pSrc += 3; - } while ((int)(counter -= 3) > 2); - if ((int)counter > 0) { - pOut_buf_cur[0] = pSrc[0]; - if ((int)counter > 1) pOut_buf_cur[1] = pSrc[1]; - pOut_buf_cur += counter; - } - } - } - } while (!(r->m_final & 1)); - if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { - TINFL_SKIP_BITS(32, num_bits & 7); - for (counter = 0; counter < 4; ++counter) { - mz_uint s; - if (num_bits) - TINFL_GET_BITS(41, s, 8); - else - TINFL_GET_BYTE(42, s); - r->m_z_adler32 = (r->m_z_adler32 << 8) | s; - } - } - TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); - TINFL_CR_FINISH - -common_exit: - r->m_num_bits = num_bits; - r->m_bit_buf = bit_buf; - r->m_dist = dist; - r->m_counter = counter; - r->m_num_extra = num_extra; - r->m_dist_from_out_buf_start = dist_from_out_buf_start; - *pIn_buf_size = pIn_buf_cur - pIn_buf_next; - *pOut_buf_size = pOut_buf_cur - pOut_buf_next; - if ((decomp_flags & - (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && - (status >= 0)) { - const mz_uint8 *ptr = pOut_buf_next; - size_t buf_len = *pOut_buf_size; - mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, - s2 = r->m_check_adler32 >> 16; - size_t block_len = buf_len % 5552; - while (buf_len) { - for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { - s1 += ptr[0], s2 += s1; - s1 += ptr[1], s2 += s1; - s1 += ptr[2], s2 += s1; - s1 += ptr[3], s2 += s1; - s1 += ptr[4], s2 += s1; - s1 += ptr[5], s2 += s1; - s1 += ptr[6], s2 += s1; - s1 += ptr[7], s2 += s1; - } - for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; - s1 %= 65521U, s2 %= 65521U; - buf_len -= block_len; - block_len = 5552; - } - r->m_check_adler32 = (s2 << 16) + s1; - if ((status == TINFL_STATUS_DONE) && - (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && - (r->m_check_adler32 != r->m_z_adler32)) - status = TINFL_STATUS_ADLER32_MISMATCH; - } - return status; -} - -// Higher level helper functions. -void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, - size_t *pOut_len, int flags) { - tinfl_decompressor decomp; - void *pBuf = NULL, *pNew_buf; - size_t src_buf_ofs = 0, out_buf_capacity = 0; - *pOut_len = 0; - tinfl_init(&decomp); - for (;;) { - size_t src_buf_size = src_buf_len - src_buf_ofs, - dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; - tinfl_status status = tinfl_decompress( - &decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size, - (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL, - &dst_buf_size, - (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); - if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) { - MZ_FREE(pBuf); - *pOut_len = 0; - return NULL; - } - src_buf_ofs += src_buf_size; - *pOut_len += dst_buf_size; - if (status == TINFL_STATUS_DONE) break; - new_out_buf_capacity = out_buf_capacity * 2; - if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; - pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); - if (!pNew_buf) { - MZ_FREE(pBuf); - *pOut_len = 0; - return NULL; - } - pBuf = pNew_buf; - out_buf_capacity = new_out_buf_capacity; - } - return pBuf; -} - -size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, - const void *pSrc_buf, size_t src_buf_len, - int flags) { - tinfl_decompressor decomp; - tinfl_status status; - tinfl_init(&decomp); - status = - tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len, - (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len, - (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); - return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED - : out_buf_len; -} - -int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, - tinfl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags) { - int result = 0; - tinfl_decompressor decomp; - mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE); - size_t in_buf_ofs = 0, dict_ofs = 0; - if (!pDict) return TINFL_STATUS_FAILED; - tinfl_init(&decomp); - for (;;) { - size_t in_buf_size = *pIn_buf_size - in_buf_ofs, - dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; - tinfl_status status = - tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs, - &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, - (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); - in_buf_ofs += in_buf_size; - if ((dst_buf_size) && - (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) - break; - if (status != TINFL_STATUS_HAS_MORE_OUTPUT) { - result = (status == TINFL_STATUS_DONE); - break; - } - dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); - } - MZ_FREE(pDict); - *pIn_buf_size = in_buf_ofs; - return result; -} - -// ------------------- Low-level Compression (independent from all decompression -// API's) - -// Purposely making these tables static for faster init and thread safety. -static const mz_uint16 s_tdefl_len_sym[256] = { - 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, - 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, - 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, - 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, - 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 285}; - -static const mz_uint8 s_tdefl_len_extra[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0}; - -static const mz_uint8 s_tdefl_small_dist_sym[512] = { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}; - -static const mz_uint8 s_tdefl_small_dist_extra[512] = { - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}; - -static const mz_uint8 s_tdefl_large_dist_sym[128] = { - 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, - 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}; - -static const mz_uint8 s_tdefl_large_dist_extra[128] = { - 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}; - -// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted -// values. -typedef struct { - mz_uint16 m_key, m_sym_index; -} tdefl_sym_freq; -static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, - tdefl_sym_freq *pSyms0, - tdefl_sym_freq *pSyms1) { - mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; - tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1; - MZ_CLEAR_OBJ(hist); - for (i = 0; i < num_syms; i++) { - mz_uint freq = pSyms0[i].m_key; - hist[freq & 0xFF]++; - hist[256 + ((freq >> 8) & 0xFF)]++; - } - while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) - total_passes--; - for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) { - const mz_uint32 *pHist = &hist[pass << 8]; - mz_uint offsets[256], cur_ofs = 0; - for (i = 0; i < 256; i++) { - offsets[i] = cur_ofs; - cur_ofs += pHist[i]; - } - for (i = 0; i < num_syms; i++) - pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = - pCur_syms[i]; - { - tdefl_sym_freq *t = pCur_syms; - pCur_syms = pNew_syms; - pNew_syms = t; - } - } - return pCur_syms; -} - -// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, -// alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. -static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) { - int root, leaf, next, avbl, used, dpth; - if (n == 0) - return; - else if (n == 1) { - A[0].m_key = 1; - return; - } - A[0].m_key += A[1].m_key; - root = 0; - leaf = 2; - for (next = 1; next < n - 1; next++) { - if (leaf >= n || A[root].m_key < A[leaf].m_key) { - A[next].m_key = A[root].m_key; - A[root++].m_key = (mz_uint16)next; - } else - A[next].m_key = A[leaf++].m_key; - if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) { - A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key); - A[root++].m_key = (mz_uint16)next; - } else - A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key); - } - A[n - 2].m_key = 0; - for (next = n - 3; next >= 0; next--) - A[next].m_key = A[A[next].m_key].m_key + 1; - avbl = 1; - used = dpth = 0; - root = n - 2; - next = n - 1; - while (avbl > 0) { - while (root >= 0 && (int)A[root].m_key == dpth) { - used++; - root--; - } - while (avbl > used) { - A[next--].m_key = (mz_uint16)(dpth); - avbl--; - } - avbl = 2 * used; - dpth++; - used = 0; - } -} - -// Limits canonical Huffman code table's max code size. -enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; -static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, - int code_list_len, - int max_code_size) { - int i; - mz_uint32 total = 0; - if (code_list_len <= 1) return; - for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) - pNum_codes[max_code_size] += pNum_codes[i]; - for (i = max_code_size; i > 0; i--) - total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); - while (total != (1UL << max_code_size)) { - pNum_codes[max_code_size]--; - for (i = max_code_size - 1; i > 0; i--) - if (pNum_codes[i]) { - pNum_codes[i]--; - pNum_codes[i + 1] += 2; - break; - } - total--; - } -} - -static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, - int table_len, int code_size_limit, - int static_table) { - int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; - mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; - MZ_CLEAR_OBJ(num_codes); - if (static_table) { - for (i = 0; i < table_len; i++) - num_codes[d->m_huff_code_sizes[table_num][i]]++; - } else { - tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], - *pSyms; - int num_used_syms = 0; - const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; - for (i = 0; i < table_len; i++) - if (pSym_count[i]) { - syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; - syms0[num_used_syms++].m_sym_index = (mz_uint16)i; - } - - pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); - tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); - - for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; - - tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, - code_size_limit); - - MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); - MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); - for (i = 1, j = num_used_syms; i <= code_size_limit; i++) - for (l = num_codes[i]; l > 0; l--) - d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); - } - - next_code[1] = 0; - for (j = 0, i = 2; i <= code_size_limit; i++) - next_code[i] = j = ((j + num_codes[i - 1]) << 1); - - for (i = 0; i < table_len; i++) { - mz_uint rev_code = 0, code, code_size; - if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; - code = next_code[code_size]++; - for (l = code_size; l > 0; l--, code >>= 1) - rev_code = (rev_code << 1) | (code & 1); - d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; - } -} - -#define TDEFL_PUT_BITS(b, l) \ - do { \ - mz_uint bits = b; \ - mz_uint len = l; \ - MZ_ASSERT(bits <= ((1U << len) - 1U)); \ - d->m_bit_buffer |= (bits << d->m_bits_in); \ - d->m_bits_in += len; \ - while (d->m_bits_in >= 8) { \ - if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ - *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ - d->m_bit_buffer >>= 8; \ - d->m_bits_in -= 8; \ - } \ - } \ - MZ_MACRO_END - -#define TDEFL_RLE_PREV_CODE_SIZE() \ - { \ - if (rle_repeat_count) { \ - if (rle_repeat_count < 3) { \ - d->m_huff_count[2][prev_code_size] = (mz_uint16)( \ - d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ - while (rle_repeat_count--) \ - packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ - } else { \ - d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 16; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_repeat_count - 3); \ - } \ - rle_repeat_count = 0; \ - } \ - } - -#define TDEFL_RLE_ZERO_CODE_SIZE() \ - { \ - if (rle_z_count) { \ - if (rle_z_count < 3) { \ - d->m_huff_count[2][0] = \ - (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ - while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ - } else if (rle_z_count <= 10) { \ - d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 17; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_z_count - 3); \ - } else { \ - d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ - packed_code_sizes[num_packed_code_sizes++] = 18; \ - packed_code_sizes[num_packed_code_sizes++] = \ - (mz_uint8)(rle_z_count - 11); \ - } \ - rle_z_count = 0; \ - } \ - } - -static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - -static void tdefl_start_dynamic_block(tdefl_compressor *d) { - int num_lit_codes, num_dist_codes, num_bit_lengths; - mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, - rle_repeat_count, packed_code_sizes_index; - mz_uint8 - code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], - packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], - prev_code_size = 0xFF; - - d->m_huff_count[0][256] = 1; - - tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); - tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); - - for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) - if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; - for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) - if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; - - memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); - memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], - num_dist_codes); - total_code_sizes_to_pack = num_lit_codes + num_dist_codes; - num_packed_code_sizes = 0; - rle_z_count = 0; - rle_repeat_count = 0; - - memset(&d->m_huff_count[2][0], 0, - sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); - for (i = 0; i < total_code_sizes_to_pack; i++) { - mz_uint8 code_size = code_sizes_to_pack[i]; - if (!code_size) { - TDEFL_RLE_PREV_CODE_SIZE(); - if (++rle_z_count == 138) { - TDEFL_RLE_ZERO_CODE_SIZE(); - } - } else { - TDEFL_RLE_ZERO_CODE_SIZE(); - if (code_size != prev_code_size) { - TDEFL_RLE_PREV_CODE_SIZE(); - d->m_huff_count[2][code_size] = - (mz_uint16)(d->m_huff_count[2][code_size] + 1); - packed_code_sizes[num_packed_code_sizes++] = code_size; - } else if (++rle_repeat_count == 6) { - TDEFL_RLE_PREV_CODE_SIZE(); - } - } - prev_code_size = code_size; - } - if (rle_repeat_count) { - TDEFL_RLE_PREV_CODE_SIZE(); - } else { - TDEFL_RLE_ZERO_CODE_SIZE(); - } - - tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); - - TDEFL_PUT_BITS(2, 2); - - TDEFL_PUT_BITS(num_lit_codes - 257, 5); - TDEFL_PUT_BITS(num_dist_codes - 1, 5); - - for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) - if (d->m_huff_code_sizes - [2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) - break; - num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); - TDEFL_PUT_BITS(num_bit_lengths - 4, 4); - for (i = 0; (int)i < num_bit_lengths; i++) - TDEFL_PUT_BITS( - d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); - - for (packed_code_sizes_index = 0; - packed_code_sizes_index < num_packed_code_sizes;) { - mz_uint code = packed_code_sizes[packed_code_sizes_index++]; - MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); - TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); - if (code >= 16) - TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], - "\02\03\07"[code - 16]); - } -} - -static void tdefl_start_static_block(tdefl_compressor *d) { - mz_uint i; - mz_uint8 *p = &d->m_huff_code_sizes[0][0]; - - for (i = 0; i <= 143; ++i) *p++ = 8; - for (; i <= 255; ++i) *p++ = 9; - for (; i <= 279; ++i) *p++ = 7; - for (; i <= 287; ++i) *p++ = 8; - - memset(d->m_huff_code_sizes[1], 5, 32); - - tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); - tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); - - TDEFL_PUT_BITS(1, 2); -} - -static const mz_uint mz_bitmasks[17] = { - 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \ - MINIZ_HAS_64BIT_REGISTERS -static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { - mz_uint flags; - mz_uint8 *pLZ_codes; - mz_uint8 *pOutput_buf = d->m_pOutput_buf; - mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; - mz_uint64 bit_buffer = d->m_bit_buffer; - mz_uint bits_in = d->m_bits_in; - -#define TDEFL_PUT_BITS_FAST(b, l) \ - { \ - bit_buffer |= (((mz_uint64)(b)) << bits_in); \ - bits_in += (l); \ - } - - flags = 1; - for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; - flags >>= 1) { - if (flags == 1) flags = *pLZ_codes++ | 0x100; - - if (flags & 1) { - mz_uint s0, s1, n0, n1, sym, num_extra_bits; - mz_uint match_len = pLZ_codes[0], - match_dist = *(const mz_uint16 *)(pLZ_codes + 1); - pLZ_codes += 3; - - MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], - d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], - s_tdefl_len_extra[match_len]); - - // This sequence coaxes MSVC into using cmov's vs. jmp's. - s0 = s_tdefl_small_dist_sym[match_dist & 511]; - n0 = s_tdefl_small_dist_extra[match_dist & 511]; - s1 = s_tdefl_large_dist_sym[match_dist >> 8]; - n1 = s_tdefl_large_dist_extra[match_dist >> 8]; - sym = (match_dist < 512) ? s0 : s1; - num_extra_bits = (match_dist < 512) ? n0 : n1; - - MZ_ASSERT(d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], - d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], - num_extra_bits); - } else { - mz_uint lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], - d->m_huff_code_sizes[0][lit]); - - if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { - flags >>= 1; - lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], - d->m_huff_code_sizes[0][lit]); - - if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { - flags >>= 1; - lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], - d->m_huff_code_sizes[0][lit]); - } - } - } - - if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE; - - *(mz_uint64 *)pOutput_buf = bit_buffer; - pOutput_buf += (bits_in >> 3); - bit_buffer >>= (bits_in & ~7); - bits_in &= 7; - } - -#undef TDEFL_PUT_BITS_FAST - - d->m_pOutput_buf = pOutput_buf; - d->m_bits_in = 0; - d->m_bit_buffer = 0; - - while (bits_in) { - mz_uint32 n = MZ_MIN(bits_in, 16); - TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); - bit_buffer >>= n; - bits_in -= n; - } - - TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); - - return (d->m_pOutput_buf < d->m_pOutput_buf_end); -} -#else -static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { - mz_uint flags; - mz_uint8 *pLZ_codes; - - flags = 1; - for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; - flags >>= 1) { - if (flags == 1) flags = *pLZ_codes++ | 0x100; - if (flags & 1) { - mz_uint sym, num_extra_bits; - mz_uint match_len = pLZ_codes[0], - match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); - pLZ_codes += 3; - - MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], - d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); - TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], - s_tdefl_len_extra[match_len]); - - if (match_dist < 512) { - sym = s_tdefl_small_dist_sym[match_dist]; - num_extra_bits = s_tdefl_small_dist_extra[match_dist]; - } else { - sym = s_tdefl_large_dist_sym[match_dist >> 8]; - num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; - } - MZ_ASSERT(d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); - TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); - } else { - mz_uint lit = *pLZ_codes++; - MZ_ASSERT(d->m_huff_code_sizes[0][lit]); - TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); - } - } - - TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); - - return (d->m_pOutput_buf < d->m_pOutput_buf_end); -} -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && - // MINIZ_HAS_64BIT_REGISTERS - -static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) { - if (static_block) - tdefl_start_static_block(d); - else - tdefl_start_dynamic_block(d); - return tdefl_compress_lz_codes(d); -} - -static int tdefl_flush_block(tdefl_compressor *d, int flush) { - mz_uint saved_bit_buf, saved_bits_in; - mz_uint8 *pSaved_output_buf; - mz_bool comp_block_succeeded = MZ_FALSE; - int n, use_raw_block = - ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && - (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; - mz_uint8 *pOutput_buf_start = - ((d->m_pPut_buf_func == NULL) && - ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) - ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) - : d->m_output_buf; - - d->m_pOutput_buf = pOutput_buf_start; - d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; - - MZ_ASSERT(!d->m_output_flush_remaining); - d->m_output_flush_ofs = 0; - d->m_output_flush_remaining = 0; - - *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); - d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); - - if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) { - TDEFL_PUT_BITS(0x78, 8); - TDEFL_PUT_BITS(0x01, 8); - } - - TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); - - pSaved_output_buf = d->m_pOutput_buf; - saved_bit_buf = d->m_bit_buffer; - saved_bits_in = d->m_bits_in; - - if (!use_raw_block) - comp_block_succeeded = - tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || - (d->m_total_lz_bytes < 48)); - - // If the block gets expanded, forget the current contents of the output - // buffer and send a raw block instead. - if (((use_raw_block) || - ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= - d->m_total_lz_bytes))) && - ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) { - mz_uint i; - d->m_pOutput_buf = pSaved_output_buf; - d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; - TDEFL_PUT_BITS(0, 2); - if (d->m_bits_in) { - TDEFL_PUT_BITS(0, 8 - d->m_bits_in); - } - for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) { - TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); - } - for (i = 0; i < d->m_total_lz_bytes; ++i) { - TDEFL_PUT_BITS( - d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], - 8); - } - } - // Check for the extremely unlikely (if not impossible) case of the compressed - // block not fitting into the output buffer when using dynamic codes. - else if (!comp_block_succeeded) { - d->m_pOutput_buf = pSaved_output_buf; - d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; - tdefl_compress_block(d, MZ_TRUE); - } - - if (flush) { - if (flush == TDEFL_FINISH) { - if (d->m_bits_in) { - TDEFL_PUT_BITS(0, 8 - d->m_bits_in); - } - if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { - mz_uint i, a = d->m_adler32; - for (i = 0; i < 4; i++) { - TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); - a <<= 8; - } - } - } else { - mz_uint i, z = 0; - TDEFL_PUT_BITS(0, 3); - if (d->m_bits_in) { - TDEFL_PUT_BITS(0, 8 - d->m_bits_in); - } - for (i = 2; i; --i, z ^= 0xFFFF) { - TDEFL_PUT_BITS(z & 0xFFFF, 16); - } - } - } - - MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); - - memset(&d->m_huff_count[0][0], 0, - sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); - memset(&d->m_huff_count[1][0], 0, - sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); - - d->m_pLZ_code_buf = d->m_lz_code_buf + 1; - d->m_pLZ_flags = d->m_lz_code_buf; - d->m_num_flags_left = 8; - d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; - d->m_total_lz_bytes = 0; - d->m_block_index++; - - if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) { - if (d->m_pPut_buf_func) { - *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; - if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) - return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); - } else if (pOutput_buf_start == d->m_output_buf) { - int bytes_to_copy = (int)MZ_MIN( - (size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); - memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, - bytes_to_copy); - d->m_out_buf_ofs += bytes_to_copy; - if ((n -= bytes_to_copy) != 0) { - d->m_output_flush_ofs = bytes_to_copy; - d->m_output_flush_remaining = n; - } - } else { - d->m_out_buf_ofs += n; - } - } - - return d->m_output_flush_remaining; -} - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES -#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p) -static MZ_FORCEINLINE void tdefl_find_match( - tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, - mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { - mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, - match_len = *pMatch_len, probe_pos = pos, next_probe_pos, - probe_len; - mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; - const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q; - mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), - s01 = TDEFL_READ_UNALIGNED_WORD(s); - MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); - if (max_match_len <= match_len) return; - for (;;) { - for (;;) { - if (--num_probes_left == 0) return; -#define TDEFL_PROBE \ - next_probe_pos = d->m_next[probe_pos]; \ - if ((!next_probe_pos) || \ - ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ - return; \ - probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ - if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \ - break; - TDEFL_PROBE; - TDEFL_PROBE; - TDEFL_PROBE; - } - if (!dist) break; - q = (const mz_uint16 *)(d->m_dict + probe_pos); - if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; - p = s; - probe_len = 32; - do { - } while ( - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && - (--probe_len > 0)); - if (!probe_len) { - *pMatch_dist = dist; - *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN); - break; - } else if ((probe_len = ((mz_uint)(p - s) * 2) + - (mz_uint)(*(const mz_uint8 *)p == - *(const mz_uint8 *)q)) > match_len) { - *pMatch_dist = dist; - if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == - max_match_len) - break; - c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); - } - } -} -#else -static MZ_FORCEINLINE void tdefl_find_match( - tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, - mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { - mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, - match_len = *pMatch_len, probe_pos = pos, next_probe_pos, - probe_len; - mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; - const mz_uint8 *s = d->m_dict + pos, *p, *q; - mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; - MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); - if (max_match_len <= match_len) return; - for (;;) { - for (;;) { - if (--num_probes_left == 0) return; -#define TDEFL_PROBE \ - next_probe_pos = d->m_next[probe_pos]; \ - if ((!next_probe_pos) || \ - ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ - return; \ - probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ - if ((d->m_dict[probe_pos + match_len] == c0) && \ - (d->m_dict[probe_pos + match_len - 1] == c1)) \ - break; - TDEFL_PROBE; - TDEFL_PROBE; - TDEFL_PROBE; - } - if (!dist) break; - p = s; - q = d->m_dict + probe_pos; - for (probe_len = 0; probe_len < max_match_len; probe_len++) - if (*p++ != *q++) break; - if (probe_len > match_len) { - *pMatch_dist = dist; - if ((*pMatch_len = match_len = probe_len) == max_match_len) return; - c0 = d->m_dict[pos + match_len]; - c1 = d->m_dict[pos + match_len - 1]; - } - } -} -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN -static mz_bool tdefl_compress_fast(tdefl_compressor *d) { - // Faster, minimally featured LZRW1-style match+parse loop with better - // register utilization. Intended for applications where raw throughput is - // valued more highly than ratio. - mz_uint lookahead_pos = d->m_lookahead_pos, - lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, - total_lz_bytes = d->m_total_lz_bytes, - num_flags_left = d->m_num_flags_left; - mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; - mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; - - while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) { - const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; - mz_uint dst_pos = - (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; - mz_uint num_bytes_to_process = (mz_uint)MZ_MIN( - d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); - d->m_src_buf_left -= num_bytes_to_process; - lookahead_size += num_bytes_to_process; - - while (num_bytes_to_process) { - mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); - memcpy(d->m_dict + dst_pos, d->m_pSrc, n); - if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) - memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, - MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); - d->m_pSrc += n; - dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; - num_bytes_to_process -= n; - } - - dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); - if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) - break; - - while (lookahead_size >= 4) { - mz_uint cur_match_dist, cur_match_len = 1; - mz_uint8 *pCur_dict = d->m_dict + cur_pos; - mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; - mz_uint hash = - (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & - TDEFL_LEVEL1_HASH_SIZE_MASK; - mz_uint probe_pos = d->m_hash[hash]; - d->m_hash[hash] = (mz_uint16)lookahead_pos; - - if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= - dict_size) && - ((*(const mz_uint32 *)(d->m_dict + - (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & - 0xFFFFFF) == first_trigram)) { - const mz_uint16 *p = (const mz_uint16 *)pCur_dict; - const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); - mz_uint32 probe_len = 32; - do { - } while ((TDEFL_READ_UNALIGNED_WORD(++p) == - TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == - TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == - TDEFL_READ_UNALIGNED_WORD(++q)) && - (TDEFL_READ_UNALIGNED_WORD(++p) == - TDEFL_READ_UNALIGNED_WORD(++q)) && - (--probe_len > 0)); - cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + - (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); - if (!probe_len) - cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; - - if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || - ((cur_match_len == TDEFL_MIN_MATCH_LEN) && - (cur_match_dist >= 8U * 1024U))) { - cur_match_len = 1; - *pLZ_code_buf++ = (mz_uint8)first_trigram; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - d->m_huff_count[0][(mz_uint8)first_trigram]++; - } else { - mz_uint32 s0, s1; - cur_match_len = MZ_MIN(cur_match_len, lookahead_size); - - MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && - (cur_match_dist >= 1) && - (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); - - cur_match_dist--; - - pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); - *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; - pLZ_code_buf += 3; - *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); - - s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; - s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; - d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; - - d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - - TDEFL_MIN_MATCH_LEN]]++; - } - } else { - *pLZ_code_buf++ = (mz_uint8)first_trigram; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - d->m_huff_count[0][(mz_uint8)first_trigram]++; - } - - if (--num_flags_left == 0) { - num_flags_left = 8; - pLZ_flags = pLZ_code_buf++; - } - - total_lz_bytes += cur_match_len; - lookahead_pos += cur_match_len; - dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE); - cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; - MZ_ASSERT(lookahead_size >= cur_match_len); - lookahead_size -= cur_match_len; - - if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { - int n; - d->m_lookahead_pos = lookahead_pos; - d->m_lookahead_size = lookahead_size; - d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; - d->m_pLZ_code_buf = pLZ_code_buf; - d->m_pLZ_flags = pLZ_flags; - d->m_num_flags_left = num_flags_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - total_lz_bytes = d->m_total_lz_bytes; - pLZ_code_buf = d->m_pLZ_code_buf; - pLZ_flags = d->m_pLZ_flags; - num_flags_left = d->m_num_flags_left; - } - } - - while (lookahead_size) { - mz_uint8 lit = d->m_dict[cur_pos]; - - total_lz_bytes++; - *pLZ_code_buf++ = lit; - *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); - if (--num_flags_left == 0) { - num_flags_left = 8; - pLZ_flags = pLZ_code_buf++; - } - - d->m_huff_count[0][lit]++; - - lookahead_pos++; - dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE); - cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; - lookahead_size--; - - if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { - int n; - d->m_lookahead_pos = lookahead_pos; - d->m_lookahead_size = lookahead_size; - d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; - d->m_pLZ_code_buf = pLZ_code_buf; - d->m_pLZ_flags = pLZ_flags; - d->m_num_flags_left = num_flags_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - total_lz_bytes = d->m_total_lz_bytes; - pLZ_code_buf = d->m_pLZ_code_buf; - pLZ_flags = d->m_pLZ_flags; - num_flags_left = d->m_num_flags_left; - } - } - } - - d->m_lookahead_pos = lookahead_pos; - d->m_lookahead_size = lookahead_size; - d->m_dict_size = dict_size; - d->m_total_lz_bytes = total_lz_bytes; - d->m_pLZ_code_buf = pLZ_code_buf; - d->m_pLZ_flags = pLZ_flags; - d->m_num_flags_left = num_flags_left; - return MZ_TRUE; -} -#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - -static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, - mz_uint8 lit) { - d->m_total_lz_bytes++; - *d->m_pLZ_code_buf++ = lit; - *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); - if (--d->m_num_flags_left == 0) { - d->m_num_flags_left = 8; - d->m_pLZ_flags = d->m_pLZ_code_buf++; - } - d->m_huff_count[0][lit]++; -} - -static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, - mz_uint match_len, - mz_uint match_dist) { - mz_uint32 s0, s1; - - MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && - (match_dist <= TDEFL_LZ_DICT_SIZE)); - - d->m_total_lz_bytes += match_len; - - d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); - - match_dist -= 1; - d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); - d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); - d->m_pLZ_code_buf += 3; - - *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); - if (--d->m_num_flags_left == 0) { - d->m_num_flags_left = 8; - d->m_pLZ_flags = d->m_pLZ_code_buf++; - } - - s0 = s_tdefl_small_dist_sym[match_dist & 511]; - s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; - d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; - - if (match_len >= TDEFL_MIN_MATCH_LEN) - d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; -} - -static mz_bool tdefl_compress_normal(tdefl_compressor *d) { - const mz_uint8 *pSrc = d->m_pSrc; - size_t src_buf_left = d->m_src_buf_left; - tdefl_flush flush = d->m_flush; - - while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) { - mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; - // Update dictionary and hash chains. Keeps the lookahead size equal to - // TDEFL_MAX_MATCH_LEN. - if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) { - mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & - TDEFL_LZ_DICT_SIZE_MASK, - ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; - mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] - << TDEFL_LZ_HASH_SHIFT) ^ - d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; - mz_uint num_bytes_to_process = (mz_uint)MZ_MIN( - src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); - const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; - src_buf_left -= num_bytes_to_process; - d->m_lookahead_size += num_bytes_to_process; - while (pSrc != pSrc_end) { - mz_uint8 c = *pSrc++; - d->m_dict[dst_pos] = c; - if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) - d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; - hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); - d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; - d->m_hash[hash] = (mz_uint16)(ins_pos); - dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; - ins_pos++; - } - } else { - while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) { - mz_uint8 c = *pSrc++; - mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & - TDEFL_LZ_DICT_SIZE_MASK; - src_buf_left--; - d->m_dict[dst_pos] = c; - if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) - d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; - if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) { - mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; - mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] - << (TDEFL_LZ_HASH_SHIFT * 2)) ^ - (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] - << TDEFL_LZ_HASH_SHIFT) ^ - c) & - (TDEFL_LZ_HASH_SIZE - 1); - d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; - d->m_hash[hash] = (mz_uint16)(ins_pos); - } - } - } - d->m_dict_size = - MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); - if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break; - - // Simple lazy/greedy parsing state machine. - len_to_move = 1; - cur_match_dist = 0; - cur_match_len = - d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); - cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; - if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) { - if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) { - mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; - cur_match_len = 0; - while (cur_match_len < d->m_lookahead_size) { - if (d->m_dict[cur_pos + cur_match_len] != c) break; - cur_match_len++; - } - if (cur_match_len < TDEFL_MIN_MATCH_LEN) - cur_match_len = 0; - else - cur_match_dist = 1; - } - } else { - tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, - d->m_lookahead_size, &cur_match_dist, &cur_match_len); - } - if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && - (cur_match_dist >= 8U * 1024U)) || - (cur_pos == cur_match_dist) || - ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) { - cur_match_dist = cur_match_len = 0; - } - if (d->m_saved_match_len) { - if (cur_match_len > d->m_saved_match_len) { - tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); - if (cur_match_len >= 128) { - tdefl_record_match(d, cur_match_len, cur_match_dist); - d->m_saved_match_len = 0; - len_to_move = cur_match_len; - } else { - d->m_saved_lit = d->m_dict[cur_pos]; - d->m_saved_match_dist = cur_match_dist; - d->m_saved_match_len = cur_match_len; - } - } else { - tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); - len_to_move = d->m_saved_match_len - 1; - d->m_saved_match_len = 0; - } - } else if (!cur_match_dist) - tdefl_record_literal(d, - d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); - else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || - (cur_match_len >= 128)) { - tdefl_record_match(d, cur_match_len, cur_match_dist); - len_to_move = cur_match_len; - } else { - d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; - d->m_saved_match_dist = cur_match_dist; - d->m_saved_match_len = cur_match_len; - } - // Move the lookahead forward by len_to_move bytes. - d->m_lookahead_pos += len_to_move; - MZ_ASSERT(d->m_lookahead_size >= len_to_move); - d->m_lookahead_size -= len_to_move; - d->m_dict_size = - MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); - // Check if it's time to flush the current LZ codes to the internal output - // buffer. - if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || - ((d->m_total_lz_bytes > 31 * 1024) && - (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= - d->m_total_lz_bytes) || - (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) { - int n; - d->m_pSrc = pSrc; - d->m_src_buf_left = src_buf_left; - if ((n = tdefl_flush_block(d, 0)) != 0) - return (n < 0) ? MZ_FALSE : MZ_TRUE; - } - } - - d->m_pSrc = pSrc; - d->m_src_buf_left = src_buf_left; - return MZ_TRUE; -} - -static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) { - if (d->m_pIn_buf_size) { - *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; - } - - if (d->m_pOut_buf_size) { - size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, - d->m_output_flush_remaining); - memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, - d->m_output_buf + d->m_output_flush_ofs, n); - d->m_output_flush_ofs += (mz_uint)n; - d->m_output_flush_remaining -= (mz_uint)n; - d->m_out_buf_ofs += n; - - *d->m_pOut_buf_size = d->m_out_buf_ofs; - } - - return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE - : TDEFL_STATUS_OKAY; -} - -tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, - size_t *pIn_buf_size, void *pOut_buf, - size_t *pOut_buf_size, tdefl_flush flush) { - if (!d) { - if (pIn_buf_size) *pIn_buf_size = 0; - if (pOut_buf_size) *pOut_buf_size = 0; - return TDEFL_STATUS_BAD_PARAM; - } - - d->m_pIn_buf = pIn_buf; - d->m_pIn_buf_size = pIn_buf_size; - d->m_pOut_buf = pOut_buf; - d->m_pOut_buf_size = pOut_buf_size; - d->m_pSrc = (const mz_uint8 *)(pIn_buf); - d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; - d->m_out_buf_ofs = 0; - d->m_flush = flush; - - if (((d->m_pPut_buf_func != NULL) == - ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || - (d->m_prev_return_status != TDEFL_STATUS_OKAY) || - (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || - (pIn_buf_size && *pIn_buf_size && !pIn_buf) || - (pOut_buf_size && *pOut_buf_size && !pOut_buf)) { - if (pIn_buf_size) *pIn_buf_size = 0; - if (pOut_buf_size) *pOut_buf_size = 0; - return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); - } - d->m_wants_to_finish |= (flush == TDEFL_FINISH); - - if ((d->m_output_flush_remaining) || (d->m_finished)) - return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); - -#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && - ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && - ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | - TDEFL_RLE_MATCHES)) == 0)) { - if (!tdefl_compress_fast(d)) return d->m_prev_return_status; - } else -#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN - { - if (!tdefl_compress_normal(d)) return d->m_prev_return_status; - } - - if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && - (pIn_buf)) - d->m_adler32 = - (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, - d->m_pSrc - (const mz_uint8 *)pIn_buf); - - if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && - (!d->m_output_flush_remaining)) { - if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status; - d->m_finished = (flush == TDEFL_FINISH); - if (flush == TDEFL_FULL_FLUSH) { - MZ_CLEAR_OBJ(d->m_hash); - MZ_CLEAR_OBJ(d->m_next); - d->m_dict_size = 0; - } - } - - return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); -} - -tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, - size_t in_buf_size, tdefl_flush flush) { - MZ_ASSERT(d->m_pPut_buf_func); - return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); -} - -tdefl_status tdefl_init(tdefl_compressor *d, - tdefl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags) { - d->m_pPut_buf_func = pPut_buf_func; - d->m_pPut_buf_user = pPut_buf_user; - d->m_flags = (mz_uint)(flags); - d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; - d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; - d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; - if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); - d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = - d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; - d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = - d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; - d->m_pLZ_code_buf = d->m_lz_code_buf + 1; - d->m_pLZ_flags = d->m_lz_code_buf; - d->m_num_flags_left = 8; - d->m_pOutput_buf = d->m_output_buf; - d->m_pOutput_buf_end = d->m_output_buf; - d->m_prev_return_status = TDEFL_STATUS_OKAY; - d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; - d->m_adler32 = 1; - d->m_pIn_buf = NULL; - d->m_pOut_buf = NULL; - d->m_pIn_buf_size = NULL; - d->m_pOut_buf_size = NULL; - d->m_flush = TDEFL_NO_FLUSH; - d->m_pSrc = NULL; - d->m_src_buf_left = 0; - d->m_out_buf_ofs = 0; - memset(&d->m_huff_count[0][0], 0, - sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); - memset(&d->m_huff_count[1][0], 0, - sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); - return TDEFL_STATUS_OKAY; -} - -tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) { - return d->m_prev_return_status; -} - -mz_uint32 tdefl_get_adler32(tdefl_compressor *d) { return d->m_adler32; } - -mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, - tdefl_put_buf_func_ptr pPut_buf_func, - void *pPut_buf_user, int flags) { - tdefl_compressor *pComp; - mz_bool succeeded; - if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; - pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); - if (!pComp) return MZ_FALSE; - succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == - TDEFL_STATUS_OKAY); - succeeded = - succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == - TDEFL_STATUS_DONE); - MZ_FREE(pComp); - return succeeded; -} - -typedef struct { - size_t m_size, m_capacity; - mz_uint8 *m_pBuf; - mz_bool m_expandable; -} tdefl_output_buffer; - -static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, - void *pUser) { - tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; - size_t new_size = p->m_size + len; - if (new_size > p->m_capacity) { - size_t new_capacity = p->m_capacity; - mz_uint8 *pNew_buf; - if (!p->m_expandable) return MZ_FALSE; - do { - new_capacity = MZ_MAX(128U, new_capacity << 1U); - } while (new_size > new_capacity); - pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity); - if (!pNew_buf) return MZ_FALSE; - p->m_pBuf = pNew_buf; - p->m_capacity = new_capacity; - } - memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len); - p->m_size = new_size; - return MZ_TRUE; -} - -void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, - size_t *pOut_len, int flags) { - tdefl_output_buffer out_buf; - MZ_CLEAR_OBJ(out_buf); - if (!pOut_len) - return MZ_FALSE; - else - *pOut_len = 0; - out_buf.m_expandable = MZ_TRUE; - if (!tdefl_compress_mem_to_output( - pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) - return NULL; - *pOut_len = out_buf.m_size; - return out_buf.m_pBuf; -} - -size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, - const void *pSrc_buf, size_t src_buf_len, - int flags) { - tdefl_output_buffer out_buf; - MZ_CLEAR_OBJ(out_buf); - if (!pOut_buf) return 0; - out_buf.m_pBuf = (mz_uint8 *)pOut_buf; - out_buf.m_capacity = out_buf_len; - if (!tdefl_compress_mem_to_output( - pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) - return 0; - return out_buf.m_size; -} - -#ifndef MINIZ_NO_ZLIB_APIS -static const mz_uint s_tdefl_num_probes[11] = {0, 1, 6, 32, 16, 32, - 128, 256, 512, 768, 1500}; - -// level may actually range from [0,10] (10 is a "hidden" max level, where we -// want a bit more compression and it's fine if throughput to fall off a cliff -// on some files). -mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, - int strategy) { - mz_uint comp_flags = - s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | - ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); - if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; - - if (!level) - comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; - else if (strategy == MZ_FILTERED) - comp_flags |= TDEFL_FILTER_MATCHES; - else if (strategy == MZ_HUFFMAN_ONLY) - comp_flags &= ~TDEFL_MAX_PROBES_MASK; - else if (strategy == MZ_FIXED) - comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; - else if (strategy == MZ_RLE) - comp_flags |= TDEFL_RLE_MATCHES; - - return comp_flags; -} -#endif // MINIZ_NO_ZLIB_APIS - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4204) // nonstandard extension used : non-constant - // aggregate initializer (also supported by GNU - // C and C99, so no big deal) -#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to - // 'int', possible loss of data -#pragma warning(disable : 4267) // 'argument': conversion from '__int64' to - // 'int', possible loss of data -#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is - // deprecated. Instead, use the ISO C and C++ - // conformant name: _strdup. -#endif - -// Simple PNG writer function by Alex Evans, 2011. Released into the public -// domain: https://gist.github.com/908299, more context at -// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. -// This is actually a modification of Alex's original code so PNG files -// generated by this function pass pngcheck. -void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, - int h, int num_chans, - size_t *pLen_out, - mz_uint level, mz_bool flip) { - // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was - // defined. - static const mz_uint s_tdefl_png_num_probes[11] = { - 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500}; - tdefl_compressor *pComp = - (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); - tdefl_output_buffer out_buf; - int i, bpl = w * num_chans, y, z; - mz_uint32 c; - *pLen_out = 0; - if (!pComp) return NULL; - MZ_CLEAR_OBJ(out_buf); - out_buf.m_expandable = MZ_TRUE; - out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h); - if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) { - MZ_FREE(pComp); - return NULL; - } - // write dummy header - for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); - // compress image data - tdefl_init( - pComp, tdefl_output_buffer_putter, &out_buf, - s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); - for (y = 0; y < h; ++y) { - tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); - tdefl_compress_buffer(pComp, - (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl, - bpl, TDEFL_NO_FLUSH); - } - if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != - TDEFL_STATUS_DONE) { - MZ_FREE(pComp); - MZ_FREE(out_buf.m_pBuf); - return NULL; - } - // write real header - *pLen_out = out_buf.m_size - 41; - { - static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; - mz_uint8 pnghdr[41] = {0x89, - 0x50, - 0x4e, - 0x47, - 0x0d, - 0x0a, - 0x1a, - 0x0a, - 0x00, - 0x00, - 0x00, - 0x0d, - 0x49, - 0x48, - 0x44, - 0x52, - 0, - 0, - (mz_uint8)(w >> 8), - (mz_uint8)w, - 0, - 0, - (mz_uint8)(h >> 8), - (mz_uint8)h, - 8, - chans[num_chans], - 0, - 0, - 0, - 0, - 0, - 0, - 0, - (mz_uint8)(*pLen_out >> 24), - (mz_uint8)(*pLen_out >> 16), - (mz_uint8)(*pLen_out >> 8), - (mz_uint8)*pLen_out, - 0x49, - 0x44, - 0x41, - 0x54}; - c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17); - for (i = 0; i < 4; ++i, c <<= 8) - ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24); - memcpy(out_buf.m_pBuf, pnghdr, 41); - } - // write footer (IDAT CRC-32, followed by IEND chunk) - if (!tdefl_output_buffer_putter( - "\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { - *pLen_out = 0; - MZ_FREE(pComp); - MZ_FREE(out_buf.m_pBuf); - return NULL; - } - c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4, - *pLen_out + 4); - for (i = 0; i < 4; ++i, c <<= 8) - (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24); - // compute final size of file, grab compressed data buffer and return - *pLen_out += 57; - MZ_FREE(pComp); - return out_buf.m_pBuf; -} -void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, - int num_chans, size_t *pLen_out) { - // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we - // can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's - // where #defined out) - return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, - pLen_out, 6, MZ_FALSE); -} - -// ------------------- .ZIP archive reading - -#ifndef MINIZ_NO_ARCHIVE_APIS -#error "No arvhive APIs" - -#ifdef MINIZ_NO_STDIO -#define MZ_FILE void * -#else -#include <stdio.h> -#include <sys/stat.h> - -#if defined(_MSC_VER) || defined(__MINGW64__) -static FILE *mz_fopen(const char *pFilename, const char *pMode) { - FILE *pFile = NULL; - fopen_s(&pFile, pFilename, pMode); - return pFile; -} -static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) { - FILE *pFile = NULL; - if (freopen_s(&pFile, pPath, pMode, pStream)) return NULL; - return pFile; -} -#ifndef MINIZ_NO_TIME -#include <sys/utime.h> -#endif -#define MZ_FILE FILE -#define MZ_FOPEN mz_fopen -#define MZ_FCLOSE fclose -#define MZ_FREAD fread -#define MZ_FWRITE fwrite -#define MZ_FTELL64 _ftelli64 -#define MZ_FSEEK64 _fseeki64 -#define MZ_FILE_STAT_STRUCT _stat -#define MZ_FILE_STAT _stat -#define MZ_FFLUSH fflush -#define MZ_FREOPEN mz_freopen -#define MZ_DELETE_FILE remove -#elif defined(__MINGW32__) -#ifndef MINIZ_NO_TIME -#include <sys/utime.h> -#endif -#define MZ_FILE FILE -#define MZ_FOPEN(f, m) fopen(f, m) -#define MZ_FCLOSE fclose -#define MZ_FREAD fread -#define MZ_FWRITE fwrite -#define MZ_FTELL64 ftello64 -#define MZ_FSEEK64 fseeko64 -#define MZ_FILE_STAT_STRUCT _stat -#define MZ_FILE_STAT _stat -#define MZ_FFLUSH fflush -#define MZ_FREOPEN(f, m, s) freopen(f, m, s) -#define MZ_DELETE_FILE remove -#elif defined(__TINYC__) -#ifndef MINIZ_NO_TIME -#include <sys/utime.h> -#endif -#define MZ_FILE FILE -#define MZ_FOPEN(f, m) fopen(f, m) -#define MZ_FCLOSE fclose -#define MZ_FREAD fread -#define MZ_FWRITE fwrite -#define MZ_FTELL64 ftell -#define MZ_FSEEK64 fseek -#define MZ_FILE_STAT_STRUCT stat -#define MZ_FILE_STAT stat -#define MZ_FFLUSH fflush -#define MZ_FREOPEN(f, m, s) freopen(f, m, s) -#define MZ_DELETE_FILE remove -#elif defined(__GNUC__) && defined(_LARGEFILE64_SOURCE) && _LARGEFILE64_SOURCE -#ifndef MINIZ_NO_TIME -#include <utime.h> -#endif -#define MZ_FILE FILE -#define MZ_FOPEN(f, m) fopen64(f, m) -#define MZ_FCLOSE fclose -#define MZ_FREAD fread -#define MZ_FWRITE fwrite -#define MZ_FTELL64 ftello64 -#define MZ_FSEEK64 fseeko64 -#define MZ_FILE_STAT_STRUCT stat64 -#define MZ_FILE_STAT stat64 -#define MZ_FFLUSH fflush -#define MZ_FREOPEN(p, m, s) freopen64(p, m, s) -#define MZ_DELETE_FILE remove -#else -#ifndef MINIZ_NO_TIME -#include <utime.h> -#endif -#define MZ_FILE FILE -#define MZ_FOPEN(f, m) fopen(f, m) -#define MZ_FCLOSE fclose -#define MZ_FREAD fread -#define MZ_FWRITE fwrite -#define MZ_FTELL64 ftello -#define MZ_FSEEK64 fseeko -#define MZ_FILE_STAT_STRUCT stat -#define MZ_FILE_STAT stat -#define MZ_FFLUSH fflush -#define MZ_FREOPEN(f, m, s) freopen(f, m, s) -#define MZ_DELETE_FILE remove -#endif // #ifdef _MSC_VER -#endif // #ifdef MINIZ_NO_STDIO - -#define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) - -// Various ZIP archive enums. To completely avoid cross platform compiler -// alignment and platform endian issues, miniz.c doesn't use structs for any of -// this stuff. -enum { - // ZIP archive identifiers and record sizes - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50, - MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50, - MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50, - MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, - // Central directory header record offsets - MZ_ZIP_CDH_SIG_OFS = 0, - MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, - MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6, - MZ_ZIP_CDH_BIT_FLAG_OFS = 8, - MZ_ZIP_CDH_METHOD_OFS = 10, - MZ_ZIP_CDH_FILE_TIME_OFS = 12, - MZ_ZIP_CDH_FILE_DATE_OFS = 14, - MZ_ZIP_CDH_CRC32_OFS = 16, - MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20, - MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24, - MZ_ZIP_CDH_FILENAME_LEN_OFS = 28, - MZ_ZIP_CDH_EXTRA_LEN_OFS = 30, - MZ_ZIP_CDH_COMMENT_LEN_OFS = 32, - MZ_ZIP_CDH_DISK_START_OFS = 34, - MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36, - MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38, - MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42, - // Local directory header offsets - MZ_ZIP_LDH_SIG_OFS = 0, - MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4, - MZ_ZIP_LDH_BIT_FLAG_OFS = 6, - MZ_ZIP_LDH_METHOD_OFS = 8, - MZ_ZIP_LDH_FILE_TIME_OFS = 10, - MZ_ZIP_LDH_FILE_DATE_OFS = 12, - MZ_ZIP_LDH_CRC32_OFS = 14, - MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18, - MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22, - MZ_ZIP_LDH_FILENAME_LEN_OFS = 26, - MZ_ZIP_LDH_EXTRA_LEN_OFS = 28, - // End of central directory offsets - MZ_ZIP_ECDH_SIG_OFS = 0, - MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4, - MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6, - MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8, - MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10, - MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, - MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, - MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, -}; - -typedef struct { - void *m_p; - size_t m_size, m_capacity; - mz_uint m_element_size; -} mz_zip_array; - -struct mz_zip_internal_state_tag { - mz_zip_array m_central_dir; - mz_zip_array m_central_dir_offsets; - mz_zip_array m_sorted_central_dir_offsets; - MZ_FILE *m_pFile; - void *m_pMem; - size_t m_mem_size; - size_t m_mem_capacity; -}; - -#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \ - (array_ptr)->m_element_size = element_size -#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \ - ((element_type *)((array_ptr)->m_p))[index] - -static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, - mz_zip_array *pArray) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p); - memset(pArray, 0, sizeof(mz_zip_array)); -} - -static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, - mz_zip_array *pArray, - size_t min_new_capacity, - mz_uint growing) { - void *pNew_p; - size_t new_capacity = min_new_capacity; - MZ_ASSERT(pArray->m_element_size); - if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE; - if (growing) { - new_capacity = MZ_MAX(1, pArray->m_capacity); - while (new_capacity < min_new_capacity) new_capacity *= 2; - } - if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, - pArray->m_element_size, new_capacity))) - return MZ_FALSE; - pArray->m_p = pNew_p; - pArray->m_capacity = new_capacity; - return MZ_TRUE; -} - -static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, - mz_zip_array *pArray, - size_t new_capacity, - mz_uint growing) { - if (new_capacity > pArray->m_capacity) { - if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) - return MZ_FALSE; - } - return MZ_TRUE; -} - -static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, - mz_zip_array *pArray, - size_t new_size, - mz_uint growing) { - if (new_size > pArray->m_capacity) { - if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) - return MZ_FALSE; - } - pArray->m_size = new_size; - return MZ_TRUE; -} - -static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, - mz_zip_array *pArray, - size_t n) { - return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); -} - -static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, - mz_zip_array *pArray, - const void *pElements, - size_t n) { - size_t orig_size = pArray->m_size; - if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) - return MZ_FALSE; - memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size, - pElements, n * pArray->m_element_size); - return MZ_TRUE; -} - -#ifndef MINIZ_NO_TIME -static time_t mz_zip_dos_to_time_t(int dos_time, int dos_date) { - struct tm tm; - memset(&tm, 0, sizeof(tm)); - tm.tm_isdst = -1; - tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900; - tm.tm_mon = ((dos_date >> 5) & 15) - 1; - tm.tm_mday = dos_date & 31; - tm.tm_hour = (dos_time >> 11) & 31; - tm.tm_min = (dos_time >> 5) & 63; - tm.tm_sec = (dos_time << 1) & 62; - return mktime(&tm); -} - -static void mz_zip_time_to_dos_time(time_t time, mz_uint16 *pDOS_time, - mz_uint16 *pDOS_date) { -#ifdef _MSC_VER - struct tm tm_struct; - struct tm *tm = &tm_struct; - errno_t err = localtime_s(tm, &time); - if (err) { - *pDOS_date = 0; - *pDOS_time = 0; - return; - } -#else - struct tm *tm = localtime(&time); -#endif - *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + - ((tm->tm_sec) >> 1)); - *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + - ((tm->tm_mon + 1) << 5) + tm->tm_mday); -} -#endif - -#ifndef MINIZ_NO_STDIO -static mz_bool mz_zip_get_file_modified_time(const char *pFilename, - mz_uint16 *pDOS_time, - mz_uint16 *pDOS_date) { -#ifdef MINIZ_NO_TIME - (void)pFilename; - *pDOS_date = *pDOS_time = 0; -#else - struct MZ_FILE_STAT_STRUCT file_stat; - // On Linux with x86 glibc, this call will fail on large files (>= 0x80000000 - // bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. - if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE; - mz_zip_time_to_dos_time(file_stat.st_mtime, pDOS_time, pDOS_date); -#endif // #ifdef MINIZ_NO_TIME - return MZ_TRUE; -} - -#ifndef MINIZ_NO_TIME -static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, - time_t modified_time) { - struct utimbuf t; - t.actime = access_time; - t.modtime = modified_time; - return !utime(pFilename, &t); -} -#endif // #ifndef MINIZ_NO_TIME -#endif // #ifndef MINIZ_NO_STDIO - -static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, - mz_uint32 flags) { - (void)flags; - if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) - return MZ_FALSE; - - if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; - if (!pZip->m_pFree) pZip->m_pFree = def_free_func; - if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; - - pZip->m_zip_mode = MZ_ZIP_MODE_READING; - pZip->m_archive_size = 0; - pZip->m_central_directory_file_ofs = 0; - pZip->m_total_files = 0; - - if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) - return MZ_FALSE; - memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, - sizeof(mz_uint8)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, - sizeof(mz_uint32)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, - sizeof(mz_uint32)); - return MZ_TRUE; -} - -static MZ_FORCEINLINE mz_bool -mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, - const mz_zip_array *pCentral_dir_offsets, - mz_uint l_index, mz_uint r_index) { - const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, - l_index)), - *pE; - const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); - mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), - r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); - mz_uint8 l = 0, r = 0; - pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; - pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; - pE = pL + MZ_MIN(l_len, r_len); - while (pL < pE) { - if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; - pL++; - pR++; - } - return (pL == pE) ? (l_len < r_len) : (l < r); -} - -#define MZ_SWAP_UINT32(a, b) \ - do { \ - mz_uint32 t = a; \ - a = b; \ - b = t; \ - } \ - MZ_MACRO_END - -// Heap sort of lowercased filenames, used to help accelerate plain central -// directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), -// but it could allocate memory.) -static void mz_zip_reader_sort_central_dir_offsets_by_filename( - mz_zip_archive *pZip) { - mz_zip_internal_state *pState = pZip->m_pState; - const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; - const mz_zip_array *pCentral_dir = &pState->m_central_dir; - mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT( - &pState->m_sorted_central_dir_offsets, mz_uint32, 0); - const int size = pZip->m_total_files; - int start = (size - 2) >> 1, end; - while (start >= 0) { - int child, root = start; - for (;;) { - if ((child = (root << 1) + 1) >= size) break; - child += - (((child + 1) < size) && - (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, - pIndices[child], pIndices[child + 1]))); - if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, - pIndices[root], pIndices[child])) - break; - MZ_SWAP_UINT32(pIndices[root], pIndices[child]); - root = child; - } - start--; - } - - end = size - 1; - while (end > 0) { - int child, root = 0; - MZ_SWAP_UINT32(pIndices[end], pIndices[0]); - for (;;) { - if ((child = (root << 1) + 1) >= end) break; - child += - (((child + 1) < end) && - mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, - pIndices[child], pIndices[child + 1])); - if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, - pIndices[root], pIndices[child])) - break; - MZ_SWAP_UINT32(pIndices[root], pIndices[child]); - root = child; - } - end--; - } -} - -static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, - mz_uint32 flags) { - mz_uint cdir_size, num_this_disk, cdir_disk_index; - mz_uint64 cdir_ofs; - mz_int64 cur_file_ofs; - const mz_uint8 *p; - mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; - mz_uint8 *pBuf = (mz_uint8 *)buf_u32; - mz_bool sort_central_dir = - ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); - // Basic sanity checks - reject files which are too small, and check the first - // 4 bytes of the file to make sure a local header is there. - if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) - return MZ_FALSE; - // Find the end of central directory record by scanning the file from the end - // towards the beginning. - cur_file_ofs = - MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); - for (;;) { - int i, - n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) - return MZ_FALSE; - for (i = n - 4; i >= 0; --i) - if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) break; - if (i >= 0) { - cur_file_ofs += i; - break; - } - if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= - (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) - return MZ_FALSE; - cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); - } - // Read and verify the end of central directory record. - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) - return MZ_FALSE; - if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || - ((pZip->m_total_files = - MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != - MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) - return MZ_FALSE; - - num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); - cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); - if (((num_this_disk | cdir_disk_index) != 0) && - ((num_this_disk != 1) || (cdir_disk_index != 1))) - return MZ_FALSE; - - if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < - pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) - return MZ_FALSE; - - cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); - if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return MZ_FALSE; - - pZip->m_central_directory_file_ofs = cdir_ofs; - - if (pZip->m_total_files) { - mz_uint i, n; - - // Read the entire central directory into a heap block, and allocate another - // heap block to hold the unsorted central dir file record offsets, and - // another to hold the sorted indices. - if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, - MZ_FALSE)) || - (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, - pZip->m_total_files, MZ_FALSE))) - return MZ_FALSE; - - if (sort_central_dir) { - if (!mz_zip_array_resize(pZip, - &pZip->m_pState->m_sorted_central_dir_offsets, - pZip->m_total_files, MZ_FALSE)) - return MZ_FALSE; - } - - if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, - pZip->m_pState->m_central_dir.m_p, - cdir_size) != cdir_size) - return MZ_FALSE; - - // Now create an index into the central directory file records, do some - // basic sanity checking on each record, and check for zip64 entries (which - // are not yet supported). - p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; - for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { - mz_uint total_header_size, comp_size, decomp_size, disk_index; - if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || - (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) - return MZ_FALSE; - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, - i) = - (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); - if (sort_central_dir) - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, - mz_uint32, i) = i; - comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); - if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && - (decomp_size != comp_size)) || - (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || - (comp_size == 0xFFFFFFFF)) - return MZ_FALSE; - disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); - if ((disk_index != num_this_disk) && (disk_index != 1)) return MZ_FALSE; - if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + - MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) - return MZ_FALSE; - if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > - n) - return MZ_FALSE; - n -= total_header_size; - p += total_header_size; - } - } - - if (sort_central_dir) - mz_zip_reader_sort_central_dir_offsets_by_filename(pZip); - - return MZ_TRUE; -} - -mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, - mz_uint32 flags) { - if ((!pZip) || (!pZip->m_pRead)) return MZ_FALSE; - if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; - pZip->m_archive_size = size; - if (!mz_zip_reader_read_central_dir(pZip, flags)) { - mz_zip_reader_end(pZip); - return MZ_FALSE; - } - return MZ_TRUE; -} - -static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, - void *pBuf, size_t n) { - mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; - size_t s = (file_ofs >= pZip->m_archive_size) - ? 0 - : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n); - memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s); - return s; -} - -mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, - size_t size, mz_uint32 flags) { - if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; - pZip->m_archive_size = size; - pZip->m_pRead = mz_zip_mem_read_func; - pZip->m_pIO_opaque = pZip; -#ifdef __cplusplus - pZip->m_pState->m_pMem = const_cast<void *>(pMem); -#else - pZip->m_pState->m_pMem = (void *)pMem; -#endif - pZip->m_pState->m_mem_size = size; - if (!mz_zip_reader_read_central_dir(pZip, flags)) { - mz_zip_reader_end(pZip); - return MZ_FALSE; - } - return MZ_TRUE; -} - -#ifndef MINIZ_NO_STDIO -static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, - void *pBuf, size_t n) { - mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; - mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); - if (((mz_int64)file_ofs < 0) || - (((cur_ofs != (mz_int64)file_ofs)) && - (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) - return 0; - return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile); -} - -mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, - mz_uint32 flags) { - mz_uint64 file_size; - MZ_FILE *pFile = MZ_FOPEN(pFilename, "rb"); - if (!pFile) return MZ_FALSE; - if (MZ_FSEEK64(pFile, 0, SEEK_END)) { - MZ_FCLOSE(pFile); - return MZ_FALSE; - } - file_size = MZ_FTELL64(pFile); - if (!mz_zip_reader_init_internal(pZip, flags)) { - MZ_FCLOSE(pFile); - return MZ_FALSE; - } - pZip->m_pRead = mz_zip_file_read_func; - pZip->m_pIO_opaque = pZip; - pZip->m_pState->m_pFile = pFile; - pZip->m_archive_size = file_size; - if (!mz_zip_reader_read_central_dir(pZip, flags)) { - mz_zip_reader_end(pZip); - return MZ_FALSE; - } - return MZ_TRUE; -} -#endif // #ifndef MINIZ_NO_STDIO - -mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) { - return pZip ? pZip->m_total_files : 0; -} - -static MZ_FORCEINLINE const mz_uint8 *mz_zip_reader_get_cdh( - mz_zip_archive *pZip, mz_uint file_index) { - if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files) || - (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) - return NULL; - return &MZ_ZIP_ARRAY_ELEMENT( - &pZip->m_pState->m_central_dir, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, - file_index)); -} - -mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, - mz_uint file_index) { - mz_uint m_bit_flag; - const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if (!p) return MZ_FALSE; - m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); - return (m_bit_flag & 1); -} - -mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, - mz_uint file_index) { - mz_uint filename_len, external_attr; - const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if (!p) return MZ_FALSE; - - // First see if the filename ends with a '/' character. - filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); - if (filename_len) { - if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/') - return MZ_TRUE; - } - - // Bugfix: This code was also checking if the internal attribute was non-zero, - // which wasn't correct. - // Most/all zip writers (hopefully) set DOS file/directory attributes in the - // low 16-bits, so check for the DOS directory flag and ignore the source OS - // ID in the created by field. - // FIXME: Remove this check? Is it necessary - we already check the filename. - external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); - if ((external_attr & 0x10) != 0) return MZ_TRUE; - - return MZ_FALSE; -} - -mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, - mz_zip_archive_file_stat *pStat) { - mz_uint n; - const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if ((!p) || (!pStat)) return MZ_FALSE; - - // Unpack the central directory record. - pStat->m_file_index = file_index; - pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT( - &pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index); - pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS); - pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS); - pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); - pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); -#ifndef MINIZ_NO_TIME - pStat->m_time = - mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS), - MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS)); -#endif - pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS); - pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); - pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS); - pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); - pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); - - // Copy as much of the filename and comment as possible. - n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); - n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1); - memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); - pStat->m_filename[n] = '\0'; - - n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); - n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); - pStat->m_comment_size = n; - memcpy(pStat->m_comment, - p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), - n); - pStat->m_comment[n] = '\0'; - - return MZ_TRUE; -} - -mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, - char *pFilename, mz_uint filename_buf_size) { - mz_uint n; - const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - if (!p) { - if (filename_buf_size) pFilename[0] = '\0'; - return 0; - } - n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); - if (filename_buf_size) { - n = MZ_MIN(n, filename_buf_size - 1); - memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); - pFilename[n] = '\0'; - } - return n + 1; -} - -static MZ_FORCEINLINE mz_bool mz_zip_reader_string_equal(const char *pA, - const char *pB, - mz_uint len, - mz_uint flags) { - mz_uint i; - if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len); - for (i = 0; i < len; ++i) - if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE; - return MZ_TRUE; -} - -static MZ_FORCEINLINE int mz_zip_reader_filename_compare( - const mz_zip_array *pCentral_dir_array, - const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, - mz_uint r_len) { - const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT( - pCentral_dir_array, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, - l_index)), - *pE; - mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); - mz_uint8 l = 0, r = 0; - pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; - pE = pL + MZ_MIN(l_len, r_len); - while (pL < pE) { - if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; - pL++; - pR++; - } - return (pL == pE) ? (int)(l_len - r_len) : (l - r); -} - -static int mz_zip_reader_locate_file_binary_search(mz_zip_archive *pZip, - const char *pFilename) { - mz_zip_internal_state *pState = pZip->m_pState; - const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; - const mz_zip_array *pCentral_dir = &pState->m_central_dir; - mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT( - &pState->m_sorted_central_dir_offsets, mz_uint32, 0); - const int size = pZip->m_total_files; - const mz_uint filename_len = (mz_uint)strlen(pFilename); - int l = 0, h = size - 1; - while (l <= h) { - int m = (l + h) >> 1, file_index = pIndices[m], - comp = - mz_zip_reader_filename_compare(pCentral_dir, pCentral_dir_offsets, - file_index, pFilename, filename_len); - if (!comp) - return file_index; - else if (comp < 0) - l = m + 1; - else - h = m - 1; - } - return -1; -} - -int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, - const char *pComment, mz_uint flags) { - mz_uint file_index; - size_t name_len, comment_len; - if ((!pZip) || (!pZip->m_pState) || (!pName) || - (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) - return -1; - if (((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) && - (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) - return mz_zip_reader_locate_file_binary_search(pZip, pName); - name_len = strlen(pName); - if (name_len > 0xFFFF) return -1; - comment_len = pComment ? strlen(pComment) : 0; - if (comment_len > 0xFFFF) return -1; - for (file_index = 0; file_index < pZip->m_total_files; file_index++) { - const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT( - &pZip->m_pState->m_central_dir, mz_uint8, - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, - file_index)); - mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); - const char *pFilename = - (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; - if (filename_len < name_len) continue; - if (comment_len) { - mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), - file_comment_len = - MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS); - const char *pFile_comment = pFilename + filename_len + file_extra_len; - if ((file_comment_len != comment_len) || - (!mz_zip_reader_string_equal(pComment, pFile_comment, - file_comment_len, flags))) - continue; - } - if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) { - int ofs = filename_len - 1; - do { - if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') || - (pFilename[ofs] == ':')) - break; - } while (--ofs >= 0); - ofs++; - pFilename += ofs; - filename_len -= ofs; - } - if ((filename_len == name_len) && - (mz_zip_reader_string_equal(pName, pFilename, filename_len, flags))) - return file_index; - } - return -1; -} - -mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, - mz_uint file_index, void *pBuf, - size_t buf_size, mz_uint flags, - void *pUser_read_buf, - size_t user_read_buf_size) { - int status = TINFL_STATUS_DONE; - mz_uint64 needed_size, cur_file_ofs, comp_remaining, - out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail; - mz_zip_archive_file_stat file_stat; - void *pRead_buf; - mz_uint32 - local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / - sizeof(mz_uint32)]; - mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; - tinfl_decompressor inflator; - - if ((buf_size) && (!pBuf)) return MZ_FALSE; - - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; - - // Empty file, or a directory (but not always a directory - I've seen odd zips - // with directories that have compressed data which inflates to 0 bytes) - if (!file_stat.m_comp_size) return MZ_TRUE; - - // Entry is a subdirectory (I've seen old zips with dir entries which have - // compressed deflate data which inflates to 0 bytes, but these entries claim - // to uncompress to 512 bytes in the headers). - // I'm torn how to handle this case - should it fail instead? - if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE; - - // Encryption and patch files are not supported. - if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE; - - // This function only supports stored and deflate. - if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && - (file_stat.m_method != MZ_DEFLATED)) - return MZ_FALSE; - - // Ensure supplied output buffer is large enough. - needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size - : file_stat.m_uncomp_size; - if (buf_size < needed_size) return MZ_FALSE; - - // Read and parse the local directory entry. - cur_file_ofs = file_stat.m_local_header_ofs; - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) - return MZ_FALSE; - if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) - return MZ_FALSE; - - cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + - MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); - if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) - return MZ_FALSE; - - if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { - // The file is stored or the caller has requested the compressed data. - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, - (size_t)needed_size) != needed_size) - return MZ_FALSE; - return ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) != 0) || - (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, - (size_t)file_stat.m_uncomp_size) == file_stat.m_crc32); - } - - // Decompress the file either directly from memory or from a file input - // buffer. - tinfl_init(&inflator); - - if (pZip->m_pState->m_pMem) { - // Read directly from the archive in memory. - pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; - read_buf_size = read_buf_avail = file_stat.m_comp_size; - comp_remaining = 0; - } else if (pUser_read_buf) { - // Use a user provided read buffer. - if (!user_read_buf_size) return MZ_FALSE; - pRead_buf = (mz_uint8 *)pUser_read_buf; - read_buf_size = user_read_buf_size; - read_buf_avail = 0; - comp_remaining = file_stat.m_comp_size; - } else { - // Temporarily allocate a read buffer. - read_buf_size = - MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); -#ifdef _MSC_VER - if (((0, sizeof(size_t) == sizeof(mz_uint32))) && - (read_buf_size > 0x7FFFFFFF)) -#else - if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) -#endif - return MZ_FALSE; - if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, - (size_t)read_buf_size))) - return MZ_FALSE; - read_buf_avail = 0; - comp_remaining = file_stat.m_comp_size; - } - - do { - size_t in_buf_size, - out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs); - if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { - read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, - (size_t)read_buf_avail) != read_buf_avail) { - status = TINFL_STATUS_FAILED; - break; - } - cur_file_ofs += read_buf_avail; - comp_remaining -= read_buf_avail; - read_buf_ofs = 0; - } - in_buf_size = (size_t)read_buf_avail; - status = tinfl_decompress( - &inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, - (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size, - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | - (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0)); - read_buf_avail -= in_buf_size; - read_buf_ofs += in_buf_size; - out_buf_ofs += out_buf_size; - } while (status == TINFL_STATUS_NEEDS_MORE_INPUT); - - if (status == TINFL_STATUS_DONE) { - // Make sure the entire file was decompressed, and check its CRC. - if ((out_buf_ofs != file_stat.m_uncomp_size) || - (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, - (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32)) - status = TINFL_STATUS_FAILED; - } - - if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf)) - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - - return status == TINFL_STATUS_DONE; -} - -mz_bool mz_zip_reader_extract_file_to_mem_no_alloc( - mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, - mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { - int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); - if (file_index < 0) return MZ_FALSE; - return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, - flags, pUser_read_buf, - user_read_buf_size); -} - -mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, - void *pBuf, size_t buf_size, - mz_uint flags) { - return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, - flags, NULL, 0); -} - -mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, - const char *pFilename, void *pBuf, - size_t buf_size, mz_uint flags) { - return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf, - buf_size, flags, NULL, 0); -} - -void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, - size_t *pSize, mz_uint flags) { - mz_uint64 comp_size, uncomp_size, alloc_size; - const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); - void *pBuf; - - if (pSize) *pSize = 0; - if (!p) return NULL; - - comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); - - alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size; -#ifdef _MSC_VER - if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) -#else - if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) -#endif - return NULL; - if (NULL == - (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size))) - return NULL; - - if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size, - flags)) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - return NULL; - } - - if (pSize) *pSize = (size_t)alloc_size; - return pBuf; -} - -void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, - const char *pFilename, size_t *pSize, - mz_uint flags) { - int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); - if (file_index < 0) { - if (pSize) *pSize = 0; - return MZ_FALSE; - } - return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); -} - -mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, - mz_uint file_index, - mz_file_write_func pCallback, - void *pOpaque, mz_uint flags) { - int status = TINFL_STATUS_DONE; - mz_uint file_crc32 = MZ_CRC32_INIT; - mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, - out_buf_ofs = 0, cur_file_ofs; - mz_zip_archive_file_stat file_stat; - void *pRead_buf = NULL; - void *pWrite_buf = NULL; - mz_uint32 - local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / - sizeof(mz_uint32)]; - mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; - - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; - - // Empty file, or a directory (but not always a directory - I've seen odd zips - // with directories that have compressed data which inflates to 0 bytes) - if (!file_stat.m_comp_size) return MZ_TRUE; - - // Entry is a subdirectory (I've seen old zips with dir entries which have - // compressed deflate data which inflates to 0 bytes, but these entries claim - // to uncompress to 512 bytes in the headers). - // I'm torn how to handle this case - should it fail instead? - if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE; - - // Encryption and patch files are not supported. - if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE; - - // This function only supports stored and deflate. - if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && - (file_stat.m_method != MZ_DEFLATED)) - return MZ_FALSE; - - // Read and parse the local directory entry. - cur_file_ofs = file_stat.m_local_header_ofs; - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) - return MZ_FALSE; - if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) - return MZ_FALSE; - - cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + - MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); - if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) - return MZ_FALSE; - - // Decompress the file either directly from memory or from a file input - // buffer. - if (pZip->m_pState->m_pMem) { - pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; - read_buf_size = read_buf_avail = file_stat.m_comp_size; - comp_remaining = 0; - } else { - read_buf_size = - MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); - if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, - (size_t)read_buf_size))) - return MZ_FALSE; - read_buf_avail = 0; - comp_remaining = file_stat.m_comp_size; - } - - if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { - // The file is stored or the caller has requested the compressed data. - if (pZip->m_pState->m_pMem) { -#ifdef _MSC_VER - if (((0, sizeof(size_t) == sizeof(mz_uint32))) && - (file_stat.m_comp_size > 0xFFFFFFFF)) -#else - if (((sizeof(size_t) == sizeof(mz_uint32))) && - (file_stat.m_comp_size > 0xFFFFFFFF)) -#endif - return MZ_FALSE; - if (pCallback(pOpaque, out_buf_ofs, pRead_buf, - (size_t)file_stat.m_comp_size) != file_stat.m_comp_size) - status = TINFL_STATUS_FAILED; - else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) - file_crc32 = - (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, - (size_t)file_stat.m_comp_size); - cur_file_ofs += file_stat.m_comp_size; - out_buf_ofs += file_stat.m_comp_size; - comp_remaining = 0; - } else { - while (comp_remaining) { - read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, - (size_t)read_buf_avail) != read_buf_avail) { - status = TINFL_STATUS_FAILED; - break; - } - - if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) - file_crc32 = (mz_uint32)mz_crc32( - file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail); - - if (pCallback(pOpaque, out_buf_ofs, pRead_buf, - (size_t)read_buf_avail) != read_buf_avail) { - status = TINFL_STATUS_FAILED; - break; - } - cur_file_ofs += read_buf_avail; - out_buf_ofs += read_buf_avail; - comp_remaining -= read_buf_avail; - } - } - } else { - tinfl_decompressor inflator; - tinfl_init(&inflator); - - if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, - TINFL_LZ_DICT_SIZE))) - status = TINFL_STATUS_FAILED; - else { - do { - mz_uint8 *pWrite_buf_cur = - (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); - size_t in_buf_size, - out_buf_size = - TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); - if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { - read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, - (size_t)read_buf_avail) != read_buf_avail) { - status = TINFL_STATUS_FAILED; - break; - } - cur_file_ofs += read_buf_avail; - comp_remaining -= read_buf_avail; - read_buf_ofs = 0; - } - - in_buf_size = (size_t)read_buf_avail; - status = tinfl_decompress( - &inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, - (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size, - comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); - read_buf_avail -= in_buf_size; - read_buf_ofs += in_buf_size; - - if (out_buf_size) { - if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != - out_buf_size) { - status = TINFL_STATUS_FAILED; - break; - } - file_crc32 = - (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size); - if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) { - status = TINFL_STATUS_FAILED; - break; - } - } - } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) || - (status == TINFL_STATUS_HAS_MORE_OUTPUT)); - } - } - - if ((status == TINFL_STATUS_DONE) && - (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) { - // Make sure the entire file was decompressed, and check its CRC. - if ((out_buf_ofs != file_stat.m_uncomp_size) || - (file_crc32 != file_stat.m_crc32)) - status = TINFL_STATUS_FAILED; - } - - if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); - - return status == TINFL_STATUS_DONE; -} - -mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, - const char *pFilename, - mz_file_write_func pCallback, - void *pOpaque, mz_uint flags) { - int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); - if (file_index < 0) return MZ_FALSE; - return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, - flags); -} - -#ifndef MINIZ_NO_STDIO -static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, - const void *pBuf, size_t n) { - (void)ofs; - return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque); -} - -mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, - const char *pDst_filename, - mz_uint flags) { - mz_bool status; - mz_zip_archive_file_stat file_stat; - MZ_FILE *pFile; - if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; - pFile = MZ_FOPEN(pDst_filename, "wb"); - if (!pFile) return MZ_FALSE; - status = mz_zip_reader_extract_to_callback( - pZip, file_index, mz_zip_file_write_callback, pFile, flags); - if (MZ_FCLOSE(pFile) == EOF) return MZ_FALSE; -#ifndef MINIZ_NO_TIME - if (status) - mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); -#endif - return status; -} -#endif // #ifndef MINIZ_NO_STDIO - -mz_bool mz_zip_reader_end(mz_zip_archive *pZip) { - if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || - (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) - return MZ_FALSE; - - if (pZip->m_pState) { - mz_zip_internal_state *pState = pZip->m_pState; - pZip->m_pState = NULL; - mz_zip_array_clear(pZip, &pState->m_central_dir); - mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); - mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); - -#ifndef MINIZ_NO_STDIO - if (pState->m_pFile) { - MZ_FCLOSE(pState->m_pFile); - pState->m_pFile = NULL; - } -#endif // #ifndef MINIZ_NO_STDIO - - pZip->m_pFree(pZip->m_pAlloc_opaque, pState); - } - pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; - - return MZ_TRUE; -} - -#ifndef MINIZ_NO_STDIO -mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, - const char *pArchive_filename, - const char *pDst_filename, - mz_uint flags) { - int file_index = - mz_zip_reader_locate_file(pZip, pArchive_filename, NULL, flags); - if (file_index < 0) return MZ_FALSE; - return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); -} -#endif - -// ------------------- .ZIP archive writing - -#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS - -static void mz_write_le16(mz_uint8 *p, mz_uint16 v) { - p[0] = (mz_uint8)v; - p[1] = (mz_uint8)(v >> 8); -} -static void mz_write_le32(mz_uint8 *p, mz_uint32 v) { - p[0] = (mz_uint8)v; - p[1] = (mz_uint8)(v >> 8); - p[2] = (mz_uint8)(v >> 16); - p[3] = (mz_uint8)(v >> 24); -} -#define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v)) -#define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v)) - -mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) { - if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) || - (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) - return MZ_FALSE; - - if (pZip->m_file_offset_alignment) { - // Ensure user specified file offset alignment is a power of 2. - if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1)) - return MZ_FALSE; - } - - if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; - if (!pZip->m_pFree) pZip->m_pFree = def_free_func; - if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; - - pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; - pZip->m_archive_size = existing_size; - pZip->m_central_directory_file_ofs = 0; - pZip->m_total_files = 0; - - if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) - return MZ_FALSE; - memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, - sizeof(mz_uint8)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, - sizeof(mz_uint32)); - MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, - sizeof(mz_uint32)); - return MZ_TRUE; -} - -static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, - const void *pBuf, size_t n) { - mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; - mz_zip_internal_state *pState = pZip->m_pState; - mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size); -#ifdef _MSC_VER - if ((!n) || - ((0, sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF))) -#else - if ((!n) || - ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF))) -#endif - return 0; - if (new_size > pState->m_mem_capacity) { - void *pNew_block; - size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); - while (new_capacity < new_size) new_capacity *= 2; - if (NULL == (pNew_block = pZip->m_pRealloc( - pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) - return 0; - pState->m_pMem = pNew_block; - pState->m_mem_capacity = new_capacity; - } - memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n); - pState->m_mem_size = (size_t)new_size; - return n; -} - -mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, - size_t size_to_reserve_at_beginning, - size_t initial_allocation_size) { - pZip->m_pWrite = mz_zip_heap_write_func; - pZip->m_pIO_opaque = pZip; - if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE; - if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, - size_to_reserve_at_beginning))) { - if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, initial_allocation_size))) { - mz_zip_writer_end(pZip); - return MZ_FALSE; - } - pZip->m_pState->m_mem_capacity = initial_allocation_size; - } - return MZ_TRUE; -} - -#ifndef MINIZ_NO_STDIO -static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, - const void *pBuf, size_t n) { - mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; - mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); - if (((mz_int64)file_ofs < 0) || - (((cur_ofs != (mz_int64)file_ofs)) && - (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) - return 0; - return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile); -} - -mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, - mz_uint64 size_to_reserve_at_beginning) { - MZ_FILE *pFile; - pZip->m_pWrite = mz_zip_file_write_func; - pZip->m_pIO_opaque = pZip; - if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE; - if (NULL == (pFile = MZ_FOPEN(pFilename, "wb"))) { - mz_zip_writer_end(pZip); - return MZ_FALSE; - } - pZip->m_pState->m_pFile = pFile; - if (size_to_reserve_at_beginning) { - mz_uint64 cur_ofs = 0; - char buf[4096]; - MZ_CLEAR_OBJ(buf); - do { - size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning); - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) { - mz_zip_writer_end(pZip); - return MZ_FALSE; - } - cur_ofs += n; - size_to_reserve_at_beginning -= n; - } while (size_to_reserve_at_beginning); - } - return MZ_TRUE; -} -#endif // #ifndef MINIZ_NO_STDIO - -mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, - const char *pFilename) { - mz_zip_internal_state *pState; - if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) - return MZ_FALSE; - // No sense in trying to write to an archive that's already at the support max - // size - if ((pZip->m_total_files == 0xFFFF) || - ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > 0xFFFFFFFF)) - return MZ_FALSE; - - pState = pZip->m_pState; - - if (pState->m_pFile) { -#ifdef MINIZ_NO_STDIO - pFilename; - return MZ_FALSE; -#else - // Archive is being read from stdio - try to reopen as writable. - if (pZip->m_pIO_opaque != pZip) return MZ_FALSE; - if (!pFilename) return MZ_FALSE; - pZip->m_pWrite = mz_zip_file_write_func; - if (NULL == - (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) { - // The mz_zip_archive is now in a bogus state because pState->m_pFile is - // NULL, so just close it. - mz_zip_reader_end(pZip); - return MZ_FALSE; - } -#endif // #ifdef MINIZ_NO_STDIO - } else if (pState->m_pMem) { - // Archive lives in a memory block. Assume it's from the heap that we can - // resize using the realloc callback. - if (pZip->m_pIO_opaque != pZip) return MZ_FALSE; - pState->m_mem_capacity = pState->m_mem_size; - pZip->m_pWrite = mz_zip_heap_write_func; - } - // Archive is being read via a user provided read function - make sure the - // user has specified a write function too. - else if (!pZip->m_pWrite) - return MZ_FALSE; - - // Start writing new files at the archive's current central directory - // location. - pZip->m_archive_size = pZip->m_central_directory_file_ofs; - pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; - pZip->m_central_directory_file_ofs = 0; - - return MZ_TRUE; -} - -mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, - const void *pBuf, size_t buf_size, - mz_uint level_and_flags) { - return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0, - level_and_flags, 0, 0); -} - -typedef struct { - mz_zip_archive *m_pZip; - mz_uint64 m_cur_archive_file_ofs; - mz_uint64 m_comp_size; -} mz_zip_writer_add_state; - -static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len, - void *pUser) { - mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser; - if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque, - pState->m_cur_archive_file_ofs, pBuf, - len) != len) - return MZ_FALSE; - pState->m_cur_archive_file_ofs += len; - pState->m_comp_size += len; - return MZ_TRUE; -} - -static mz_bool mz_zip_writer_create_local_dir_header( - mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, - mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, - mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, - mz_uint16 dos_time, mz_uint16 dos_date) { - (void)pZip; - memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE); - MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date); - MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32); - MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, comp_size); - MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, uncomp_size); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size); - MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size); - return MZ_TRUE; -} - -static mz_bool mz_zip_writer_create_central_dir_header( - mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, - mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size, - mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, - mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, - mz_uint64 local_header_ofs, mz_uint32 ext_attributes) { - (void)pZip; - memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, comp_size); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, uncomp_size); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size); - MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes); - MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_header_ofs); - return MZ_TRUE; -} - -static mz_bool mz_zip_writer_add_to_central_dir( - mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, - const void *pExtra, mz_uint16 extra_size, const void *pComment, - mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, - mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, - mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, - mz_uint32 ext_attributes) { - mz_zip_internal_state *pState = pZip->m_pState; - mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size; - size_t orig_central_dir_size = pState->m_central_dir.m_size; - mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; - - // No zip64 support yet - if ((local_header_ofs > 0xFFFFFFFF) || - (((mz_uint64)pState->m_central_dir.m_size + - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size + - comment_size) > 0xFFFFFFFF)) - return MZ_FALSE; - - if (!mz_zip_writer_create_central_dir_header( - pZip, central_dir_header, filename_size, extra_size, comment_size, - uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, - dos_date, local_header_ofs, ext_attributes)) - return MZ_FALSE; - - if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) || - (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename, - filename_size)) || - (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra, - extra_size)) || - (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment, - comment_size)) || - (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, - ¢ral_dir_ofs, 1))) { - // Try to push the central directory array back into its original state. - mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, - MZ_FALSE); - return MZ_FALSE; - } - - return MZ_TRUE; -} - -static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) { - // Basic ZIP archive filename validity checks: Valid filenames cannot start - // with a forward slash, cannot contain a drive letter, and cannot use - // DOS-style backward slashes. - if (*pArchive_name == '/') return MZ_FALSE; - while (*pArchive_name) { - if ((*pArchive_name == '\\') || (*pArchive_name == ':')) return MZ_FALSE; - pArchive_name++; - } - return MZ_TRUE; -} - -static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment( - mz_zip_archive *pZip) { - mz_uint32 n; - if (!pZip->m_file_offset_alignment) return 0; - n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); - return (pZip->m_file_offset_alignment - n) & - (pZip->m_file_offset_alignment - 1); -} - -static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, - mz_uint64 cur_file_ofs, mz_uint32 n) { - char buf[4096]; - memset(buf, 0, MZ_MIN(sizeof(buf), n)); - while (n) { - mz_uint32 s = MZ_MIN(sizeof(buf), n); - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s) - return MZ_FALSE; - cur_file_ofs += s; - n -= s; - } - return MZ_TRUE; -} - -mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, - const char *pArchive_name, const void *pBuf, - size_t buf_size, const void *pComment, - mz_uint16 comment_size, - mz_uint level_and_flags, mz_uint64 uncomp_size, - mz_uint32 uncomp_crc32) { - mz_uint16 method = 0, dos_time = 0, dos_date = 0; - mz_uint level, ext_attributes = 0, num_alignment_padding_bytes; - mz_uint64 local_dir_header_ofs = pZip->m_archive_size, - cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0; - size_t archive_name_size; - mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; - tdefl_compressor *pComp = NULL; - mz_bool store_data_uncompressed; - mz_zip_internal_state *pState; - - if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; - level = level_and_flags & 0xF; - store_data_uncompressed = - ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); - - if ((!pZip) || (!pZip->m_pState) || - (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) || - (!pArchive_name) || ((comment_size) && (!pComment)) || - (pZip->m_total_files == 0xFFFF) || (level > MZ_UBER_COMPRESSION)) - return MZ_FALSE; - - pState = pZip->m_pState; - - if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) - return MZ_FALSE; - // No zip64 support yet - if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; - -#ifndef MINIZ_NO_TIME - { - time_t cur_time; - time(&cur_time); - mz_zip_time_to_dos_time(cur_time, &dos_time, &dos_date); - } -#endif // #ifndef MINIZ_NO_TIME - - archive_name_size = strlen(pArchive_name); - if (archive_name_size > 0xFFFF) return MZ_FALSE; - - num_alignment_padding_bytes = - mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); - - // no zip64 support yet - if ((pZip->m_total_files == 0xFFFF) || - ((pZip->m_archive_size + num_alignment_padding_bytes + - MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - comment_size + archive_name_size) > 0xFFFFFFFF)) - return MZ_FALSE; - - if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) { - // Set DOS Subdirectory attribute bit. - ext_attributes |= 0x10; - // Subdirectories cannot contain data. - if ((buf_size) || (uncomp_size)) return MZ_FALSE; - } - - // Try to do any allocations before writing to the archive, so if an - // allocation fails the file remains unmodified. (A good idea if we're doing - // an in-place modification.) - if ((!mz_zip_array_ensure_room( - pZip, &pState->m_central_dir, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size)) || - (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) - return MZ_FALSE; - - if ((!store_data_uncompressed) && (buf_size)) { - if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)))) - return MZ_FALSE; - } - - if (!mz_zip_writer_write_zeros( - pZip, cur_archive_file_ofs, - num_alignment_padding_bytes + sizeof(local_dir_header))) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - return MZ_FALSE; - } - local_dir_header_ofs += num_alignment_padding_bytes; - if (pZip->m_file_offset_alignment) { - MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == - 0); - } - cur_archive_file_ofs += - num_alignment_padding_bytes + sizeof(local_dir_header); - - MZ_CLEAR_OBJ(local_dir_header); - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, - archive_name_size) != archive_name_size) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - return MZ_FALSE; - } - cur_archive_file_ofs += archive_name_size; - - if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { - uncomp_crc32 = - (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size); - uncomp_size = buf_size; - if (uncomp_size <= 3) { - level = 0; - store_data_uncompressed = MZ_TRUE; - } - } - - if (store_data_uncompressed) { - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf, - buf_size) != buf_size) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - return MZ_FALSE; - } - - cur_archive_file_ofs += buf_size; - comp_size = buf_size; - - if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) method = MZ_DEFLATED; - } else if (buf_size) { - mz_zip_writer_add_state state; - - state.m_pZip = pZip; - state.m_cur_archive_file_ofs = cur_archive_file_ofs; - state.m_comp_size = 0; - - if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, - tdefl_create_comp_flags_from_zip_params( - level, -15, MZ_DEFAULT_STRATEGY)) != - TDEFL_STATUS_OKAY) || - (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) != - TDEFL_STATUS_DONE)) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - return MZ_FALSE; - } - - comp_size = state.m_comp_size; - cur_archive_file_ofs = state.m_cur_archive_file_ofs; - - method = MZ_DEFLATED; - } - - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - pComp = NULL; - - // no zip64 support yet - if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF)) - return MZ_FALSE; - - if (!mz_zip_writer_create_local_dir_header( - pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size, - comp_size, uncomp_crc32, method, 0, dos_time, dos_date)) - return MZ_FALSE; - - if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, - sizeof(local_dir_header)) != sizeof(local_dir_header)) - return MZ_FALSE; - - if (!mz_zip_writer_add_to_central_dir( - pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment, - comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0, - dos_time, dos_date, local_dir_header_ofs, ext_attributes)) - return MZ_FALSE; - - pZip->m_total_files++; - pZip->m_archive_size = cur_archive_file_ofs; - - return MZ_TRUE; -} - -#ifndef MINIZ_NO_STDIO -mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, - const char *pSrc_filename, const void *pComment, - mz_uint16 comment_size, - mz_uint level_and_flags) { - mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes; - mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0; - mz_uint64 local_dir_header_ofs = pZip->m_archive_size, - cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0, - comp_size = 0; - size_t archive_name_size; - mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; - MZ_FILE *pSrc_file = NULL; - - if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; - level = level_and_flags & 0xF; - - if ((!pZip) || (!pZip->m_pState) || - (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || - ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) - return MZ_FALSE; - if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; - - archive_name_size = strlen(pArchive_name); - if (archive_name_size > 0xFFFF) return MZ_FALSE; - - num_alignment_padding_bytes = - mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); - - // no zip64 support yet - if ((pZip->m_total_files == 0xFFFF) || - ((pZip->m_archive_size + num_alignment_padding_bytes + - MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - comment_size + archive_name_size) > 0xFFFFFFFF)) - return MZ_FALSE; - - if (!mz_zip_get_file_modified_time(pSrc_filename, &dos_time, &dos_date)) - return MZ_FALSE; - - pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); - if (!pSrc_file) return MZ_FALSE; - MZ_FSEEK64(pSrc_file, 0, SEEK_END); - uncomp_size = MZ_FTELL64(pSrc_file); - MZ_FSEEK64(pSrc_file, 0, SEEK_SET); - - if (uncomp_size > 0xFFFFFFFF) { - // No zip64 support yet - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - if (uncomp_size <= 3) level = 0; - - if (!mz_zip_writer_write_zeros( - pZip, cur_archive_file_ofs, - num_alignment_padding_bytes + sizeof(local_dir_header))) { - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - local_dir_header_ofs += num_alignment_padding_bytes; - if (pZip->m_file_offset_alignment) { - MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == - 0); - } - cur_archive_file_ofs += - num_alignment_padding_bytes + sizeof(local_dir_header); - - MZ_CLEAR_OBJ(local_dir_header); - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, - archive_name_size) != archive_name_size) { - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - cur_archive_file_ofs += archive_name_size; - - if (uncomp_size) { - mz_uint64 uncomp_remaining = uncomp_size; - void *pRead_buf = - pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE); - if (!pRead_buf) { - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - - if (!level) { - while (uncomp_remaining) { - mz_uint n = - (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); - if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) || - (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, - n) != n)) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - uncomp_crc32 = - (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); - uncomp_remaining -= n; - cur_archive_file_ofs += n; - } - comp_size = uncomp_size; - } else { - mz_bool result = MZ_FALSE; - mz_zip_writer_add_state state; - tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)); - if (!pComp) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - - state.m_pZip = pZip; - state.m_cur_archive_file_ofs = cur_archive_file_ofs; - state.m_comp_size = 0; - - if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, - tdefl_create_comp_flags_from_zip_params( - level, -15, MZ_DEFAULT_STRATEGY)) != - TDEFL_STATUS_OKAY) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - - for (;;) { - size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining, - (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE); - tdefl_status status; - - if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size) - break; - - uncomp_crc32 = (mz_uint32)mz_crc32( - uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size); - uncomp_remaining -= in_buf_size; - - status = tdefl_compress_buffer( - pComp, pRead_buf, in_buf_size, - uncomp_remaining ? TDEFL_NO_FLUSH : TDEFL_FINISH); - if (status == TDEFL_STATUS_DONE) { - result = MZ_TRUE; - break; - } else if (status != TDEFL_STATUS_OKAY) - break; - } - - pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); - - if (!result) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - MZ_FCLOSE(pSrc_file); - return MZ_FALSE; - } - - comp_size = state.m_comp_size; - cur_archive_file_ofs = state.m_cur_archive_file_ofs; - - method = MZ_DEFLATED; - } - - pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); - } - - MZ_FCLOSE(pSrc_file); - pSrc_file = NULL; - - // no zip64 support yet - if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF)) - return MZ_FALSE; - - if (!mz_zip_writer_create_local_dir_header( - pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size, - comp_size, uncomp_crc32, method, 0, dos_time, dos_date)) - return MZ_FALSE; - - if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, - sizeof(local_dir_header)) != sizeof(local_dir_header)) - return MZ_FALSE; - - if (!mz_zip_writer_add_to_central_dir( - pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment, - comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0, - dos_time, dos_date, local_dir_header_ofs, ext_attributes)) - return MZ_FALSE; - - pZip->m_total_files++; - pZip->m_archive_size = cur_archive_file_ofs; - - return MZ_TRUE; -} -#endif // #ifndef MINIZ_NO_STDIO - -mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, - mz_zip_archive *pSource_zip, - mz_uint file_index) { - mz_uint n, bit_flags, num_alignment_padding_bytes; - mz_uint64 comp_bytes_remaining, local_dir_header_ofs; - mz_uint64 cur_src_file_ofs, cur_dst_file_ofs; - mz_uint32 - local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / - sizeof(mz_uint32)]; - mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; - mz_uint8 central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; - size_t orig_central_dir_size; - mz_zip_internal_state *pState; - void *pBuf; - const mz_uint8 *pSrc_central_header; - - if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) - return MZ_FALSE; - if (NULL == - (pSrc_central_header = mz_zip_reader_get_cdh(pSource_zip, file_index))) - return MZ_FALSE; - pState = pZip->m_pState; - - num_alignment_padding_bytes = - mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); - - // no zip64 support yet - if ((pZip->m_total_files == 0xFFFF) || - ((pZip->m_archive_size + num_alignment_padding_bytes + - MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > - 0xFFFFFFFF)) - return MZ_FALSE; - - cur_src_file_ofs = - MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS); - cur_dst_file_ofs = pZip->m_archive_size; - - if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, - pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) - return MZ_FALSE; - if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) - return MZ_FALSE; - cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; - - if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs, - num_alignment_padding_bytes)) - return MZ_FALSE; - cur_dst_file_ofs += num_alignment_padding_bytes; - local_dir_header_ofs = cur_dst_file_ofs; - if (pZip->m_file_offset_alignment) { - MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == - 0); - } - - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header, - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != - MZ_ZIP_LOCAL_DIR_HEADER_SIZE) - return MZ_FALSE; - cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; - - n = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); - comp_bytes_remaining = - n + MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - - if (NULL == (pBuf = pZip->m_pAlloc( - pZip->m_pAlloc_opaque, 1, - (size_t)MZ_MAX(sizeof(mz_uint32) * 4, - MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, - comp_bytes_remaining))))) - return MZ_FALSE; - - while (comp_bytes_remaining) { - n = (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, comp_bytes_remaining); - if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, - n) != n) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - return MZ_FALSE; - } - cur_src_file_ofs += n; - - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - return MZ_FALSE; - } - cur_dst_file_ofs += n; - - comp_bytes_remaining -= n; - } - - bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); - if (bit_flags & 8) { - // Copy data descriptor - if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, - sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - return MZ_FALSE; - } - - n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == 0x08074b50) ? 4 : 3); - if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - return MZ_FALSE; - } - - cur_src_file_ofs += n; - cur_dst_file_ofs += n; - } - pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); - - // no zip64 support yet - if (cur_dst_file_ofs > 0xFFFFFFFF) return MZ_FALSE; - - orig_central_dir_size = pState->m_central_dir.m_size; - - memcpy(central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); - MZ_WRITE_LE32(central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, - local_dir_header_ofs); - if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_header, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) - return MZ_FALSE; - - n = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS) + - MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS); - if (!mz_zip_array_push_back( - pZip, &pState->m_central_dir, - pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n)) { - mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, - MZ_FALSE); - return MZ_FALSE; - } - - if (pState->m_central_dir.m_size > 0xFFFFFFFF) return MZ_FALSE; - n = (mz_uint32)orig_central_dir_size; - if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) { - mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, - MZ_FALSE); - return MZ_FALSE; - } - - pZip->m_total_files++; - pZip->m_archive_size = cur_dst_file_ofs; - - return MZ_TRUE; -} - -mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) { - mz_zip_internal_state *pState; - mz_uint64 central_dir_ofs, central_dir_size; - mz_uint8 hdr[MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE]; - - if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) - return MZ_FALSE; - - pState = pZip->m_pState; - - // no zip64 support yet - if ((pZip->m_total_files > 0xFFFF) || - ((pZip->m_archive_size + pState->m_central_dir.m_size + - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF)) - return MZ_FALSE; - - central_dir_ofs = 0; - central_dir_size = 0; - if (pZip->m_total_files) { - // Write central directory - central_dir_ofs = pZip->m_archive_size; - central_dir_size = pState->m_central_dir.m_size; - pZip->m_central_directory_file_ofs = central_dir_ofs; - if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs, - pState->m_central_dir.m_p, - (size_t)central_dir_size) != central_dir_size) - return MZ_FALSE; - pZip->m_archive_size += central_dir_size; - } - - // Write end of central directory record - MZ_CLEAR_OBJ(hdr); - MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS, - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG); - MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, - pZip->m_total_files); - MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files); - MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, central_dir_size); - MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, central_dir_ofs); - - if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, - sizeof(hdr)) != sizeof(hdr)) - return MZ_FALSE; -#ifndef MINIZ_NO_STDIO - if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return MZ_FALSE; -#endif // #ifndef MINIZ_NO_STDIO - - pZip->m_archive_size += sizeof(hdr); - - pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED; - return MZ_TRUE; -} - -mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, - size_t *pSize) { - if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) return MZ_FALSE; - if (pZip->m_pWrite != mz_zip_heap_write_func) return MZ_FALSE; - if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE; - - *pBuf = pZip->m_pState->m_pMem; - *pSize = pZip->m_pState->m_mem_size; - pZip->m_pState->m_pMem = NULL; - pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0; - return MZ_TRUE; -} - -mz_bool mz_zip_writer_end(mz_zip_archive *pZip) { - mz_zip_internal_state *pState; - mz_bool status = MZ_TRUE; - if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || - ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) && - (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) - return MZ_FALSE; - - pState = pZip->m_pState; - pZip->m_pState = NULL; - mz_zip_array_clear(pZip, &pState->m_central_dir); - mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); - mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); - -#ifndef MINIZ_NO_STDIO - if (pState->m_pFile) { - MZ_FCLOSE(pState->m_pFile); - pState->m_pFile = NULL; - } -#endif // #ifndef MINIZ_NO_STDIO - - if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) { - pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); - pState->m_pMem = NULL; - } - - pZip->m_pFree(pZip->m_pAlloc_opaque, pState); - pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; - return status; -} - -#ifndef MINIZ_NO_STDIO -mz_bool mz_zip_add_mem_to_archive_file_in_place( - const char *pZip_filename, const char *pArchive_name, const void *pBuf, - size_t buf_size, const void *pComment, mz_uint16 comment_size, - mz_uint level_and_flags) { - mz_bool status, created_new_archive = MZ_FALSE; - mz_zip_archive zip_archive; - struct MZ_FILE_STAT_STRUCT file_stat; - MZ_CLEAR_OBJ(zip_archive); - if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; - if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || - ((comment_size) && (!pComment)) || - ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) - return MZ_FALSE; - if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE; - if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) { - // Create a new archive. - if (!mz_zip_writer_init_file(&zip_archive, pZip_filename, 0)) - return MZ_FALSE; - created_new_archive = MZ_TRUE; - } else { - // Append to an existing archive. - if (!mz_zip_reader_init_file( - &zip_archive, pZip_filename, - level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) - return MZ_FALSE; - if (!mz_zip_writer_init_from_reader(&zip_archive, pZip_filename)) { - mz_zip_reader_end(&zip_archive); - return MZ_FALSE; - } - } - status = - mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, - pComment, comment_size, level_and_flags, 0, 0); - // Always finalize, even if adding failed for some reason, so we have a valid - // central directory. (This may not always succeed, but we can try.) - if (!mz_zip_writer_finalize_archive(&zip_archive)) status = MZ_FALSE; - if (!mz_zip_writer_end(&zip_archive)) status = MZ_FALSE; - if ((!status) && (created_new_archive)) { - // It's a new archive and something went wrong, so just delete it. - int ignoredStatus = MZ_DELETE_FILE(pZip_filename); - (void)ignoredStatus; - } - return status; -} - -void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, - const char *pArchive_name, - size_t *pSize, mz_uint flags) { - int file_index; - mz_zip_archive zip_archive; - void *p = NULL; - - if (pSize) *pSize = 0; - - if ((!pZip_filename) || (!pArchive_name)) return NULL; - - MZ_CLEAR_OBJ(zip_archive); - if (!mz_zip_reader_init_file( - &zip_archive, pZip_filename, - flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) - return NULL; - - if ((file_index = mz_zip_reader_locate_file(&zip_archive, pArchive_name, NULL, - flags)) >= 0) - p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags); - - mz_zip_reader_end(&zip_archive); - return p; -} - -#endif // #ifndef MINIZ_NO_STDIO - -#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS - -#endif // #ifndef MINIZ_NO_ARCHIVE_APIS - -#ifdef __cplusplus -} -#endif - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#endif // MINIZ_HEADER_FILE_ONLY - -/* - This is free and unencumbered software released into the public domain. - - Anyone is free to copy, modify, publish, use, compile, sell, or - distribute this software, either in source code form or as a compiled - binary, for any purpose, commercial or non-commercial, and by any - means. - - In jurisdictions that recognize copyright laws, the author or authors - of this software dedicate any and all copyright interest in the - software to the public domain. We make this dedication for the benefit - of the public at large and to the detriment of our heirs and - successors. We intend this dedication to be an overt act of - relinquishment in perpetuity of all present and future rights to this - software under copyright law. - - 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 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. - - For more information, please refer to <http://unlicense.org/> -*/ - -// ---------------------- end of miniz ---------------------------------------- - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -} // namespace miniz -#else - -// Reuse MINIZ_LITTE_ENDIAN macro - -#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \ - defined(__i386) || defined(__i486__) || defined(__i486) || \ - defined(i386) || defined(__ia64__) || defined(__x86_64__) -// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. -#define MINIZ_X86_OR_X64_CPU 1 -#endif - -#if defined(__sparcv9) -// Big endian -#else -#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU -// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. -#define MINIZ_LITTLE_ENDIAN 1 -#endif -#endif - -#endif // TINYEXR_USE_MINIZ - // static bool IsBigEndian(void) { // union { // unsigned int i; @@ -7079,7 +684,7 @@ static void cpy2(unsigned short *dst_val, const unsigned short *src_val) { } static void swap2(unsigned short *val) { -#ifdef MINIZ_LITTLE_ENDIAN +#ifdef TINYEXR_LITTLE_ENDIAN (void)val; #else unsigned short tmp = *val; @@ -7138,7 +743,7 @@ static void cpy4(float *dst_val, const float *src_val) { #endif static void swap4(unsigned int *val) { -#ifdef MINIZ_LITTLE_ENDIAN +#ifdef TINYEXR_LITTLE_ENDIAN (void)val; #else unsigned int tmp = *val; @@ -7153,7 +758,7 @@ static void swap4(unsigned int *val) { } static void swap4(int *val) { -#ifdef MINIZ_LITTLE_ENDIAN +#ifdef TINYEXR_LITTLE_ENDIAN (void)val; #else int tmp = *val; @@ -7168,7 +773,7 @@ static void swap4(int *val) { } static void swap4(float *val) { -#ifdef MINIZ_LITTLE_ENDIAN +#ifdef TINYEXR_LITTLE_ENDIAN (void)val; #else float tmp = *val; @@ -7199,7 +804,7 @@ static void cpy8(tinyexr::tinyexr_uint64 *dst_val, const tinyexr::tinyexr_uint64 #endif static void swap8(tinyexr::tinyexr_uint64 *val) { -#ifdef MINIZ_LITTLE_ENDIAN +#ifdef TINYEXR_LITTLE_ENDIAN (void)val; #else tinyexr::tinyexr_uint64 tmp = (*val); @@ -7218,12 +823,11 @@ static void swap8(tinyexr::tinyexr_uint64 *val) { } // https://gist.github.com/rygorous/2156668 -// Reuse MINIZ_LITTLE_ENDIAN flag from miniz. union FP32 { unsigned int u; float f; struct { -#if MINIZ_LITTLE_ENDIAN +#if TINYEXR_LITTLE_ENDIAN unsigned int Mantissa : 23; unsigned int Exponent : 8; unsigned int Sign : 1; @@ -7243,7 +847,7 @@ union FP32 { union FP16 { unsigned short u; struct { -#if MINIZ_LITTLE_ENDIAN +#if TINYEXR_LITTLE_ENDIAN unsigned int Mantissa : 10; unsigned int Exponent : 5; unsigned int Sign : 1; @@ -7351,7 +955,7 @@ static const char *ReadString(std::string *s, const char *ptr, size_t len) { } if (size_t(q - ptr) >= len) { - (*s) = std::string(); + (*s).clear(); return NULL; } @@ -7438,6 +1042,7 @@ static void WriteAttributeToMemory(std::vector<unsigned char> *out, typedef struct { std::string name; // less than 255 bytes long int pixel_type; + int requested_pixel_type; int x_sampling; int y_sampling; unsigned char p_linear; @@ -7465,6 +1070,7 @@ struct HeaderInfo { int chunk_count; // Tiled format + int tiled; // Non-zero if the part is tiled. int tile_size_x; int tile_size_y; int tile_level_mode; @@ -7474,6 +1080,11 @@ struct HeaderInfo { int compression_type; + // required for multi-part or non-image files + std::string name; + // required for multi-part or non-image files + std::string type; + void clear() { channels.clear(); attributes.clear(); @@ -7495,6 +1106,7 @@ struct HeaderInfo { chunk_count = 0; // Tiled format + tiled = 0; tile_size_x = 0; tile_size_y = 0; tile_level_mode = 0; @@ -7502,6 +1114,9 @@ struct HeaderInfo { header_len = 0; compression_type = 0; + + name.clear(); + type.clear(); } }; @@ -7558,7 +1173,7 @@ static void WriteChannelInfo(std::vector<unsigned char> &data, // Calculate total size. for (size_t c = 0; c < channels.size(); c++) { - sz += strlen(channels[c].name.c_str()) + 1; // +1 for \0 + sz += channels[c].name.length() + 1; // +1 for \0 sz += 16; // 4 * int } data.resize(sz + 1); @@ -7566,12 +1181,12 @@ static void WriteChannelInfo(std::vector<unsigned char> &data, unsigned char *p = &data.at(0); for (size_t c = 0; c < channels.size(); c++) { - memcpy(p, channels[c].name.c_str(), strlen(channels[c].name.c_str())); - p += strlen(channels[c].name.c_str()); + memcpy(p, channels[c].name.c_str(), channels[c].name.length()); + p += channels[c].name.length(); (*p) = '\0'; p++; - int pixel_type = channels[c].pixel_type; + int pixel_type = channels[c].requested_pixel_type; int x_sampling = channels[c].x_sampling; int y_sampling = channels[c].y_sampling; tinyexr::swap4(&pixel_type); @@ -7650,11 +1265,11 @@ static void CompressZip(unsigned char *dst, // Compress the data using miniz // - miniz::mz_ulong outSize = miniz::mz_compressBound(src_size); - int ret = miniz::mz_compress( + mz_ulong outSize = mz_compressBound(src_size); + int ret = mz_compress( dst, &outSize, static_cast<const unsigned char *>(&tmpBuf.at(0)), src_size); - assert(ret == miniz::MZ_OK); + assert(ret == MZ_OK); (void)ret; compressedSize = outSize; @@ -7687,8 +1302,8 @@ static bool DecompressZip(unsigned char *dst, #if TINYEXR_USE_MINIZ int ret = - miniz::mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size); - if (miniz::MZ_OK != ret) { + mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size); + if (MZ_OK != ret) { return false; } #else @@ -8989,7 +2604,8 @@ static bool getCode(int po, int rlc, long long &c, int &lc, const char *&in, if (po == rlc) { if (lc < 8) { /* TinyEXR issue 78 */ - if ((in + 1) >= in_end) { + /* TinyEXR issue 160. in + 1 -> in */ + if (in >= in_end) { return false; } @@ -9332,7 +2948,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize, unsigned short minNonZero; unsigned short maxNonZero; -#if !MINIZ_LITTLE_ENDIAN +#if !TINYEXR_LITTLE_ENDIAN // @todo { PIZ compression on BigEndian architecture. } assert(0); return false; @@ -9355,7 +2971,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize, // cd.ys = c.channel().ySampling; size_t pixelSize = sizeof(int); // UINT and FLOAT - if (channelInfo[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + if (channelInfo[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) { pixelSize = sizeof(short); } @@ -9445,10 +3061,10 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize, } static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr, - size_t tmpBufSize, size_t inLen, int num_channels, + size_t tmpBufSizeInBytes, size_t inLen, int num_channels, const EXRChannelInfo *channels, int data_width, int num_lines) { - if (inLen == tmpBufSize) { + if (inLen == tmpBufSizeInBytes) { // Data is not compressed(Issue 40). memcpy(outPtr, inPtr, inLen); return true; @@ -9458,7 +3074,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr, unsigned short minNonZero; unsigned short maxNonZero; -#if !MINIZ_LITTLE_ENDIAN +#if !TINYEXR_LITTLE_ENDIAN // @todo { PIZ compression on BigEndian architecture. } assert(0); return false; @@ -9501,7 +3117,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr, return false; } - std::vector<unsigned short> tmpBuffer(tmpBufSize); + std::vector<unsigned short> tmpBuffer(tmpBufSizeInBytes / sizeof(unsigned short)); hufUncompress(reinterpret_cast<const char *>(ptr), length, &tmpBuffer); // @@ -9543,7 +3159,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr, // Expand the pixel data to their original range // - applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSize)); + applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSizeInBytes / sizeof(unsigned short))); for (int y = 0; y < num_lines; y++) { for (size_t i = 0; i < channelData.size(); ++i) { @@ -9802,6 +3418,9 @@ static bool CompressZfp(std::vector<unsigned char> *outBuf, // ----------------------------------------------------------------- // +// heuristics +#define TINYEXR_DIMENSION_THRESHOLD (1024 * 8192) + // TODO(syoyo): Refactor function arguments. static bool DecodePixelData(/* out */ unsigned char **out_images, const int *requested_pixel_types, @@ -10432,8 +4051,8 @@ static bool DecodeTiledPixelData( const EXRAttribute *attributes, size_t num_channels, const EXRChannelInfo *channels, const std::vector<size_t> &channel_offset_list) { - if (tile_size_x > data_width || tile_size_y > data_height || - tile_size_x * tile_offset_x > data_width || + // Here, data_width and data_height are the dimensions of the current (sub)level. + if (tile_size_x * tile_offset_x > data_width || tile_size_y * tile_offset_y > data_height) { return false; } @@ -10541,6 +4160,7 @@ static inline std::wstring UTF8ToWchar(const std::string &str) { } #endif + static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, const EXRVersion *version, std::string *err, const unsigned char *buf, size_t size) { @@ -10579,6 +4199,11 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, bool has_pixel_aspect_ratio = false; bool has_screen_window_center = false; bool has_screen_window_width = false; + bool has_name = false; + bool has_type = false; + + info->name.clear(); + info->type.clear(); info->data_window.min_x = 0; info->data_window.min_y = 0; @@ -10594,6 +4219,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, info->screen_window_width = -1.0f; info->pixel_aspect_ratio = -1.0f; + info->tiled = 0; info->tile_size_x = -1; info->tile_size_y = -1; info->tile_level_mode = -1; @@ -10628,7 +4254,8 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, marker += marker_size; size -= marker_size; - if (version->tiled && attr_name.compare("tiles") == 0) { + // For a multipart file, the version field 9th bit is 0. + if ((version->tiled || version->multipart || version->non_image) && attr_name.compare("tiles") == 0) { unsigned int x_size, y_size; unsigned char tile_mode; assert(data.size() == 9); @@ -10652,7 +4279,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, // mode = levelMode + roundingMode * 16 info->tile_level_mode = tile_mode & 0x3; info->tile_rounding_mode = (tile_mode >> 4) & 0x1; - + info->tiled = 1; } else if (attr_name.compare("compression") == 0) { bool ok = false; if (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ) { @@ -10771,6 +4398,22 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, memcpy(&info->chunk_count, &data.at(0), sizeof(int)); tinyexr::swap4(&info->chunk_count); } + } else if (attr_name.compare("name") == 0) { + if (!data.empty() && data[0]) { + data.push_back(0); + size_t len = strlen(reinterpret_cast<const char*>(&data[0])); + info->name.resize(len); + info->name.assign(reinterpret_cast<const char*>(&data[0]), len); + has_name = true; + } + } else if (attr_name.compare("type") == 0) { + if (!data.empty() && data[0]) { + data.push_back(0); + size_t len = strlen(reinterpret_cast<const char*>(&data[0])); + info->type.resize(len); + info->type.assign(reinterpret_cast<const char*>(&data[0]), len); + has_type = true; + } } else { // Custom attribute(up to TINYEXR_MAX_CUSTOM_ATTRIBUTES) if (info->attributes.size() < TINYEXR_MAX_CUSTOM_ATTRIBUTES) { @@ -10835,6 +4478,17 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header, << std::endl; } + if (version->multipart || version->non_image) { + if (!has_name) { + ss_err << "\"name\" attribute not found in the header." + << std::endl; + } + if (!has_type) { + ss_err << "\"type\" attribute not found in the header." + << std::endl; + } + } + if (!(ss_err.str().empty())) { if (err) { (*err) += ss_err.str(); @@ -10865,12 +4519,30 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) { exr_header->data_window.max_y = info.data_window.max_y; exr_header->line_order = info.line_order; exr_header->compression_type = info.compression_type; - + exr_header->tiled = info.tiled; exr_header->tile_size_x = info.tile_size_x; exr_header->tile_size_y = info.tile_size_y; exr_header->tile_level_mode = info.tile_level_mode; exr_header->tile_rounding_mode = info.tile_rounding_mode; + EXRSetNameAttr(exr_header, info.name.c_str()); + + if (!info.type.empty()) { + if (info.type == "scanlineimage") { + assert(!exr_header->tiled); + } else if (info.type == "tiledimage") { + assert(exr_header->tiled); + } else if (info.type == "deeptile") { + exr_header->non_image = 1; + assert(exr_header->tiled); + } else if (info.type == "deepscanline") { + exr_header->non_image = 1; + assert(!exr_header->tiled); + } else { + assert(false); + } + } + exr_header->num_channels = static_cast<int>(info.channels.size()); exr_header->channels = static_cast<EXRChannelInfo *>(malloc( @@ -10932,8 +4604,216 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) { exr_header->header_len = info.header_len; } +struct OffsetData { + OffsetData() : num_x_levels(0), num_y_levels(0) {} + std::vector<std::vector<std::vector <tinyexr::tinyexr_uint64> > > offsets; + int num_x_levels; + int num_y_levels; +}; + +int LevelIndex(int lx, int ly, int tile_level_mode, int num_x_levels) { + switch (tile_level_mode) { + case TINYEXR_TILE_ONE_LEVEL: + return 0; + + case TINYEXR_TILE_MIPMAP_LEVELS: + return lx; + + case TINYEXR_TILE_RIPMAP_LEVELS: + return lx + ly * num_x_levels; + + default: + assert(false); + } + return 0; +} + +static int LevelSize(int toplevel_size, int level, int tile_rounding_mode) { + assert(level >= 0); + + int b = (int)(1u << (unsigned)level); + int level_size = toplevel_size / b; + + if (tile_rounding_mode == TINYEXR_TILE_ROUND_UP && level_size * b < toplevel_size) + level_size += 1; + + return std::max(level_size, 1); +} + +static int DecodeTiledLevel(EXRImage* exr_image, const EXRHeader* exr_header, + const OffsetData& offset_data, + const std::vector<size_t>& channel_offset_list, + int pixel_data_size, + const unsigned char* head, const size_t size, + std::string* err) { + int num_channels = exr_header->num_channels; + + int level_index = LevelIndex(exr_image->level_x, exr_image->level_y, exr_header->tile_level_mode, offset_data.num_x_levels); + int num_y_tiles = (int)offset_data.offsets[level_index].size(); + assert(num_y_tiles); + int num_x_tiles = (int)offset_data.offsets[level_index][0].size(); + assert(num_x_tiles); + int num_tiles = num_x_tiles * num_y_tiles; + + int err_code = TINYEXR_SUCCESS; + + enum { + EF_SUCCESS = 0, + EF_INVALID_DATA = 1, + EF_INSUFFICIENT_DATA = 2, + EF_FAILED_TO_DECODE = 4 + }; +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::atomic<unsigned> error_flag(EF_SUCCESS); +#else + unsigned error_flag(EF_SUCCESS); +#endif + + // Although the spec says : "...the data window is subdivided into an array of smaller rectangles...", + // the IlmImf library allows the dimensions of the tile to be larger (or equal) than the dimensions of the data window. +#if 0 + if ((exr_header->tile_size_x > exr_image->width || exr_header->tile_size_y > exr_image->height) && + exr_image->level_x == 0 && exr_image->level_y == 0) { + if (err) { + (*err) += "Failed to decode tile data.\n"; + } + err_code = TINYEXR_ERROR_INVALID_DATA; + } +#endif + exr_image->tiles = static_cast<EXRTile*>( + calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles))); + +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::vector<std::thread> workers; + std::atomic<int> tile_count(0); + + int num_threads = std::max(1, int(std::thread::hardware_concurrency())); + if (num_threads > int(num_tiles)) { + num_threads = int(num_tiles); + } + + for (int t = 0; t < num_threads; t++) { + workers.emplace_back(std::thread([&]() + { + int tile_idx = 0; + while ((tile_idx = tile_count++) < num_tiles) { + +#else +#if TINYEXR_USE_OPENMP +#pragma omp parallel for +#endif + for (int tile_idx = 0; tile_idx < num_tiles; tile_idx++) { +#endif + // Allocate memory for each tile. + exr_image->tiles[tile_idx].images = tinyexr::AllocateImage( + num_channels, exr_header->channels, + exr_header->requested_pixel_types, exr_header->tile_size_x, + exr_header->tile_size_y); + + int x_tile = tile_idx % num_x_tiles; + int y_tile = tile_idx / num_x_tiles; + // 16 byte: tile coordinates + // 4 byte : data size + // ~ : data(uncompressed or compressed) + tinyexr::tinyexr_uint64 offset = offset_data.offsets[level_index][y_tile][x_tile]; + if (offset + sizeof(int) * 5 > size) { + // Insufficient data size. + error_flag |= EF_INSUFFICIENT_DATA; + continue; + } + + size_t data_size = + size_t(size - (offset + sizeof(int) * 5)); + const unsigned char* data_ptr = + reinterpret_cast<const unsigned char*>(head + offset); + + int tile_coordinates[4]; + memcpy(tile_coordinates, data_ptr, sizeof(int) * 4); + tinyexr::swap4(&tile_coordinates[0]); + tinyexr::swap4(&tile_coordinates[1]); + tinyexr::swap4(&tile_coordinates[2]); + tinyexr::swap4(&tile_coordinates[3]); + + if (tile_coordinates[2] != exr_image->level_x) { + // Invalid data. + error_flag |= EF_INVALID_DATA; + continue; + } + if (tile_coordinates[3] != exr_image->level_y) { + // Invalid data. + error_flag |= EF_INVALID_DATA; + continue; + } + + int data_len; + memcpy(&data_len, data_ptr + 16, + sizeof(int)); // 16 = sizeof(tile_coordinates) + tinyexr::swap4(&data_len); + + if (data_len < 2 || size_t(data_len) > data_size) { + // Insufficient data size. + error_flag |= EF_INSUFFICIENT_DATA; + continue; + } + + // Move to data addr: 20 = 16 + 4; + data_ptr += 20; + bool ret = tinyexr::DecodeTiledPixelData( + exr_image->tiles[tile_idx].images, + &(exr_image->tiles[tile_idx].width), + &(exr_image->tiles[tile_idx].height), + exr_header->requested_pixel_types, data_ptr, + static_cast<size_t>(data_len), exr_header->compression_type, + exr_header->line_order, + exr_image->width, exr_image->height, + tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x, + exr_header->tile_size_y, static_cast<size_t>(pixel_data_size), + static_cast<size_t>(exr_header->num_custom_attributes), + exr_header->custom_attributes, + static_cast<size_t>(exr_header->num_channels), + exr_header->channels, channel_offset_list); + + if (!ret) { + // Failed to decode tile data. + error_flag |= EF_FAILED_TO_DECODE; + } + + exr_image->tiles[tile_idx].offset_x = tile_coordinates[0]; + exr_image->tiles[tile_idx].offset_y = tile_coordinates[1]; + exr_image->tiles[tile_idx].level_x = tile_coordinates[2]; + exr_image->tiles[tile_idx].level_y = tile_coordinates[3]; + +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + } + })); + } // num_thread loop + + for (auto& t : workers) { + t.join(); + } + +#else + } // parallel for +#endif + + // Even in the event of an error, the reserved memory may be freed. + exr_image->num_channels = num_channels; + exr_image->num_tiles = static_cast<int>(num_tiles); + + if (error_flag) err_code = TINYEXR_ERROR_INVALID_DATA; + if (err) { + if (error_flag & EF_INSUFFICIENT_DATA) { + (*err) += "Insufficient data length.\n"; + } + if (error_flag & EF_FAILED_TO_DECODE) { + (*err) += "Failed to decode tile data.\n"; + } + } + return err_code; +} + static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, - const std::vector<tinyexr::tinyexr_uint64> &offsets, + const OffsetData& offset_data, const unsigned char *head, const size_t size, std::string *err) { int num_channels = exr_header->num_channels; @@ -10971,8 +4851,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, // Do not allow too large data_width and data_height. header invalid? { - const int threshold = 1024 * 8192; // heuristics - if ((data_width > threshold) || (data_height > threshold)) { + if ((data_width > TINYEXR_DIMENSION_THRESHOLD) || (data_height > TINYEXR_DIMENSION_THRESHOLD)) { if (err) { std::stringstream ss; ss << "data_with or data_height too large. data_width: " << data_width @@ -10982,8 +4861,21 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, } return TINYEXR_ERROR_INVALID_DATA; } + if (exr_header->tiled) { + if ((exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) || (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD)) { + if (err) { + std::stringstream ss; + ss << "tile with or tile height too large. tile width: " << exr_header->tile_size_x + << ", " + << "tile height = " << exr_header->tile_size_y << std::endl; + (*err) += ss.str(); + } + return TINYEXR_ERROR_INVALID_DATA; + } + } } + const std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0]; size_t num_blocks = offsets.size(); std::vector<size_t> channel_offset_list; @@ -10998,7 +4890,11 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, return TINYEXR_ERROR_INVALID_DATA; } - bool invalid_data = false; // TODO(LTE): Use atomic lock for MT safety. +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::atomic<bool> invalid_data(false); +#else + bool invalid_data(false); +#endif if (exr_header->tiled) { // value check @@ -11019,136 +4915,60 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, } return TINYEXR_ERROR_INVALID_HEADER; } - - size_t num_tiles = offsets.size(); // = # of blocks - - exr_image->tiles = static_cast<EXRTile *>( - calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles))); - - int err_code = TINYEXR_SUCCESS; - -#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0) - - std::vector<std::thread> workers; - std::atomic<size_t> tile_count(0); - - int num_threads = std::max(1, int(std::thread::hardware_concurrency())); - if (num_threads > int(num_tiles)) { - num_threads = int(num_tiles); - } - - for (int t = 0; t < num_threads; t++) { - workers.emplace_back(std::thread([&]() { - size_t tile_idx = 0; - while ((tile_idx = tile_count++) < num_tiles) { - -#else - for (size_t tile_idx = 0; tile_idx < num_tiles; tile_idx++) { -#endif - // Allocate memory for each tile. - exr_image->tiles[tile_idx].images = tinyexr::AllocateImage( - num_channels, exr_header->channels, - exr_header->requested_pixel_types, exr_header->tile_size_x, - exr_header->tile_size_y); - - // 16 byte: tile coordinates - // 4 byte : data size - // ~ : data(uncompressed or compressed) - if (offsets[tile_idx] + sizeof(int) * 5 > size) { - // TODO(LTE): atomic - if (err) { - (*err) += "Insufficient data size.\n"; - } - err_code = TINYEXR_ERROR_INVALID_DATA; - break; - } - - size_t data_size = - size_t(size - (offsets[tile_idx] + sizeof(int) * 5)); - const unsigned char *data_ptr = - reinterpret_cast<const unsigned char *>(head + offsets[tile_idx]); - - int tile_coordinates[4]; - memcpy(tile_coordinates, data_ptr, sizeof(int) * 4); - tinyexr::swap4(&tile_coordinates[0]); - tinyexr::swap4(&tile_coordinates[1]); - tinyexr::swap4(&tile_coordinates[2]); - tinyexr::swap4(&tile_coordinates[3]); - - // @todo{ LoD } - if (tile_coordinates[2] != 0) { - err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE; - break; - } - if (tile_coordinates[3] != 0) { - err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE; - break; - } - - int data_len; - memcpy(&data_len, data_ptr + 16, - sizeof(int)); // 16 = sizeof(tile_coordinates) - tinyexr::swap4(&data_len); - - if (data_len < 4 || size_t(data_len) > data_size) { - // TODO(LTE): atomic - if (err) { - (*err) += "Insufficient data length.\n"; - } - err_code = TINYEXR_ERROR_INVALID_DATA; - break; - } - - // Move to data addr: 20 = 16 + 4; - data_ptr += 20; - - bool ret = tinyexr::DecodeTiledPixelData( - exr_image->tiles[tile_idx].images, - &(exr_image->tiles[tile_idx].width), - &(exr_image->tiles[tile_idx].height), - exr_header->requested_pixel_types, data_ptr, - static_cast<size_t>(data_len), exr_header->compression_type, - exr_header->line_order, data_width, data_height, - tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x, - exr_header->tile_size_y, static_cast<size_t>(pixel_data_size), - static_cast<size_t>(exr_header->num_custom_attributes), - exr_header->custom_attributes, - static_cast<size_t>(exr_header->num_channels), - exr_header->channels, channel_offset_list); - - if (!ret) { - // TODO(LTE): atomic - if (err) { - (*err) += "Failed to decode tile data.\n"; - } - err_code = TINYEXR_ERROR_INVALID_DATA; + if (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) { + EXRImage* level_image = NULL; + for (int level = 0; level < offset_data.num_x_levels; ++level) { + if (!level_image) { + level_image = exr_image; + } else { + level_image->next_level = new EXRImage; + InitEXRImage(level_image->next_level); + level_image = level_image->next_level; + } + level_image->width = + LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level, exr_header->tile_rounding_mode); + level_image->height = + LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level, exr_header->tile_rounding_mode); + level_image->level_x = level; + level_image->level_y = level; + + int ret = DecodeTiledLevel(level_image, exr_header, + offset_data, + channel_offset_list, + pixel_data_size, + head, size, + err); + if (ret != TINYEXR_SUCCESS) return ret; + } + } else { + EXRImage* level_image = NULL; + for (int level_y = 0; level_y < offset_data.num_y_levels; ++level_y) + for (int level_x = 0; level_x < offset_data.num_x_levels; ++level_x) { + if (!level_image) { + level_image = exr_image; + } else { + level_image->next_level = new EXRImage; + InitEXRImage(level_image->next_level); + level_image = level_image->next_level; } - exr_image->tiles[tile_idx].offset_x = tile_coordinates[0]; - exr_image->tiles[tile_idx].offset_y = tile_coordinates[1]; - exr_image->tiles[tile_idx].level_x = tile_coordinates[2]; - exr_image->tiles[tile_idx].level_y = tile_coordinates[3]; - -#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0) + level_image->width = + LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level_x, exr_header->tile_rounding_mode); + level_image->height = + LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level_y, exr_header->tile_rounding_mode); + level_image->level_x = level_x; + level_image->level_y = level_y; + + int ret = DecodeTiledLevel(level_image, exr_header, + offset_data, + channel_offset_list, + pixel_data_size, + head, size, + err); + if (ret != TINYEXR_SUCCESS) return ret; } - })); - } // num_thread loop - - for (auto &t : workers) { - t.join(); } - -#else - } -#endif - - if (err_code != TINYEXR_SUCCESS) { - return err_code; - } - - exr_image->num_tiles = static_cast<int>(num_tiles); } else { // scanline format - // Don't allow too large image(256GB * pixel_data_size or more). Workaround // for #104. size_t total_data_len = @@ -11170,7 +4990,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, num_channels, exr_header->channels, exr_header->requested_pixel_types, data_width, data_height); -#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0) +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) std::vector<std::thread> workers; std::atomic<int> y_count(0); @@ -11271,7 +5091,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, } } -#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0) +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) } })); } @@ -11286,7 +5106,6 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header, if (invalid_data) { if (err) { - std::stringstream ss; (*err) += "Invalid data found when decoding pixels.\n"; } return TINYEXR_ERROR_INVALID_DATA; @@ -11343,6 +5162,370 @@ static bool ReconstructLineOffsets( return true; } + +static int FloorLog2(unsigned x) { + // + // For x > 0, floorLog2(y) returns floor(log(x)/log(2)). + // + int y = 0; + while (x > 1) { + y += 1; + x >>= 1u; + } + return y; +} + + +static int CeilLog2(unsigned x) { + // + // For x > 0, ceilLog2(y) returns ceil(log(x)/log(2)). + // + int y = 0; + int r = 0; + while (x > 1) { + if (x & 1) + r = 1; + + y += 1; + x >>= 1u; + } + return y + r; +} + +static int RoundLog2(int x, int tile_rounding_mode) { + return (tile_rounding_mode == TINYEXR_TILE_ROUND_DOWN) ? FloorLog2(static_cast<unsigned>(x)) : CeilLog2(static_cast<unsigned>(x)); +} + +static int CalculateNumXLevels(const EXRHeader* exr_header) { + int min_x = exr_header->data_window.min_x; + int max_x = exr_header->data_window.max_x; + int min_y = exr_header->data_window.min_y; + int max_y = exr_header->data_window.max_y; + + int num = 0; + switch (exr_header->tile_level_mode) { + case TINYEXR_TILE_ONE_LEVEL: + + num = 1; + break; + + case TINYEXR_TILE_MIPMAP_LEVELS: + + { + int w = max_x - min_x + 1; + int h = max_y - min_y + 1; + num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1; + } + break; + + case TINYEXR_TILE_RIPMAP_LEVELS: + + { + int w = max_x - min_x + 1; + num = RoundLog2(w, exr_header->tile_rounding_mode) + 1; + } + break; + + default: + + assert(false); + } + + return num; +} + +static int CalculateNumYLevels(const EXRHeader* exr_header) { + int min_x = exr_header->data_window.min_x; + int max_x = exr_header->data_window.max_x; + int min_y = exr_header->data_window.min_y; + int max_y = exr_header->data_window.max_y; + int num = 0; + + switch (exr_header->tile_level_mode) { + case TINYEXR_TILE_ONE_LEVEL: + + num = 1; + break; + + case TINYEXR_TILE_MIPMAP_LEVELS: + + { + int w = max_x - min_x + 1; + int h = max_y - min_y + 1; + num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1; + } + break; + + case TINYEXR_TILE_RIPMAP_LEVELS: + + { + int h = max_y - min_y + 1; + num = RoundLog2(h, exr_header->tile_rounding_mode) + 1; + } + break; + + default: + + assert(false); + } + + return num; +} + +static void CalculateNumTiles(std::vector<int>& numTiles, + int toplevel_size, + int size, + int tile_rounding_mode) { + for (unsigned i = 0; i < numTiles.size(); i++) { + int l = LevelSize(toplevel_size, i, tile_rounding_mode); + assert(l <= std::numeric_limits<int>::max() - size + 1); + + numTiles[i] = (l + size - 1) / size; + } +} + +static void PrecalculateTileInfo(std::vector<int>& num_x_tiles, + std::vector<int>& num_y_tiles, + const EXRHeader* exr_header) { + int min_x = exr_header->data_window.min_x; + int max_x = exr_header->data_window.max_x; + int min_y = exr_header->data_window.min_y; + int max_y = exr_header->data_window.max_y; + + int num_x_levels = CalculateNumXLevels(exr_header); + int num_y_levels = CalculateNumYLevels(exr_header); + + num_x_tiles.resize(num_x_levels); + num_y_tiles.resize(num_y_levels); + + CalculateNumTiles(num_x_tiles, + max_x - min_x + 1, + exr_header->tile_size_x, + exr_header->tile_rounding_mode); + + CalculateNumTiles(num_y_tiles, + max_y - min_y + 1, + exr_header->tile_size_y, + exr_header->tile_rounding_mode); +} + +static void InitSingleResolutionOffsets(OffsetData& offset_data, size_t num_blocks) { + offset_data.offsets.resize(1); + offset_data.offsets[0].resize(1); + offset_data.offsets[0][0].resize(num_blocks); + offset_data.num_x_levels = 1; + offset_data.num_y_levels = 1; +} + +// Return sum of tile blocks. +static int InitTileOffsets(OffsetData& offset_data, + const EXRHeader* exr_header, + const std::vector<int>& num_x_tiles, + const std::vector<int>& num_y_tiles) { + int num_tile_blocks = 0; + offset_data.num_x_levels = static_cast<int>(num_x_tiles.size()); + offset_data.num_y_levels = static_cast<int>(num_y_tiles.size()); + switch (exr_header->tile_level_mode) { + case TINYEXR_TILE_ONE_LEVEL: + case TINYEXR_TILE_MIPMAP_LEVELS: + assert(offset_data.num_x_levels == offset_data.num_y_levels); + offset_data.offsets.resize(offset_data.num_x_levels); + + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) { + offset_data.offsets[l].resize(num_y_tiles[l]); + + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) { + offset_data.offsets[l][dy].resize(num_x_tiles[l]); + num_tile_blocks += num_x_tiles[l]; + } + } + break; + + case TINYEXR_TILE_RIPMAP_LEVELS: + + offset_data.offsets.resize(static_cast<size_t>(offset_data.num_x_levels) * static_cast<size_t>(offset_data.num_y_levels)); + + for (int ly = 0; ly < offset_data.num_y_levels; ++ly) { + for (int lx = 0; lx < offset_data.num_x_levels; ++lx) { + int l = ly * offset_data.num_x_levels + lx; + offset_data.offsets[l].resize(num_y_tiles[ly]); + + for (size_t dy = 0; dy < offset_data.offsets[l].size(); ++dy) { + offset_data.offsets[l][dy].resize(num_x_tiles[lx]); + num_tile_blocks += num_x_tiles[lx]; + } + } + } + break; + + default: + assert(false); + } + return num_tile_blocks; +} + +static bool IsAnyOffsetsAreInvalid(const OffsetData& offset_data) { + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) + for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) + if (reinterpret_cast<const tinyexr::tinyexr_int64&>(offset_data.offsets[l][dy][dx]) <= 0) + return true; + + return false; +} + +static bool isValidTile(const EXRHeader* exr_header, + const OffsetData& offset_data, + int dx, int dy, int lx, int ly) { + if (lx < 0 || ly < 0 || dx < 0 || dy < 0) return false; + int num_x_levels = offset_data.num_x_levels; + int num_y_levels = offset_data.num_y_levels; + switch (exr_header->tile_level_mode) { + case TINYEXR_TILE_ONE_LEVEL: + + if (lx == 0 && + ly == 0 && + offset_data.offsets.size() > 0 && + offset_data.offsets[0].size() > static_cast<size_t>(dy) && + offset_data.offsets[0][dy].size() > static_cast<size_t>(dx)) { + return true; + } + + break; + + case TINYEXR_TILE_MIPMAP_LEVELS: + + if (lx < num_x_levels && + ly < num_y_levels && + offset_data.offsets.size() > static_cast<size_t>(lx) && + offset_data.offsets[lx].size() > static_cast<size_t>(dy) && + offset_data.offsets[lx][dy].size() > static_cast<size_t>(dx)) { + return true; + } + + break; + + case TINYEXR_TILE_RIPMAP_LEVELS: + { + size_t idx = static_cast<size_t>(lx) + static_cast<size_t>(ly)* static_cast<size_t>(num_x_levels); + if (lx < num_x_levels && + ly < num_y_levels && + (offset_data.offsets.size() > idx) && + offset_data.offsets[idx].size() > static_cast<size_t>(dy) && + offset_data.offsets[idx][dy].size() > static_cast<size_t>(dx)) { + return true; + } + } + + break; + + default: + + return false; + } + + return false; +} + +static void ReconstructTileOffsets(OffsetData& offset_data, + const EXRHeader* exr_header, + const unsigned char* head, const unsigned char* marker, const size_t /*size*/, + bool isMultiPartFile, + bool isDeep) { + int numXLevels = offset_data.num_x_levels; + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) { + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) { + for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) { + tinyexr::tinyexr_uint64 tileOffset = marker - head; + + if (isMultiPartFile) { + //int partNumber; + marker += sizeof(int); + } + + int tileX; + memcpy(&tileX, marker, sizeof(int)); + tinyexr::swap4(&tileX); + marker += sizeof(int); + + int tileY; + memcpy(&tileY, marker, sizeof(int)); + tinyexr::swap4(&tileY); + marker += sizeof(int); + + int levelX; + memcpy(&levelX, marker, sizeof(int)); + tinyexr::swap4(&levelX); + marker += sizeof(int); + + int levelY; + memcpy(&levelY, marker, sizeof(int)); + tinyexr::swap4(&levelY); + marker += sizeof(int); + + if (isDeep) { + tinyexr::tinyexr_int64 packed_offset_table_size; + memcpy(&packed_offset_table_size, marker, sizeof(tinyexr::tinyexr_int64)); + tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_offset_table_size)); + marker += sizeof(tinyexr::tinyexr_int64); + + tinyexr::tinyexr_int64 packed_sample_size; + memcpy(&packed_sample_size, marker, sizeof(tinyexr::tinyexr_int64)); + tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_sample_size)); + marker += sizeof(tinyexr::tinyexr_int64); + + // next Int64 is unpacked sample size - skip that too + marker += packed_offset_table_size + packed_sample_size + 8; + + } else { + + int dataSize; + memcpy(&dataSize, marker, sizeof(int)); + tinyexr::swap4(&dataSize); + marker += sizeof(int); + marker += dataSize; + } + + if (!isValidTile(exr_header, offset_data, + tileX, tileY, levelX, levelY)) + return; + + int level_idx = LevelIndex(levelX, levelY, exr_header->tile_level_mode, numXLevels); + offset_data.offsets[level_idx][tileY][tileX] = tileOffset; + } + } + } +} + +// marker output is also +static int ReadOffsets(OffsetData& offset_data, + const unsigned char* head, + const unsigned char*& marker, + const size_t size, + const char** err) { + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) { + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) { + for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) { + tinyexr::tinyexr_uint64 offset; + if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) { + tinyexr::SetErrorMessage("Insufficient data size in offset table.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + + memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64)); + tinyexr::swap8(&offset); + if (offset >= size) { + tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + marker += sizeof(tinyexr::tinyexr_uint64); // = 8 + offset_data.offsets[l][dy][dx] = offset; + } + } + } + return TINYEXR_SUCCESS; +} + static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header, const unsigned char *head, const unsigned char *marker, const size_t size, @@ -11383,100 +5566,114 @@ static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header, // Do not allow too large data_width and data_height. header invalid? { - const int threshold = 1024 * 8192; // heuristics - if (data_width > threshold) { + if (data_width > TINYEXR_DIMENSION_THRESHOLD) { tinyexr::SetErrorMessage("data width too large.", err); return TINYEXR_ERROR_INVALID_DATA; } - if (data_height > threshold) { + if (data_height > TINYEXR_DIMENSION_THRESHOLD) { tinyexr::SetErrorMessage("data height too large.", err); return TINYEXR_ERROR_INVALID_DATA; } } - // Read offset tables. - size_t num_blocks = 0; - - if (exr_header->chunk_count > 0) { - // Use `chunkCount` attribute. - num_blocks = static_cast<size_t>(exr_header->chunk_count); - } else if (exr_header->tiled) { - // @todo { LoD } - if (exr_header->tile_size_x > data_width || exr_header->tile_size_x < 1 || - exr_header->tile_size_y > data_height || exr_header->tile_size_y < 1) { - tinyexr::SetErrorMessage("tile sizes are invalid.", err); + if (exr_header->tiled) { + if (exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) { + tinyexr::SetErrorMessage("tile width too large.", err); return TINYEXR_ERROR_INVALID_DATA; } - - size_t num_x_tiles = static_cast<size_t>(data_width) / - static_cast<size_t>(exr_header->tile_size_x); - if (num_x_tiles * static_cast<size_t>(exr_header->tile_size_x) < - static_cast<size_t>(data_width)) { - num_x_tiles++; + if (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD) { + tinyexr::SetErrorMessage("tile height too large.", err); + return TINYEXR_ERROR_INVALID_DATA; } - size_t num_y_tiles = static_cast<size_t>(data_height) / - static_cast<size_t>(exr_header->tile_size_y); - if (num_y_tiles * static_cast<size_t>(exr_header->tile_size_y) < - static_cast<size_t>(data_height)) { - num_y_tiles++; + } + + // Read offset tables. + OffsetData offset_data; + size_t num_blocks = 0; + // For a multi-resolution image, the size of the offset table will be calculated from the other attributes of the header. + // If chunk_count > 0 then chunk_count must be equal to the calculated tile count. + if (exr_header->tiled) { + { + std::vector<int> num_x_tiles, num_y_tiles; + PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_header); + num_blocks = InitTileOffsets(offset_data, exr_header, num_x_tiles, num_y_tiles); + if (exr_header->chunk_count > 0) { + if (exr_header->chunk_count != static_cast<int>(num_blocks)) { + tinyexr::SetErrorMessage("Invalid offset table size.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + } } - num_blocks = num_x_tiles * num_y_tiles; + int ret = ReadOffsets(offset_data, head, marker, size, err); + if (ret != TINYEXR_SUCCESS) return ret; + if (IsAnyOffsetsAreInvalid(offset_data)) { + ReconstructTileOffsets(offset_data, exr_header, + head, marker, size, + exr_header->multipart, exr_header->non_image); + } + } else if (exr_header->chunk_count > 0) { + // Use `chunkCount` attribute. + num_blocks = static_cast<size_t>(exr_header->chunk_count); + InitSingleResolutionOffsets(offset_data, num_blocks); } else { num_blocks = static_cast<size_t>(data_height) / - static_cast<size_t>(num_scanline_blocks); + static_cast<size_t>(num_scanline_blocks); if (num_blocks * static_cast<size_t>(num_scanline_blocks) < - static_cast<size_t>(data_height)) { + static_cast<size_t>(data_height)) { num_blocks++; } - } - - std::vector<tinyexr::tinyexr_uint64> offsets(num_blocks); - - for (size_t y = 0; y < num_blocks; y++) { - tinyexr::tinyexr_uint64 offset; - // Issue #81 - if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) { - tinyexr::SetErrorMessage("Insufficient data size in offset table.", err); - return TINYEXR_ERROR_INVALID_DATA; - } - memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64)); - tinyexr::swap8(&offset); - if (offset >= size) { - tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err); - return TINYEXR_ERROR_INVALID_DATA; - } - marker += sizeof(tinyexr::tinyexr_uint64); // = 8 - offsets[y] = offset; + InitSingleResolutionOffsets(offset_data, num_blocks); } - // If line offsets are invalid, we try to reconstruct it. - // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details. - for (size_t y = 0; y < num_blocks; y++) { - if (offsets[y] <= 0) { - // TODO(syoyo) Report as warning? - // if (err) { - // stringstream ss; - // ss << "Incomplete lineOffsets." << std::endl; - // (*err) += ss.str(); - //} - bool ret = + if (!exr_header->tiled) { + std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0]; + for (size_t y = 0; y < num_blocks; y++) { + tinyexr::tinyexr_uint64 offset; + // Issue #81 + if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) { + tinyexr::SetErrorMessage("Insufficient data size in offset table.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + + memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64)); + tinyexr::swap8(&offset); + if (offset >= size) { + tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + marker += sizeof(tinyexr::tinyexr_uint64); // = 8 + offsets[y] = offset; + } + + // If line offsets are invalid, we try to reconstruct it. + // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details. + for (size_t y = 0; y < num_blocks; y++) { + if (offsets[y] <= 0) { + // TODO(syoyo) Report as warning? + // if (err) { + // stringstream ss; + // ss << "Incomplete lineOffsets." << std::endl; + // (*err) += ss.str(); + //} + bool ret = ReconstructLineOffsets(&offsets, num_blocks, head, marker, size); - if (ret) { - // OK - break; - } else { - tinyexr::SetErrorMessage( + if (ret) { + // OK + break; + } else { + tinyexr::SetErrorMessage( "Cannot reconstruct lineOffset table in DecodeEXRImage.", err); - return TINYEXR_ERROR_INVALID_DATA; + return TINYEXR_ERROR_INVALID_DATA; + } } } } { std::string e; - int ret = DecodeChunk(exr_image, exr_header, offsets, head, size, &e); + int ret = DecodeChunk(exr_image, exr_header, offset_data, head, size, &e); if (ret != TINYEXR_SUCCESS) { if (!e.empty()) { @@ -11530,7 +5727,7 @@ struct LayerChannel { }; static void ChannelsInLayer(const EXRHeader &exr_header, - const std::string layer_name, + const std::string &layer_name, std::vector<LayerChannel> &channels) { channels.clear(); for (int c = 0; c < exr_header.num_channels; c++) { @@ -11881,8 +6078,8 @@ int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version, ConvertHeader(exr_header, info); - // transfoer `tiled` from version. - exr_header->tiled = version->tiled; + exr_header->multipart = version->multipart ? 1 : 0; + exr_header->non_image = version->non_image ? 1 : 0; return ret; } @@ -12087,7 +6284,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header, FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (errcode != 0) { @@ -12096,7 +6293,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header, return TINYEXR_ERROR_CANT_OPEN_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif #else @@ -12155,207 +6352,400 @@ int LoadEXRImageFromMemory(EXRImage *exr_image, const EXRHeader *exr_header, err); } -size_t SaveEXRImageToMemory(const EXRImage *exr_image, - const EXRHeader *exr_header, - unsigned char **memory_out, const char **err) { - if (exr_image == NULL || memory_out == NULL || - exr_header->compression_type < 0) { - tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToMemory", err); - return 0; - } +namespace tinyexr +{ -#if !TINYEXR_USE_PIZ - if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { - tinyexr::SetErrorMessage("PIZ compression is not supported in this build", - err); - return 0; - } -#endif +// out_data must be allocated initially with the block-header size +// of the current image(-part) type +static bool EncodePixelData(/* out */ std::vector<unsigned char>& out_data, + const unsigned char* const* images, + int compression_type, + int /*line_order*/, + int width, // for tiled : tile.width + int /*height*/, // for tiled : header.tile_size_y + int x_stride, // for tiled : header.tile_size_x + int line_no, // for tiled : 0 + int num_lines, // for tiled : tile.height + size_t pixel_data_size, + const std::vector<ChannelInfo>& channels, + const std::vector<size_t>& channel_offset_list, + const void* compression_param = 0) // zfp compression param +{ + size_t buf_size = static_cast<size_t>(width) * + static_cast<size_t>(num_lines) * + static_cast<size_t>(pixel_data_size); + //int last2bit = (buf_size & 3); + // buf_size must be multiple of four + //if(last2bit) buf_size += 4 - last2bit; + std::vector<unsigned char> buf(buf_size); -#if !TINYEXR_USE_ZFP - if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { - tinyexr::SetErrorMessage("ZFP compression is not supported in this build", - err); - return 0; - } -#endif + size_t start_y = static_cast<size_t>(line_no); + for (size_t c = 0; c < channels.size(); c++) { + if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) { + if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + for (int y = 0; y < num_lines; y++) { + // Assume increasing Y + float *line_ptr = reinterpret_cast<float *>(&buf.at( + static_cast<size_t>(pixel_data_size * y * width) + + channel_offset_list[c] * + static_cast<size_t>(width))); + for (int x = 0; x < width; x++) { + tinyexr::FP16 h16; + h16.u = reinterpret_cast<const unsigned short * const *>( + images)[c][(y + start_y) * x_stride + x]; -#if TINYEXR_USE_ZFP - for (size_t i = 0; i < static_cast<size_t>(exr_header->num_channels); i++) { - if (exr_header->requested_pixel_types[i] != TINYEXR_PIXELTYPE_FLOAT) { - tinyexr::SetErrorMessage("Pixel type must be FLOAT for ZFP compression", - err); - return 0; + tinyexr::FP32 f32 = half_to_float(h16); + + tinyexr::swap4(&f32.f); + + // line_ptr[x] = f32.f; + tinyexr::cpy4(line_ptr + x, &(f32.f)); + } + } + } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) { + for (int y = 0; y < num_lines; y++) { + // Assume increasing Y + unsigned short *line_ptr = reinterpret_cast<unsigned short *>( + &buf.at(static_cast<size_t>(pixel_data_size * y * + width) + + channel_offset_list[c] * + static_cast<size_t>(width))); + for (int x = 0; x < width; x++) { + unsigned short val = reinterpret_cast<const unsigned short * const *>( + images)[c][(y + start_y) * x_stride + x]; + + tinyexr::swap2(&val); + + // line_ptr[x] = val; + tinyexr::cpy2(line_ptr + x, &val); + } + } + } else { + assert(0); + } + + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) { + for (int y = 0; y < num_lines; y++) { + // Assume increasing Y + unsigned short *line_ptr = reinterpret_cast<unsigned short *>( + &buf.at(static_cast<size_t>(pixel_data_size * y * + width) + + channel_offset_list[c] * + static_cast<size_t>(width))); + for (int x = 0; x < width; x++) { + tinyexr::FP32 f32; + f32.f = reinterpret_cast<const float * const *>( + images)[c][(y + start_y) * x_stride + x]; + + tinyexr::FP16 h16; + h16 = float_to_half_full(f32); + + tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u)); + + // line_ptr[x] = h16.u; + tinyexr::cpy2(line_ptr + x, &(h16.u)); + } + } + } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) { + for (int y = 0; y < num_lines; y++) { + // Assume increasing Y + float *line_ptr = reinterpret_cast<float *>(&buf.at( + static_cast<size_t>(pixel_data_size * y * width) + + channel_offset_list[c] * + static_cast<size_t>(width))); + for (int x = 0; x < width; x++) { + float val = reinterpret_cast<const float * const *>( + images)[c][(y + start_y) * x_stride + x]; + + tinyexr::swap4(&val); + + // line_ptr[x] = val; + tinyexr::cpy4(line_ptr + x, &val); + } + } + } else { + assert(0); + } + } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) { + for (int y = 0; y < num_lines; y++) { + // Assume increasing Y + unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at( + static_cast<size_t>(pixel_data_size * y * width) + + channel_offset_list[c] * static_cast<size_t>(width))); + for (int x = 0; x < width; x++) { + unsigned int val = reinterpret_cast<const unsigned int * const *>( + images)[c][(y + start_y) * x_stride + x]; + + tinyexr::swap4(&val); + + // line_ptr[x] = val; + tinyexr::cpy4(line_ptr + x, &val); + } + } } } + + if (compression_type == TINYEXR_COMPRESSIONTYPE_NONE) { + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(uncompressed) + out_data.insert(out_data.end(), buf.begin(), buf.end()); + + } else if ((compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) || + (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) { +#if TINYEXR_USE_MINIZ + std::vector<unsigned char> block(mz_compressBound( + static_cast<unsigned long>(buf.size()))); +#else + std::vector<unsigned char> block( + compressBound(static_cast<uLong>(buf.size()))); #endif + tinyexr::tinyexr_uint64 outSize = block.size(); - std::vector<unsigned char> memory; + tinyexr::CompressZip(&block.at(0), outSize, + reinterpret_cast<const unsigned char *>(&buf.at(0)), + static_cast<unsigned long>(buf.size())); - // Header - { - const char header[] = {0x76, 0x2f, 0x31, 0x01}; - memory.insert(memory.end(), header, header + 4); - } + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + unsigned int data_len = static_cast<unsigned int>(outSize); // truncate - // Version, scanline. - { - char marker[] = {2, 0, 0, 0}; - /* @todo - if (exr_header->tiled) { - marker[1] |= 0x2; - } - if (exr_header->long_name) { - marker[1] |= 0x4; - } - if (exr_header->non_image) { - marker[1] |= 0x8; - } - if (exr_header->multipart) { - marker[1] |= 0x10; - } - */ - memory.insert(memory.end(), marker, marker + 4); - } + out_data.insert(out_data.end(), block.begin(), block.begin() + data_len); - int num_scanlines = 1; - if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { - num_scanlines = 16; - } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { - num_scanlines = 32; - } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { - num_scanlines = 16; - } + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) { + // (buf.size() * 3) / 2 would be enough. + std::vector<unsigned char> block((buf.size() * 3) / 2); - // Write attributes. - std::vector<tinyexr::ChannelInfo> channels; - { - std::vector<unsigned char> data; + tinyexr::tinyexr_uint64 outSize = block.size(); - for (int c = 0; c < exr_header->num_channels; c++) { - tinyexr::ChannelInfo info; - info.p_linear = 0; - info.pixel_type = exr_header->requested_pixel_types[c]; - info.x_sampling = 1; - info.y_sampling = 1; - info.name = std::string(exr_header->channels[c].name); - channels.push_back(info); - } + tinyexr::CompressRle(&block.at(0), outSize, + reinterpret_cast<const unsigned char *>(&buf.at(0)), + static_cast<unsigned long>(buf.size())); - tinyexr::WriteChannelInfo(data, channels); + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + unsigned int data_len = static_cast<unsigned int>(outSize); // truncate + out_data.insert(out_data.end(), block.begin(), block.begin() + data_len); - tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0), - static_cast<int>(data.size())); - } + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { +#if TINYEXR_USE_PIZ + unsigned int bufLen = + 8192 + static_cast<unsigned int>( + 2 * static_cast<unsigned int>( + buf.size())); // @fixme { compute good bound. } + std::vector<unsigned char> block(bufLen); + unsigned int outSize = static_cast<unsigned int>(block.size()); + + CompressPiz(&block.at(0), &outSize, + reinterpret_cast<const unsigned char *>(&buf.at(0)), + buf.size(), channels, width, num_lines); + + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + unsigned int data_len = outSize; + out_data.insert(out_data.end(), block.begin(), block.begin() + data_len); - { - int comp = exr_header->compression_type; - tinyexr::swap4(&comp); - tinyexr::WriteAttributeToMemory( - &memory, "compression", "compression", - reinterpret_cast<const unsigned char *>(&comp), 1); - } +#else + assert(0); +#endif + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { +#if TINYEXR_USE_ZFP + const ZFPCompressionParam* zfp_compression_param = reinterpret_cast<const ZFPCompressionParam*>(compression_param); + std::vector<unsigned char> block; + unsigned int outSize; - { - int data[4] = {0, 0, exr_image->width - 1, exr_image->height - 1}; - tinyexr::swap4(&data[0]); - tinyexr::swap4(&data[1]); - tinyexr::swap4(&data[2]); - tinyexr::swap4(&data[3]); - tinyexr::WriteAttributeToMemory( - &memory, "dataWindow", "box2i", - reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4); - tinyexr::WriteAttributeToMemory( - &memory, "displayWindow", "box2i", - reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4); - } + tinyexr::CompressZfp( + &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)), + width, num_lines, static_cast<int>(channels.size()), *zfp_compression_param); - { - unsigned char line_order = 0; // @fixme { read line_order from EXRHeader } - tinyexr::WriteAttributeToMemory(&memory, "lineOrder", "lineOrder", - &line_order, 1); - } + // 4 byte: scan line + // 4 byte: data size + // ~ : pixel data(compressed) + unsigned int data_len = outSize; + out_data.insert(out_data.end(), block.begin(), block.begin() + data_len); - { - float aspectRatio = 1.0f; - tinyexr::swap4(&aspectRatio); - tinyexr::WriteAttributeToMemory( - &memory, "pixelAspectRatio", "float", - reinterpret_cast<const unsigned char *>(&aspectRatio), sizeof(float)); +#else + (void)compression_param; + assert(0); +#endif + } else { + assert(0); + return false; } - { - float center[2] = {0.0f, 0.0f}; - tinyexr::swap4(¢er[0]); - tinyexr::swap4(¢er[1]); - tinyexr::WriteAttributeToMemory( - &memory, "screenWindowCenter", "v2f", - reinterpret_cast<const unsigned char *>(center), 2 * sizeof(float)); + return true; +} + +static int EncodeTiledLevel(const EXRImage* level_image, const EXRHeader* exr_header, + const std::vector<tinyexr::ChannelInfo>& channels, + std::vector<std::vector<unsigned char> >& data_list, + size_t start_index, // for data_list + int num_x_tiles, int num_y_tiles, + const std::vector<size_t>& channel_offset_list, + int pixel_data_size, + const void* compression_param, // must be set if zfp compression is enabled + std::string* err) { + int num_tiles = num_x_tiles * num_y_tiles; + assert(num_tiles == level_image->num_tiles); + + if ((exr_header->tile_size_x > level_image->width || exr_header->tile_size_y > level_image->height) && + level_image->level_x == 0 && level_image->level_y == 0) { + if (err) { + (*err) += "Failed to encode tile data.\n"; + } + return TINYEXR_ERROR_INVALID_DATA; } - { - float w = static_cast<float>(exr_image->width); - tinyexr::swap4(&w); - tinyexr::WriteAttributeToMemory(&memory, "screenWindowWidth", "float", - reinterpret_cast<const unsigned char *>(&w), - sizeof(float)); + +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::atomic<bool> invalid_data(false); +#else + bool invalid_data(false); +#endif + +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::vector<std::thread> workers; + std::atomic<int> tile_count(0); + + int num_threads = std::max(1, int(std::thread::hardware_concurrency())); + if (num_threads > int(num_tiles)) { + num_threads = int(num_tiles); } - // Custom attributes - if (exr_header->num_custom_attributes > 0) { - for (int i = 0; i < exr_header->num_custom_attributes; i++) { - tinyexr::WriteAttributeToMemory( - &memory, exr_header->custom_attributes[i].name, - exr_header->custom_attributes[i].type, - reinterpret_cast<const unsigned char *>( - exr_header->custom_attributes[i].value), - exr_header->custom_attributes[i].size); + for (int t = 0; t < num_threads; t++) { + workers.emplace_back(std::thread([&]() { + int i = 0; + while ((i = tile_count++) < num_tiles) { + +#else + // Use signed int since some OpenMP compiler doesn't allow unsigned type for + // `parallel for` +#if TINYEXR_USE_OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < num_tiles; i++) { + +#endif + size_t tile_idx = static_cast<size_t>(i); + size_t data_idx = tile_idx + start_index; + + int x_tile = i % num_x_tiles; + int y_tile = i / num_x_tiles; + + EXRTile& tile = level_image->tiles[tile_idx]; + + const unsigned char* const* images = + static_cast<const unsigned char* const*>(tile.images); + + data_list[data_idx].resize(5*sizeof(int)); + size_t data_header_size = data_list[data_idx].size(); + bool ret = EncodePixelData(data_list[data_idx], + images, + exr_header->compression_type, + 0, // increasing y + tile.width, + exr_header->tile_size_y, + exr_header->tile_size_x, + 0, + tile.height, + pixel_data_size, + channels, + channel_offset_list, + compression_param); + if (!ret) { + invalid_data = true; + continue; } + assert(data_list[data_idx].size() > data_header_size); + int data_len = static_cast<int>(data_list[data_idx].size() - data_header_size); + //tileX, tileY, levelX, levelY // pixel_data_size(int) + memcpy(&data_list[data_idx][0], &x_tile, sizeof(int)); + memcpy(&data_list[data_idx][4], &y_tile, sizeof(int)); + memcpy(&data_list[data_idx][8], &level_image->level_x, sizeof(int)); + memcpy(&data_list[data_idx][12], &level_image->level_y, sizeof(int)); + memcpy(&data_list[data_idx][16], &data_len, sizeof(int)); + + swap4(reinterpret_cast<int*>(&data_list[data_idx][0])); + swap4(reinterpret_cast<int*>(&data_list[data_idx][4])); + swap4(reinterpret_cast<int*>(&data_list[data_idx][8])); + swap4(reinterpret_cast<int*>(&data_list[data_idx][12])); + swap4(reinterpret_cast<int*>(&data_list[data_idx][16])); + +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) } +})); + } - { // end of header - unsigned char e = 0; - memory.push_back(e); + for (auto &t : workers) { + t.join(); + } +#else + } // omp parallel +#endif + + if (invalid_data) { + if (err) { + (*err) += "Failed to encode tile data.\n"; + } + return TINYEXR_ERROR_INVALID_DATA; } + return TINYEXR_SUCCESS; +} - int num_blocks = exr_image->height / num_scanlines; - if (num_blocks * num_scanlines < exr_image->height) { - num_blocks++; +static int NumScanlines(int compression_type) { + int num_scanlines = 1; + if (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) { + num_scanlines = 16; + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + num_scanlines = 32; + } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + num_scanlines = 16; } + return num_scanlines; +} - std::vector<tinyexr::tinyexr_uint64> offsets(static_cast<size_t>(num_blocks)); +static int EncodeChunk(const EXRImage* exr_image, const EXRHeader* exr_header, + const std::vector<ChannelInfo>& channels, + int num_blocks, + tinyexr_uint64 chunk_offset, // starting offset of current chunk + bool is_multipart, + OffsetData& offset_data, // output block offsets, must be initialized + std::vector<std::vector<unsigned char> >& data_list, // output + tinyexr_uint64& total_size, // output: ending offset of current chunk + std::string* err) { + int num_scanlines = NumScanlines(exr_header->compression_type); - size_t headerSize = memory.size(); - tinyexr::tinyexr_uint64 offset = - headerSize + - static_cast<size_t>(num_blocks) * - sizeof( - tinyexr::tinyexr_int64); // sizeof(header) + sizeof(offsetTable) + data_list.resize(num_blocks); - std::vector<std::vector<unsigned char> > data_list( - static_cast<size_t>(num_blocks)); std::vector<size_t> channel_offset_list( - static_cast<size_t>(exr_header->num_channels)); + static_cast<size_t>(exr_header->num_channels)); int pixel_data_size = 0; - size_t channel_offset = 0; - for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) { - channel_offset_list[c] = channel_offset; - if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - pixel_data_size += sizeof(unsigned short); - channel_offset += sizeof(unsigned short); - } else if (exr_header->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_FLOAT) { - pixel_data_size += sizeof(float); - channel_offset += sizeof(float); - } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { - pixel_data_size += sizeof(unsigned int); - channel_offset += sizeof(unsigned int); - } else { - assert(0); + { + size_t channel_offset = 0; + for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) { + channel_offset_list[c] = channel_offset; + if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) { + pixel_data_size += sizeof(unsigned short); + channel_offset += sizeof(unsigned short); + } else if (channels[c].requested_pixel_type == + TINYEXR_PIXELTYPE_FLOAT) { + pixel_data_size += sizeof(float); + channel_offset += sizeof(float); + } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_UINT) { + pixel_data_size += sizeof(unsigned int); + channel_offset += sizeof(unsigned int); + } else { + assert(0); + } } } + const void* compression_param = 0; #if TINYEXR_USE_ZFP tinyexr::ZFPCompressionParam zfp_compression_param; @@ -12364,304 +6754,517 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, { std::string e; bool ret = tinyexr::FindZFPCompressionParam( - &zfp_compression_param, exr_header->custom_attributes, - exr_header->num_custom_attributes, &e); + &zfp_compression_param, exr_header->custom_attributes, + exr_header->num_custom_attributes, &e); if (!ret) { // Use predefined compression parameter. zfp_compression_param.type = 0; zfp_compression_param.rate = 2; } + compression_param = &zfp_compression_param; } #endif - // TODO(LTE): C++11 thread + tinyexr_uint64 offset = chunk_offset; + tinyexr_uint64 doffset = is_multipart ? 4u : 0u; -// Use signed int since some OpenMP compiler doesn't allow unsigned type for -// `parallel for` -#if TINYEXR_USE_OPENMP -#pragma omp parallel for -#endif - for (int i = 0; i < num_blocks; i++) { - size_t ii = static_cast<size_t>(i); - int start_y = num_scanlines * i; - int endY = (std::min)(num_scanlines * (i + 1), exr_image->height); - int h = endY - start_y; - - std::vector<unsigned char> buf( - static_cast<size_t>(exr_image->width * h * pixel_data_size)); + if (exr_image->tiles) { + const EXRImage* level_image = exr_image; + size_t block_idx = 0; + tinyexr::tinyexr_uint64 block_data_size = 0; + int num_levels = (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ? + offset_data.num_x_levels : (offset_data.num_x_levels * offset_data.num_y_levels); + for (int level_index = 0; level_index < num_levels; ++level_index) { + if (!level_image) { + if (err) { + (*err) += "Invalid number of tiled levels for EncodeChunk\n"; + } + return TINYEXR_ERROR_INVALID_DATA; + } - for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) { - if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { - for (int y = 0; y < h; y++) { - // Assume increasing Y - float *line_ptr = reinterpret_cast<float *>(&buf.at( - static_cast<size_t>(pixel_data_size * y * exr_image->width) + - channel_offset_list[c] * - static_cast<size_t>(exr_image->width))); - for (int x = 0; x < exr_image->width; x++) { - tinyexr::FP16 h16; - h16.u = reinterpret_cast<unsigned short **>( - exr_image->images)[c][(y + start_y) * exr_image->width + x]; - - tinyexr::FP32 f32 = half_to_float(h16); - - tinyexr::swap4(&f32.f); - - // line_ptr[x] = f32.f; - tinyexr::cpy4(line_ptr + x, &(f32.f)); - } - } - } else if (exr_header->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_HALF) { - for (int y = 0; y < h; y++) { - // Assume increasing Y - unsigned short *line_ptr = reinterpret_cast<unsigned short *>( - &buf.at(static_cast<size_t>(pixel_data_size * y * - exr_image->width) + - channel_offset_list[c] * - static_cast<size_t>(exr_image->width))); - for (int x = 0; x < exr_image->width; x++) { - unsigned short val = reinterpret_cast<unsigned short **>( - exr_image->images)[c][(y + start_y) * exr_image->width + x]; - - tinyexr::swap2(&val); - - // line_ptr[x] = val; - tinyexr::cpy2(line_ptr + x, &val); - } - } - } else { - assert(0); + int level_index_from_image = LevelIndex(level_image->level_x, level_image->level_y, + exr_header->tile_level_mode, offset_data.num_x_levels); + if (level_index_from_image != level_index) { + if (err) { + (*err) += "Incorrect level ordering in tiled image\n"; } + return TINYEXR_ERROR_INVALID_DATA; + } + int num_y_tiles = (int)offset_data.offsets[level_index].size(); + assert(num_y_tiles); + int num_x_tiles = (int)offset_data.offsets[level_index][0].size(); + assert(num_x_tiles); + + std::string e; + int ret = EncodeTiledLevel(level_image, + exr_header, + channels, + data_list, + block_idx, + num_x_tiles, + num_y_tiles, + channel_offset_list, + pixel_data_size, + compression_param, + &e); + if (ret != TINYEXR_SUCCESS) { + if (!e.empty() && err) { + (*err) += e; + } + return ret; + } - } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { - if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) { - for (int y = 0; y < h; y++) { - // Assume increasing Y - unsigned short *line_ptr = reinterpret_cast<unsigned short *>( - &buf.at(static_cast<size_t>(pixel_data_size * y * - exr_image->width) + - channel_offset_list[c] * - static_cast<size_t>(exr_image->width))); - for (int x = 0; x < exr_image->width; x++) { - tinyexr::FP32 f32; - f32.f = reinterpret_cast<float **>( - exr_image->images)[c][(y + start_y) * exr_image->width + x]; - - tinyexr::FP16 h16; - h16 = float_to_half_full(f32); - - tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u)); - - // line_ptr[x] = h16.u; - tinyexr::cpy2(line_ptr + x, &(h16.u)); - } - } - } else if (exr_header->requested_pixel_types[c] == - TINYEXR_PIXELTYPE_FLOAT) { - for (int y = 0; y < h; y++) { - // Assume increasing Y - float *line_ptr = reinterpret_cast<float *>(&buf.at( - static_cast<size_t>(pixel_data_size * y * exr_image->width) + - channel_offset_list[c] * - static_cast<size_t>(exr_image->width))); - for (int x = 0; x < exr_image->width; x++) { - float val = reinterpret_cast<float **>( - exr_image->images)[c][(y + start_y) * exr_image->width + x]; - - tinyexr::swap4(&val); - - // line_ptr[x] = val; - tinyexr::cpy4(line_ptr + x, &val); - } - } - } else { - assert(0); + for (size_t j = 0; j < static_cast<size_t>(num_y_tiles); ++j) + for (size_t i = 0; i < static_cast<size_t>(num_x_tiles); ++i) { + offset_data.offsets[level_index][j][i] = offset; + swap8(reinterpret_cast<tinyexr_uint64*>(&offset_data.offsets[level_index][j][i])); + offset += data_list[block_idx].size() + doffset; + block_data_size += data_list[block_idx].size(); + ++block_idx; } - } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_UINT) { - for (int y = 0; y < h; y++) { - // Assume increasing Y - unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at( - static_cast<size_t>(pixel_data_size * y * exr_image->width) + - channel_offset_list[c] * static_cast<size_t>(exr_image->width))); - for (int x = 0; x < exr_image->width; x++) { - unsigned int val = reinterpret_cast<unsigned int **>( - exr_image->images)[c][(y + start_y) * exr_image->width + x]; + level_image = level_image->next_level; + } + assert(static_cast<int>(block_idx) == num_blocks); + total_size = offset; + } else { // scanlines + std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0]; - tinyexr::swap4(&val); +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + std::atomic<bool> invalid_data(false); + std::vector<std::thread> workers; + std::atomic<int> block_count(0); - // line_ptr[x] = val; - tinyexr::cpy4(line_ptr + x, &val); - } - } + int num_threads = std::min(std::max(1, int(std::thread::hardware_concurrency())), num_blocks); + + for (int t = 0; t < num_threads; t++) { + workers.emplace_back(std::thread([&]() { + int i = 0; + while ((i = block_count++) < num_blocks) { + +#else + bool invalid_data(false); +#if TINYEXR_USE_OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < num_blocks; i++) { + +#endif + int start_y = num_scanlines * i; + int end_Y = (std::min)(num_scanlines * (i + 1), exr_image->height); + int num_lines = end_Y - start_y; + + const unsigned char* const* images = + static_cast<const unsigned char* const*>(exr_image->images); + + data_list[i].resize(2*sizeof(int)); + size_t data_header_size = data_list[i].size(); + + bool ret = EncodePixelData(data_list[i], + images, + exr_header->compression_type, + 0, // increasing y + exr_image->width, + exr_image->height, + exr_image->width, + start_y, + num_lines, + pixel_data_size, + channels, + channel_offset_list, + compression_param); + if (!ret) { + invalid_data = true; + continue; // "break" cannot be used with OpenMP } + assert(data_list[i].size() > data_header_size); + int data_len = static_cast<int>(data_list[i].size() - data_header_size); + memcpy(&data_list[i][0], &start_y, sizeof(int)); + memcpy(&data_list[i][4], &data_len, sizeof(int)); + + swap4(reinterpret_cast<int*>(&data_list[i][0])); + swap4(reinterpret_cast<int*>(&data_list[i][4])); +#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0) + } + })); } - if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_NONE) { - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(uncompressed) - std::vector<unsigned char> header(8); - unsigned int data_len = static_cast<unsigned int>(buf.size()); - memcpy(&header.at(0), &start_y, sizeof(int)); - memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + for (auto &t : workers) { + t.join(); + } +#else + } // omp parallel +#endif + + if (invalid_data) { + if (err) { + (*err) += "Failed to encode scanline data.\n"; + } + return TINYEXR_ERROR_INVALID_DATA; + } - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0))); - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4))); + for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) { + offsets[i] = offset; + tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i])); + offset += data_list[i].size() + doffset; + } - data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); - data_list[ii].insert(data_list[ii].end(), buf.begin(), - buf.begin() + data_len); + total_size = static_cast<size_t>(offset); + } + return TINYEXR_SUCCESS; +} - } else if ((exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) || - (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) { -#if TINYEXR_USE_MINIZ - std::vector<unsigned char> block(tinyexr::miniz::mz_compressBound( - static_cast<unsigned long>(buf.size()))); +// can save a single or multi-part image (no deep* formats) +static size_t SaveEXRNPartImageToMemory(const EXRImage* exr_images, + const EXRHeader** exr_headers, + unsigned int num_parts, + unsigned char** memory_out, const char** err) { + if (exr_images == NULL || exr_headers == NULL || num_parts == 0 || + memory_out == NULL) { + SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory", + err); + return 0; + } + { + for (unsigned int i = 0; i < num_parts; ++i) { + if (exr_headers[i]->compression_type < 0) { + SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory", + err); + return 0; + } +#if !TINYEXR_USE_PIZ + if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { + SetErrorMessage("PIZ compression is not supported in this build", + err); + return 0; + } +#endif +#if !TINYEXR_USE_ZFP + if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { + SetErrorMessage("ZFP compression is not supported in this build", + err); + return 0; + } #else - std::vector<unsigned char> block( - compressBound(static_cast<uLong>(buf.size()))); + for (int c = 0; c < exr_header->num_channels; ++c) { + if (exr_headers[i]->requested_pixel_types[c] != TINYEXR_PIXELTYPE_FLOAT) { + SetErrorMessage("Pixel type must be FLOAT for ZFP compression", + err); + return 0; + } + } #endif - tinyexr::tinyexr_uint64 outSize = block.size(); - - tinyexr::CompressZip(&block.at(0), outSize, - reinterpret_cast<const unsigned char *>(&buf.at(0)), - static_cast<unsigned long>(buf.size())); + } + } - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(compressed) - std::vector<unsigned char> header(8); - unsigned int data_len = static_cast<unsigned int>(outSize); // truncate - memcpy(&header.at(0), &start_y, sizeof(int)); - memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + std::vector<unsigned char> memory; - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0))); - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4))); + // Header + { + const char header[] = { 0x76, 0x2f, 0x31, 0x01 }; + memory.insert(memory.end(), header, header + 4); + } - data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); - data_list[ii].insert(data_list[ii].end(), block.begin(), - block.begin() + data_len); + // Version + // using value from the first header + int long_name = exr_headers[0]->long_name; + { + char marker[] = { 2, 0, 0, 0 }; + /* @todo + if (exr_header->non_image) { + marker[1] |= 0x8; + } + */ + // tiled + if (num_parts == 1 && exr_images[0].tiles) { + marker[1] |= 0x2; + } + // long_name + if (long_name) { + marker[1] |= 0x4; + } + // multipart + if (num_parts > 1) { + marker[1] |= 0x10; + } + memory.insert(memory.end(), marker, marker + 4); + } - } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_RLE) { - // (buf.size() * 3) / 2 would be enough. - std::vector<unsigned char> block((buf.size() * 3) / 2); + int total_chunk_count = 0; + std::vector<int> chunk_count(num_parts); + std::vector<OffsetData> offset_data(num_parts); + for (unsigned int i = 0; i < num_parts; ++i) { + if (!exr_images[i].tiles) { + int num_scanlines = NumScanlines(exr_headers[i]->compression_type); + chunk_count[i] = + (exr_images[i].height + num_scanlines - 1) / num_scanlines; + InitSingleResolutionOffsets(offset_data[i], chunk_count[i]); + total_chunk_count += chunk_count[i]; + } else { + { + std::vector<int> num_x_tiles, num_y_tiles; + PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]); + chunk_count[i] = + InitTileOffsets(offset_data[i], exr_headers[i], num_x_tiles, num_y_tiles); + total_chunk_count += chunk_count[i]; + } + } + } + // Write attributes to memory buffer. + std::vector< std::vector<tinyexr::ChannelInfo> > channels(num_parts); + { + std::set<std::string> partnames; + for (unsigned int i = 0; i < num_parts; ++i) { + //channels + { + std::vector<unsigned char> data; + + for (int c = 0; c < exr_headers[i]->num_channels; c++) { + tinyexr::ChannelInfo info; + info.p_linear = 0; + info.pixel_type = exr_headers[i]->pixel_types[c]; + info.requested_pixel_type = exr_headers[i]->requested_pixel_types[c]; + info.x_sampling = 1; + info.y_sampling = 1; + info.name = std::string(exr_headers[i]->channels[c].name); + channels[i].push_back(info); + } - tinyexr::tinyexr_uint64 outSize = block.size(); + tinyexr::WriteChannelInfo(data, channels[i]); - tinyexr::CompressRle(&block.at(0), outSize, - reinterpret_cast<const unsigned char *>(&buf.at(0)), - static_cast<unsigned long>(buf.size())); + tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0), + static_cast<int>(data.size())); + } - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(compressed) - std::vector<unsigned char> header(8); - unsigned int data_len = static_cast<unsigned int>(outSize); // truncate - memcpy(&header.at(0), &start_y, sizeof(int)); - memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + { + int comp = exr_headers[i]->compression_type; + swap4(&comp); + WriteAttributeToMemory( + &memory, "compression", "compression", + reinterpret_cast<const unsigned char*>(&comp), 1); + } - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0))); - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4))); + { + int data[4] = { 0, 0, exr_images[i].width - 1, exr_images[i].height - 1 }; + swap4(&data[0]); + swap4(&data[1]); + swap4(&data[2]); + swap4(&data[3]); + WriteAttributeToMemory( + &memory, "dataWindow", "box2i", + reinterpret_cast<const unsigned char*>(data), sizeof(int) * 4); + + int data0[4] = { 0, 0, exr_images[0].width - 1, exr_images[0].height - 1 }; + swap4(&data0[0]); + swap4(&data0[1]); + swap4(&data0[2]); + swap4(&data0[3]); + // Note: must be the same across parts (currently, using value from the first header) + WriteAttributeToMemory( + &memory, "displayWindow", "box2i", + reinterpret_cast<const unsigned char*>(data0), sizeof(int) * 4); + } - data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); - data_list[ii].insert(data_list[ii].end(), block.begin(), - block.begin() + data_len); + { + unsigned char line_order = 0; // @fixme { read line_order from EXRHeader } + WriteAttributeToMemory(&memory, "lineOrder", "lineOrder", + &line_order, 1); + } - } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { -#if TINYEXR_USE_PIZ - unsigned int bufLen = - 8192 + static_cast<unsigned int>( - 2 * static_cast<unsigned int>( - buf.size())); // @fixme { compute good bound. } - std::vector<unsigned char> block(bufLen); - unsigned int outSize = static_cast<unsigned int>(block.size()); - - CompressPiz(&block.at(0), &outSize, - reinterpret_cast<const unsigned char *>(&buf.at(0)), - buf.size(), channels, exr_image->width, h); - - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(compressed) - std::vector<unsigned char> header(8); - unsigned int data_len = outSize; - memcpy(&header.at(0), &start_y, sizeof(int)); - memcpy(&header.at(4), &data_len, sizeof(unsigned int)); - - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0))); - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4))); - - data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); - data_list[ii].insert(data_list[ii].end(), block.begin(), - block.begin() + data_len); + { + // Note: must be the same across parts + float aspectRatio = 1.0f; + swap4(&aspectRatio); + WriteAttributeToMemory( + &memory, "pixelAspectRatio", "float", + reinterpret_cast<const unsigned char*>(&aspectRatio), sizeof(float)); + } -#else - assert(0); -#endif - } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { -#if TINYEXR_USE_ZFP - std::vector<unsigned char> block; - unsigned int outSize; + { + float center[2] = { 0.0f, 0.0f }; + swap4(¢er[0]); + swap4(¢er[1]); + WriteAttributeToMemory( + &memory, "screenWindowCenter", "v2f", + reinterpret_cast<const unsigned char*>(center), 2 * sizeof(float)); + } - tinyexr::CompressZfp( - &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)), - exr_image->width, h, exr_header->num_channels, zfp_compression_param); + { + float w = 1.0f; + swap4(&w); + WriteAttributeToMemory(&memory, "screenWindowWidth", "float", + reinterpret_cast<const unsigned char*>(&w), + sizeof(float)); + } - // 4 byte: scan line - // 4 byte: data size - // ~ : pixel data(compressed) - std::vector<unsigned char> header(8); - unsigned int data_len = outSize; - memcpy(&header.at(0), &start_y, sizeof(int)); - memcpy(&header.at(4), &data_len, sizeof(unsigned int)); + if (exr_images[i].tiles) { + unsigned char tile_mode = static_cast<unsigned char>(exr_headers[i]->tile_level_mode & 0x3); + if (exr_headers[i]->tile_rounding_mode) tile_mode |= (1u << 4u); + //unsigned char data[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + unsigned int datai[3] = { 0, 0, 0 }; + unsigned char* data = reinterpret_cast<unsigned char*>(&datai[0]); + datai[0] = static_cast<unsigned int>(exr_headers[i]->tile_size_x); + datai[1] = static_cast<unsigned int>(exr_headers[i]->tile_size_y); + data[8] = tile_mode; + swap4(reinterpret_cast<unsigned int*>(&data[0])); + swap4(reinterpret_cast<unsigned int*>(&data[4])); + WriteAttributeToMemory( + &memory, "tiles", "tiledesc", + reinterpret_cast<const unsigned char*>(data), 9); + } - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0))); - tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4))); + // must be present for multi-part files - according to spec. + if (num_parts > 1) { + // name + { + size_t len = 0; + if ((len = strlen(exr_headers[i]->name)) > 0) { + partnames.emplace(exr_headers[i]->name); + if (partnames.size() != i + 1) { + SetErrorMessage("'name' attributes must be unique for a multi-part file", err); + return 0; + } + WriteAttributeToMemory( + &memory, "name", "string", + reinterpret_cast<const unsigned char*>(exr_headers[i]->name), + static_cast<int>(len)); + } else { + SetErrorMessage("Invalid 'name' attribute for a multi-part file", err); + return 0; + } + } + // type + { + const char* type = "scanlineimage"; + if (exr_images[i].tiles) type = "tiledimage"; + WriteAttributeToMemory( + &memory, "type", "string", + reinterpret_cast<const unsigned char*>(type), + static_cast<int>(strlen(type))); + } + // chunkCount + { + WriteAttributeToMemory( + &memory, "chunkCount", "int", + reinterpret_cast<const unsigned char*>(&chunk_count[i]), + 4); + } + } - data_list[ii].insert(data_list[ii].end(), header.begin(), header.end()); - data_list[ii].insert(data_list[ii].end(), block.begin(), - block.begin() + data_len); + // Custom attributes + if (exr_headers[i]->num_custom_attributes > 0) { + for (int j = 0; j < exr_headers[i]->num_custom_attributes; j++) { + tinyexr::WriteAttributeToMemory( + &memory, exr_headers[i]->custom_attributes[j].name, + exr_headers[i]->custom_attributes[j].type, + reinterpret_cast<const unsigned char*>( + exr_headers[i]->custom_attributes[j].value), + exr_headers[i]->custom_attributes[j].size); + } + } -#else - assert(0); -#endif - } else { - assert(0); + { // end of header + memory.push_back(0); + } } - } // omp parallel - - for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) { - offsets[i] = offset; - tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i])); - offset += data_list[i].size(); + } + if (num_parts > 1) { + // end of header list + memory.push_back(0); } - size_t totalSize = static_cast<size_t>(offset); - { - memory.insert( - memory.end(), reinterpret_cast<unsigned char *>(&offsets.at(0)), - reinterpret_cast<unsigned char *>(&offsets.at(0)) + - sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(num_blocks)); + tinyexr_uint64 chunk_offset = memory.size() + size_t(total_chunk_count) * sizeof(tinyexr_uint64); + + tinyexr_uint64 total_size = 0; + std::vector< std::vector< std::vector<unsigned char> > > data_lists(num_parts); + for (unsigned int i = 0; i < num_parts; ++i) { + std::string e; + int ret = EncodeChunk(&exr_images[i], exr_headers[i], + channels[i], + chunk_count[i], + // starting offset of current chunk after part-number + chunk_offset, + num_parts > 1, + offset_data[i], // output: block offsets, must be initialized + data_lists[i], // output + total_size, // output + &e); + if (ret != TINYEXR_SUCCESS) { + if (!e.empty()) { + tinyexr::SetErrorMessage(e, err); + } + return 0; + } + chunk_offset = total_size; } - if (memory.size() == 0) { + // Allocating required memory + if (total_size == 0) { // something went wrong tinyexr::SetErrorMessage("Output memory size is zero", err); return 0; } - - (*memory_out) = static_cast<unsigned char *>(malloc(totalSize)); - memcpy((*memory_out), &memory.at(0), memory.size()); - unsigned char *memory_ptr = *memory_out + memory.size(); - - for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) { - memcpy(memory_ptr, &data_list[i].at(0), data_list[i].size()); - memory_ptr += data_list[i].size(); + (*memory_out) = static_cast<unsigned char*>(malloc(total_size)); + + // Writing header + memcpy((*memory_out), &memory[0], memory.size()); + unsigned char* memory_ptr = *memory_out + memory.size(); + size_t sum = memory.size(); + + // Writing offset data for chunks + for (unsigned int i = 0; i < num_parts; ++i) { + if (exr_images[i].tiles) { + const EXRImage* level_image = &exr_images[i]; + int num_levels = (exr_headers[i]->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ? + offset_data[i].num_x_levels : (offset_data[i].num_x_levels * offset_data[i].num_y_levels); + for (int level_index = 0; level_index < num_levels; ++level_index) { + for (size_t j = 0; j < offset_data[i].offsets[level_index].size(); ++j) { + size_t num_bytes = sizeof(tinyexr_uint64) * offset_data[i].offsets[level_index][j].size(); + sum += num_bytes; + assert(sum <= total_size); + memcpy(memory_ptr, + reinterpret_cast<unsigned char*>(&offset_data[i].offsets[level_index][j][0]), + num_bytes); + memory_ptr += num_bytes; + } + level_image = level_image->next_level; + } + } else { + size_t num_bytes = sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(chunk_count[i]); + sum += num_bytes; + assert(sum <= total_size); + std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data[i].offsets[0][0]; + memcpy(memory_ptr, reinterpret_cast<unsigned char*>(&offsets[0]), num_bytes); + memory_ptr += num_bytes; + } + } + + // Writing chunk data + for (unsigned int i = 0; i < num_parts; ++i) { + for (size_t j = 0; j < static_cast<size_t>(chunk_count[i]); ++j) { + if (num_parts > 1) { + sum += 4; + assert(sum <= total_size); + unsigned int part_number = i; + swap4(&part_number); + memcpy(memory_ptr, &part_number, 4); + memory_ptr += 4; + } + sum += data_lists[i][j].size(); + assert(sum <= total_size); + memcpy(memory_ptr, &data_lists[i][j][0], data_lists[i][j].size()); + memory_ptr += data_lists[i][j].size(); + } } + assert(sum == total_size); + return total_size; // OK +} + +} // tinyexr - return totalSize; // OK +size_t SaveEXRImageToMemory(const EXRImage* exr_image, + const EXRHeader* exr_header, + unsigned char** memory_out, const char** err) { + return tinyexr::SaveEXRNPartImageToMemory(exr_image, &exr_header, 1, memory_out, err); } int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, @@ -12690,7 +7293,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb"); if (errcode != 0) { @@ -12699,7 +7302,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, return TINYEXR_ERROR_CANT_WRITE_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "wb"); #endif #else @@ -12733,6 +7336,75 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, return TINYEXR_SUCCESS; } +size_t SaveEXRMultipartImageToMemory(const EXRImage* exr_images, + const EXRHeader** exr_headers, + unsigned int num_parts, + unsigned char** memory_out, const char** err) { + if (exr_images == NULL || exr_headers == NULL || num_parts < 2 || + memory_out == NULL) { + tinyexr::SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory", + err); + return 0; + } + return tinyexr::SaveEXRNPartImageToMemory(exr_images, exr_headers, num_parts, memory_out, err); +} + +int SaveEXRMultipartImageToFile(const EXRImage* exr_images, + const EXRHeader** exr_headers, + unsigned int num_parts, + const char* filename, + const char** err) { + if (exr_images == NULL || exr_headers == NULL || num_parts < 2) { + tinyexr::SetErrorMessage("Invalid argument for SaveEXRMultipartImageToFile", + err); + return TINYEXR_ERROR_INVALID_ARGUMENT; + } + + FILE *fp = NULL; +#ifdef _WIN32 +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. + errno_t errcode = + _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb"); + if (errcode != 0) { + tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename), + err); + return TINYEXR_ERROR_CANT_WRITE_FILE; + } +#else + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. + fp = fopen(filename, "wb"); +#endif +#else + fp = fopen(filename, "wb"); +#endif + if (!fp) { + tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename), + err); + return TINYEXR_ERROR_CANT_WRITE_FILE; + } + + unsigned char *mem = NULL; + size_t mem_size = SaveEXRMultipartImageToMemory(exr_images, exr_headers, num_parts, &mem, err); + if (mem_size == 0) { + return TINYEXR_ERROR_SERIALZATION_FAILED; + } + + size_t written_size = 0; + if ((mem_size > 0) && mem) { + written_size = fwrite(mem, 1, mem_size, fp); + } + free(mem); + + fclose(fp); + + if (written_size != mem_size) { + tinyexr::SetErrorMessage("Cannot write a file", err); + return TINYEXR_ERROR_CANT_WRITE_FILE; + } + + return TINYEXR_SUCCESS; +} + int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) { if (deep_image == NULL) { tinyexr::SetErrorMessage("Invalid argument for LoadDeepEXR", err); @@ -12741,7 +7413,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) { #ifdef _WIN32 FILE *fp = NULL; -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (errcode != 0) { @@ -12750,7 +7422,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) { return TINYEXR_ERROR_CANT_OPEN_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif if (!fp) { @@ -12917,9 +7589,6 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) { int data_width = dw - dx + 1; int data_height = dh - dy + 1; - std::vector<float> image( - static_cast<size_t>(data_width * data_height * 4)); // 4 = RGBA - // Read offset tables. int num_blocks = data_height / num_scanline_blocks; if (num_blocks * num_scanline_blocks < data_height) { @@ -13138,6 +7807,9 @@ void InitEXRImage(EXRImage *exr_image) { exr_image->images = NULL; exr_image->tiles = NULL; + exr_image->next_level = NULL; + exr_image->level_x = 0; + exr_image->level_y = 0; exr_image->num_tiles = 0; } @@ -13184,14 +7856,43 @@ int FreeEXRHeader(EXRHeader *exr_header) { free(exr_header->custom_attributes); } + EXRSetNameAttr(exr_header, NULL); + return TINYEXR_SUCCESS; } +void EXRSetNameAttr(EXRHeader* exr_header, const char* name) { + if (exr_header == NULL) { + return; + } + memset(exr_header->name, 0, 256); + if (name != NULL) { + size_t len = std::min(strlen(name), (size_t)255); + if (len) { + memcpy(exr_header->name, name, len); + } + } +} + +int EXRNumLevels(const EXRImage* exr_image) { + if (exr_image == NULL) return 0; + if(exr_image->images) return 1; // scanlines + int levels = 1; + const EXRImage* level_image = exr_image; + while((level_image = level_image->next_level)) ++levels; + return levels; +} + int FreeEXRImage(EXRImage *exr_image) { if (exr_image == NULL) { return TINYEXR_ERROR_INVALID_ARGUMENT; } + if (exr_image->next_level) { + FreeEXRImage(exr_image->next_level); + delete exr_image->next_level; + } + for (int i = 0; i < exr_image->num_channels; i++) { if (exr_image->images && exr_image->images[i]) { free(exr_image->images[i]); @@ -13229,7 +7930,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version, FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (errcode != 0) { @@ -13237,7 +7938,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version, return TINYEXR_ERROR_INVALID_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif #else @@ -13333,11 +8034,11 @@ int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers, static_cast<EXRHeader **>(malloc(sizeof(EXRHeader *) * infos.size())); for (size_t i = 0; i < infos.size(); i++) { EXRHeader *exr_header = static_cast<EXRHeader *>(malloc(sizeof(EXRHeader))); + memset(exr_header, 0, sizeof(EXRHeader)); ConvertHeader(exr_header, infos[i]); - // transfoer `tiled` from version. - exr_header->tiled = exr_version->tiled; + exr_header->multipart = exr_version->multipart ? 1 : 0; (*exr_headers)[i] = exr_header; } @@ -13359,7 +8060,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers, FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (errcode != 0) { @@ -13367,7 +8068,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers, return TINYEXR_ERROR_INVALID_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif #else @@ -13465,14 +8166,14 @@ int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) { FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t err = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (err != 0) { // TODO(syoyo): return wfopen_s erro code return TINYEXR_ERROR_CANT_OPEN_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif #else @@ -13543,51 +8244,82 @@ int LoadEXRMultipartImageFromMemory(EXRImage *exr_images, // http://www.openexr.com/openexrfilelayout.pdf // Load chunk offset table. - std::vector<std::vector<tinyexr::tinyexr_uint64> > chunk_offset_table_list; + std::vector<tinyexr::OffsetData> chunk_offset_table_list; + chunk_offset_table_list.reserve(num_parts); for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) { - std::vector<tinyexr::tinyexr_uint64> offset_table( - static_cast<size_t>(exr_headers[i]->chunk_count)); - - for (size_t c = 0; c < offset_table.size(); c++) { - tinyexr::tinyexr_uint64 offset; - memcpy(&offset, marker, 8); - tinyexr::swap8(&offset); + chunk_offset_table_list.resize(chunk_offset_table_list.size() + 1); + tinyexr::OffsetData& offset_data = chunk_offset_table_list.back(); + if (!exr_headers[i]->tiled || exr_headers[i]->tile_level_mode == TINYEXR_TILE_ONE_LEVEL) { + tinyexr::InitSingleResolutionOffsets(offset_data, exr_headers[i]->chunk_count); + std::vector<tinyexr::tinyexr_uint64>& offset_table = offset_data.offsets[0][0]; + + for (size_t c = 0; c < offset_table.size(); c++) { + tinyexr::tinyexr_uint64 offset; + memcpy(&offset, marker, 8); + tinyexr::swap8(&offset); + + if (offset >= size) { + tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.", + err); + return TINYEXR_ERROR_INVALID_DATA; + } - if (offset >= size) { - tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.", - err); - return TINYEXR_ERROR_INVALID_DATA; + offset_table[c] = offset + 4; // +4 to skip 'part number' + marker += 8; + } + } else { + { + std::vector<int> num_x_tiles, num_y_tiles; + tinyexr::PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]); + int num_blocks = InitTileOffsets(offset_data, exr_headers[i], num_x_tiles, num_y_tiles); + if (num_blocks != exr_headers[i]->chunk_count) { + tinyexr::SetErrorMessage("Invalid offset table size.", err); + return TINYEXR_ERROR_INVALID_DATA; + } + } + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) { + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) { + for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) { + tinyexr::tinyexr_uint64 offset; + memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64)); + tinyexr::swap8(&offset); + if (offset >= size) { + tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.", + err); + return TINYEXR_ERROR_INVALID_DATA; + } + offset_data.offsets[l][dy][dx] = offset + 4; // +4 to skip 'part number' + marker += sizeof(tinyexr::tinyexr_uint64); // = 8 + } + } } - - offset_table[c] = offset + 4; // +4 to skip 'part number' - marker += 8; } - - chunk_offset_table_list.push_back(offset_table); } // Decode image. for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) { - std::vector<tinyexr::tinyexr_uint64> &offset_table = - chunk_offset_table_list[i]; + tinyexr::OffsetData &offset_data = chunk_offset_table_list[i]; // First check 'part number' is identitical to 'i' - for (size_t c = 0; c < offset_table.size(); c++) { - const unsigned char *part_number_addr = - memory + offset_table[c] - 4; // -4 to move to 'part number' field. - unsigned int part_no; - memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4 - tinyexr::swap4(&part_no); - - if (part_no != i) { - tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.", - err); - return TINYEXR_ERROR_INVALID_DATA; - } - } + for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) + for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) + for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) { + + const unsigned char *part_number_addr = + memory + offset_data.offsets[l][dy][dx] - 4; // -4 to move to 'part number' field. + unsigned int part_no; + memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4 + tinyexr::swap4(&part_no); + + if (part_no != i) { + tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.", + err); + return TINYEXR_ERROR_INVALID_DATA; + } + } std::string e; - int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_table, + int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_data, memory, size, &e); if (ret != TINYEXR_SUCCESS) { if (!e.empty()) { @@ -13612,7 +8344,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images, FILE *fp = NULL; #ifdef _WIN32 -#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang +#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang. errno_t errcode = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb"); if (errcode != 0) { @@ -13620,7 +8352,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images, return TINYEXR_ERROR_CANT_OPEN_FILE; } #else - // Unknown compiler + // Unknown compiler or MinGW without MINGW_HAS_SECURE_API. fp = fopen(filename, "rb"); #endif #else diff --git a/thirdparty/wslay/includes/config.h b/thirdparty/wslay/config.h index 771ad12528..f291801ba1 100644 --- a/thirdparty/wslay/includes/config.h +++ b/thirdparty/wslay/config.h @@ -1,8 +1,10 @@ #ifndef CONFIG_H #define CONFIG_H +// -- GODOT start -- #ifdef BIG_ENDIAN_ENABLED #define WORDS_BIGENDIAN #endif +// -- GODOT end -- #endif /* CONFIG_H */ diff --git a/thirdparty/wslay/msvcfix.diff b/thirdparty/wslay/patches/msvcfix.diff index 28721844f4..f58b6d44f0 100644 --- a/thirdparty/wslay/msvcfix.diff +++ b/thirdparty/wslay/patches/msvcfix.diff @@ -1,8 +1,8 @@ diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/includes/wslay/wslay.h -index 2fde81a4e..9c751b05b 100644 +index 77a4e8253f..ac6873613f 100644 --- a/thirdparty/wslay/includes/wslay/wslay.h +++ b/thirdparty/wslay/includes/wslay/wslay.h -@@ -33,6 +33,12 @@ extern "C" { +@@ -33,6 +33,13 @@ extern "C" { #include <stdlib.h> #include <sys/types.h> @@ -12,6 +12,7 @@ index 2fde81a4e..9c751b05b 100644 +typedef SSIZE_T ssize_t; +#endif +/* GODOT END */ - ++ /* * wslay/wslayver.h is generated from wslay/wslayver.h.in by + * configure. The projects which do not use autotools can set diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/wslay/wslay.h index 9c751b05b7..ac6873613f 100644 --- a/thirdparty/wslay/includes/wslay/wslay.h +++ b/thirdparty/wslay/wslay/wslay.h @@ -25,7 +25,7 @@ #ifndef WSLAY_H #define WSLAY_H -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -155,10 +155,10 @@ enum wslay_opcode { * These macros assume that rsv is constructed by ((RSV1 << 2) | * (RSV2 << 1) | RSV3) */ -#define WSLAY_RSV_NONE ((uint8_t) 0) -#define WSLAY_RSV1_BIT (((uint8_t) 1) << 2) -#define WSLAY_RSV2_BIT (((uint8_t) 1) << 1) -#define WSLAY_RSV3_BIT (((uint8_t) 1) << 0) +#define WSLAY_RSV_NONE ((uint8_t)0) +#define WSLAY_RSV1_BIT (((uint8_t)1) << 2) +#define WSLAY_RSV2_BIT (((uint8_t)1) << 1) +#define WSLAY_RSV3_BIT (((uint8_t)1) << 0) #define wslay_get_rsv1(rsv) ((rsv >> 2) & 1) #define wslay_get_rsv2(rsv) ((rsv >> 1) & 1) @@ -172,7 +172,7 @@ struct wslay_frame_iocb { * RFC6455 requires 0 unless extensions are negotiated. */ uint8_t rsv; - /* 4 bit opcode */ + /* 4 bit opcode */ uint8_t opcode; /* payload length [0, 2**63-1] */ uint64_t payload_length; @@ -229,6 +229,33 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, struct wslay_frame_iocb *iocb); /* + * Write WebSocket frame specified in iocb to buf of length + * buflen. ctx must be initialized using wslay_frame_context_init() + * function. iocb->fin must be 1 if this is a fin frame, otherwise 0. + * iocb->rsv is reserved bits. iocb->opcode must be the opcode of + * this frame. iocb->mask must be 1 if this is masked frame, + * otherwise 0. iocb->payload_length is the payload_length of this + * frame. iocb->data must point to the payload data to be + * sent. iocb->data_length must be the length of the data. Unlike + * wslay_frame_send, this function does not call send_callback + * function. This function calls gen_mask_callback function if it + * needs new mask key. This function returns the number of bytes + * written to a buffer. Unlike wslay_frame_send, it includes the + * number of header bytes. Instead, the number of payload bytes + * written is assigned to *pwpayloadlen if this function succeeds. If + * there is not enough space left in a buffer, it returns 0. If the + * library detects error in iocb, this function returns + * WSLAY_ERR_INVALID_ARGUMENT. If callback functions report a + * failure, this function returns WSLAY_ERR_INVALID_CALLBACK. This + * function does not always send all given data in iocb. If there are + * remaining data to be sent, adjust data and data_length in iocb + * accordingly and call this function again. + */ +ssize_t wslay_frame_write(wslay_frame_context_ptr ctx, + struct wslay_frame_iocb *iocb, uint8_t *buf, + size_t buflen, size_t *pwpayloadlen); + +/* * Receives WebSocket frame and stores it in iocb. This function * returns the number of payload bytes received. This does not * include header bytes. In this case, iocb will be populated as @@ -276,9 +303,9 @@ struct wslay_event_on_msg_recv_arg { * Callback function invoked by wslay_event_recv() when a message is * completely received. */ -typedef void (*wslay_event_on_msg_recv_callback) -(wslay_event_context_ptr ctx, - const struct wslay_event_on_msg_recv_arg *arg, void *user_data); +typedef void (*wslay_event_on_msg_recv_callback)( + wslay_event_context_ptr ctx, const struct wslay_event_on_msg_recv_arg *arg, + void *user_data); struct wslay_event_on_frame_recv_start_arg { /* fin bit; 1 for final frame, or 0. */ @@ -296,9 +323,9 @@ struct wslay_event_on_frame_recv_start_arg { * starts to be received. This callback function is only invoked once * for each frame. */ -typedef void (*wslay_event_on_frame_recv_start_callback) -(wslay_event_context_ptr ctx, - const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data); +typedef void (*wslay_event_on_frame_recv_start_callback)( + wslay_event_context_ptr ctx, + const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data); struct wslay_event_on_frame_recv_chunk_arg { /* chunk of payload data */ @@ -311,16 +338,16 @@ struct wslay_event_on_frame_recv_chunk_arg { * Callback function invoked by wslay_event_recv() when a chunk of * frame payload is received. */ -typedef void (*wslay_event_on_frame_recv_chunk_callback) -(wslay_event_context_ptr ctx, - const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data); +typedef void (*wslay_event_on_frame_recv_chunk_callback)( + wslay_event_context_ptr ctx, + const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data); /* * Callback function invoked by wslay_event_recv() when a frame is * completely received. */ -typedef void (*wslay_event_on_frame_recv_end_callback) -(wslay_event_context_ptr ctx, void *user_data); +typedef void (*wslay_event_on_frame_recv_end_callback)( + wslay_event_context_ptr ctx, void *user_data); /* * Callback function invoked by wslay_event_recv() when it wants to @@ -394,9 +421,9 @@ struct wslay_event_callbacks { * WSLAY_ERR_NOMEM * Out of memory. */ -int wslay_event_context_server_init -(wslay_event_context_ptr *ctx, - const struct wslay_event_callbacks *callbacks, void *user_data); +int wslay_event_context_server_init( + wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks, + void *user_data); /* * Initializes ctx as WebSocket client. user_data is an arbitrary @@ -409,9 +436,9 @@ int wslay_event_context_server_init * WSLAY_ERR_NOMEM * Out of memory. */ -int wslay_event_context_client_init -(wslay_event_context_ptr *ctx, - const struct wslay_event_callbacks *callbacks, void *user_data); +int wslay_event_context_client_init( + wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks, + void *user_data); /* * Releases allocated resources for ctx. @@ -462,8 +489,8 @@ void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx, * or wslay_event_context_server_init() or * wslay_event_context_client_init() are replaced with callbacks. */ -void wslay_event_config_set_callbacks -(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks); +void wslay_event_config_set_callbacks( + wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks); /* * Receives messages from peer. When receiving @@ -538,6 +565,50 @@ int wslay_event_recv(wslay_event_context_ptr ctx); */ int wslay_event_send(wslay_event_context_ptr ctx); +/* + * Writes queued messages to a buffer. Unlike wslay_event_send(), this + * function writes messages into the given buffer. It does not use + * wslay_event_send_callback function. Single call of + * wslay_event_write() writes multiple messages until there is not + * enough space left in a buffer. + * + * If ctx is initialized for WebSocket client use, wslay_event_write() + * uses wslay_event_genmask_callback to get new mask key. + * + * buf is a pointer to buffer and its capacity is given in buflen. It + * should have at least 14 bytes. + * + * When a message queued using wslay_event_queue_fragmented_msg() is + * sent, wslay_event_write() invokes + * wslay_event_fragmented_msg_callback for that message. + * + * After close control frame is sent, this function calls + * wslay_event_set_write_enabled() with second argument 0 to disable + * further transmission to peer. + * + * If there are any pending messages, wslay_event_want_write() returns + * 1, otherwise returns 0. + * + * In case of a fatal errror which leads to negative return code, this + * function calls wslay_event_set_write_enabled() with second argument + * 0 to disable further transmission to peer. + * + * wslay_event_write() returns the number of bytes written to a buffer + * if it succeeds, or one of the following negative error codes: + * + * WSLAY_ERR_CALLBACK_FAILURE + * User defined callback function is failed. + * + * WSLAY_ERR_NOMEM + * Out of memory. + * + * When negative error code is returned, application must not make any + * further call of wslay_event_write() and must close WebSocket + * connection. + */ +ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf, + size_t buflen); + struct wslay_event_msg { uint8_t opcode; const uint8_t *msg; @@ -594,10 +665,9 @@ union wslay_event_msg_source { * moment, return 0. If there is an error, return -1 and set error * code WSLAY_ERR_CALLBACK_FAILURE using wslay_event_set_error(). */ -typedef ssize_t (*wslay_event_fragmented_msg_callback) -(wslay_event_context_ptr ctx, - uint8_t *buf, size_t len, const union wslay_event_msg_source *source, - int *eof, void *user_data); +typedef ssize_t (*wslay_event_fragmented_msg_callback)( + wslay_event_context_ptr ctx, uint8_t *buf, size_t len, + const union wslay_event_msg_source *source, int *eof, void *user_data); struct wslay_event_fragmented_msg { /* opcode */ @@ -631,15 +701,16 @@ struct wslay_event_fragmented_msg { * WSLAY_ERR_NOMEM * Out of memory. */ -int wslay_event_queue_fragmented_msg -(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg); +int wslay_event_queue_fragmented_msg( + wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg); /* * Extended version of wslay_event_queue_fragmented_msg which allows to set * reserved bits. */ -int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx, - const struct wslay_event_fragmented_msg *arg, uint8_t rsv); +int wslay_event_queue_fragmented_msg_ex( + wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg, + uint8_t rsv); /* * Queues close control frame. This function is provided just for @@ -669,8 +740,7 @@ int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx, * WSLAY_ERR_NOMEM * Out of memory. */ -int wslay_event_queue_close(wslay_event_context_ptr ctx, - uint16_t status_code, +int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code, const uint8_t *reason, size_t reason_length); /* diff --git a/thirdparty/wslay/includes/wslay/wslayver.h b/thirdparty/wslay/wslay/wslayver.h index 28f2018039..28f2018039 100644 --- a/thirdparty/wslay/includes/wslay/wslayver.h +++ b/thirdparty/wslay/wslay/wslayver.h diff --git a/thirdparty/wslay/wslay_event.c b/thirdparty/wslay/wslay_event.c index 140f7c01da..4c29fe4000 100644 --- a/thirdparty/wslay/wslay_event.c +++ b/thirdparty/wslay/wslay_event.c @@ -28,9 +28,9 @@ #include <assert.h> #include <stdio.h> -#include "wslay_queue.h" #include "wslay_frame.h" #include "wslay_net.h" +#include "wslay_macro.h" /* Start of utf8 dfa */ /* Copyright (c) 2008-2010 Bjoern Hoehrmann <bjoern@hoehrmann.de> * See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. @@ -60,6 +60,7 @@ #define UTF8_ACCEPT 0 #define UTF8_REJECT 12 +/* clang-format off */ static const uint8_t utf8d[] = { /* * The first part of the table maps bytes to character classes that @@ -84,14 +85,13 @@ static const uint8_t utf8d[] = { 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,12,12,12,12,12, }; +/* clang-format on */ -static uint32_t -decode(uint32_t* state, uint32_t* codep, uint32_t byte) { +static uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte) { uint32_t type = utf8d[byte]; - *codep = (*state != UTF8_ACCEPT) ? - (byte & 0x3fu) | (*codep << 6) : - (0xff >> type) & (byte); + *codep = (*state != UTF8_ACCEPT) ? (byte & 0x3fu) | (*codep << 6) + : (0xff >> type) & (byte); *state = utf8d[256 + *state + type]; return *state; @@ -100,117 +100,96 @@ decode(uint32_t* state, uint32_t* codep, uint32_t byte) { /* End of utf8 dfa */ static ssize_t wslay_event_frame_recv_callback(uint8_t *buf, size_t len, - int flags, void *user_data) -{ + int flags, void *user_data) { struct wslay_event_frame_user_data *e = - (struct wslay_event_frame_user_data*)user_data; + (struct wslay_event_frame_user_data *)user_data; return e->ctx->callbacks.recv_callback(e->ctx, buf, len, flags, e->user_data); } static ssize_t wslay_event_frame_send_callback(const uint8_t *data, size_t len, - int flags, void *user_data) -{ + int flags, void *user_data) { struct wslay_event_frame_user_data *e = - (struct wslay_event_frame_user_data*)user_data; + (struct wslay_event_frame_user_data *)user_data; return e->ctx->callbacks.send_callback(e->ctx, data, len, flags, e->user_data); } static int wslay_event_frame_genmask_callback(uint8_t *buf, size_t len, - void *user_data) -{ + void *user_data) { struct wslay_event_frame_user_data *e = - (struct wslay_event_frame_user_data*)user_data; + (struct wslay_event_frame_user_data *)user_data; return e->ctx->callbacks.genmask_callback(e->ctx, buf, len, e->user_data); } -static int wslay_event_byte_chunk_init -(struct wslay_event_byte_chunk **chunk, size_t len) -{ - *chunk = (struct wslay_event_byte_chunk*)malloc - (sizeof(struct wslay_event_byte_chunk)); - if(*chunk == NULL) { +static int wslay_event_byte_chunk_init(struct wslay_event_byte_chunk **chunk, + size_t len) { + *chunk = malloc(sizeof(struct wslay_event_byte_chunk) + len); + if (*chunk == NULL) { return WSLAY_ERR_NOMEM; } memset(*chunk, 0, sizeof(struct wslay_event_byte_chunk)); - if(len) { - (*chunk)->data = (uint8_t*)malloc(len); - if((*chunk)->data == NULL) { - free(*chunk); - return WSLAY_ERR_NOMEM; - } + if (len) { + (*chunk)->data = (uint8_t *)(*chunk) + sizeof(**chunk); (*chunk)->data_length = len; } return 0; } -static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c) -{ - if(!c) { - return; - } - free(c->data); +static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c) { free(c); } static void wslay_event_byte_chunk_copy(struct wslay_event_byte_chunk *c, - size_t off, - const uint8_t *data, size_t data_length) -{ - memcpy(c->data+off, data, data_length); + size_t off, const uint8_t *data, + size_t data_length) { + memcpy(c->data + off, data, data_length); } -static void wslay_event_imsg_set(struct wslay_event_imsg *m, - uint8_t fin, uint8_t rsv, uint8_t opcode) -{ +static void wslay_event_imsg_set(struct wslay_event_imsg *m, uint8_t fin, + uint8_t rsv, uint8_t opcode) { m->fin = fin; m->rsv = rsv; m->opcode = opcode; m->msg_length = 0; } -static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m) -{ - if(!m->chunks) { - return; - } - while(!wslay_queue_empty(m->chunks)) { - wslay_event_byte_chunk_free(wslay_queue_top(m->chunks)); - wslay_queue_pop(m->chunks); +static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m) { + while (!wslay_queue_empty(&m->chunks)) { + struct wslay_event_byte_chunk *chunk = wslay_struct_of( + wslay_queue_top(&m->chunks), struct wslay_event_byte_chunk, qe); + wslay_queue_pop(&m->chunks); + wslay_event_byte_chunk_free(chunk); } } -static void wslay_event_imsg_reset(struct wslay_event_imsg *m) -{ +static void wslay_event_imsg_reset(struct wslay_event_imsg *m) { m->opcode = 0xffu; m->utf8state = UTF8_ACCEPT; wslay_event_imsg_chunks_free(m); } -static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m, size_t len) -{ - if(len == 0) { +static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m, + size_t len) { + if (len == 0) { return 0; } else { int r; struct wslay_event_byte_chunk *chunk; - if((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) { - return r; - } - if((r = wslay_queue_push(m->chunks, chunk)) != 0) { + if ((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) { return r; } + wslay_queue_push(&m->chunks, &chunk->qe); m->msg_length += len; return 0; } } -static int wslay_event_omsg_non_fragmented_init -(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv, - const uint8_t *msg, size_t msg_length) -{ - *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg)); - if(!*m) { +static int wslay_event_omsg_non_fragmented_init(struct wslay_event_omsg **m, + uint8_t opcode, uint8_t rsv, + const uint8_t *msg, + size_t msg_length) { + *m = malloc(sizeof(struct wslay_event_omsg) + msg_length); + if (!*m) { return WSLAY_ERR_NOMEM; } memset(*m, 0, sizeof(struct wslay_event_omsg)); @@ -218,28 +197,22 @@ static int wslay_event_omsg_non_fragmented_init (*m)->opcode = opcode; (*m)->rsv = rsv; (*m)->type = WSLAY_NON_FRAGMENTED; - if(msg_length) { - (*m)->data = (uint8_t*)malloc(msg_length); - if(!(*m)->data) { - free(*m); - return WSLAY_ERR_NOMEM; - } + if (msg_length) { + (*m)->data = (uint8_t *)(*m) + sizeof(**m); memcpy((*m)->data, msg, msg_length); (*m)->data_length = msg_length; } return 0; } -static int wslay_event_omsg_fragmented_init -(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv, - const union wslay_event_msg_source source, - wslay_event_fragmented_msg_callback read_callback) -{ - *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg)); - if(!*m) { +static int wslay_event_omsg_fragmented_init( + struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv, + const union wslay_event_msg_source source, + wslay_event_fragmented_msg_callback read_callback) { + *m = calloc(1, sizeof(struct wslay_event_omsg)); + if (!*m) { return WSLAY_ERR_NOMEM; } - memset(*m, 0, sizeof(struct wslay_event_omsg)); (*m)->opcode = opcode; (*m)->rsv = rsv; (*m)->type = WSLAY_FRAGMENTED; @@ -248,31 +221,25 @@ static int wslay_event_omsg_fragmented_init return 0; } -static void wslay_event_omsg_free(struct wslay_event_omsg *m) -{ - if(!m) { - return; - } - free(m->data); - free(m); -} +static void wslay_event_omsg_free(struct wslay_event_omsg *m) { free(m); } -static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len) -{ - if(len == 0) { +static uint8_t *wslay_event_flatten_queue(struct wslay_queue *queue, + size_t len) { + if (len == 0) { return NULL; } else { size_t off = 0; - uint8_t *buf = (uint8_t*)malloc(len); - if(!buf) { + uint8_t *buf = malloc(len); + if (!buf) { return NULL; } - while(!wslay_queue_empty(queue)) { - struct wslay_event_byte_chunk *chunk = wslay_queue_top(queue); - memcpy(buf+off, chunk->data, chunk->data_length); + while (!wslay_queue_empty(queue)) { + struct wslay_event_byte_chunk *chunk = wslay_struct_of( + wslay_queue_top(queue), struct wslay_event_byte_chunk, qe); + wslay_queue_pop(queue); + memcpy(buf + off, chunk->data, chunk->data_length); off += chunk->data_length; wslay_event_byte_chunk_free(chunk); - wslay_queue_pop(queue); assert(off <= len); } assert(len == off); @@ -280,17 +247,15 @@ static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len) } } -static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx) -{ +static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx) { return ctx->write_enabled && (ctx->close_status & WSLAY_CLOSE_QUEUED) == 0; } int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code, - const uint8_t *reason, size_t reason_length) -{ - if(!wslay_event_is_msg_queueable(ctx)) { + const uint8_t *reason, size_t reason_length) { + if (!wslay_event_is_msg_queueable(ctx)) { return WSLAY_ERR_NO_MORE_MSG; - } else if(reason_length > 123) { + } else if (reason_length > 123) { return WSLAY_ERR_INVALID_ARGUMENT; } else { uint8_t msg[128]; @@ -298,231 +263,203 @@ int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code, struct wslay_event_msg arg; uint16_t ncode; int r; - if(status_code == 0) { + if (status_code == 0) { msg_length = 0; } else { ncode = htons(status_code); memcpy(msg, &ncode, 2); - if(reason_length) { - memcpy(msg+2, reason, reason_length); + if (reason_length) { + memcpy(msg + 2, reason, reason_length); } - msg_length = reason_length+2; + msg_length = reason_length + 2; } arg.opcode = WSLAY_CONNECTION_CLOSE; arg.msg = msg; arg.msg_length = msg_length; r = wslay_event_queue_msg(ctx, &arg); - if(r == 0) { + if (r == 0) { ctx->close_status |= WSLAY_CLOSE_QUEUED; } return r; } } -static int wslay_event_queue_close_wrapper -(wslay_event_context_ptr ctx, uint16_t status_code, - const uint8_t *reason, size_t reason_length) -{ +static int wslay_event_queue_close_wrapper(wslay_event_context_ptr ctx, + uint16_t status_code, + const uint8_t *reason, + size_t reason_length) { int r; ctx->read_enabled = 0; - if((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) && - r != WSLAY_ERR_NO_MORE_MSG) { + if ((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) && + r != WSLAY_ERR_NO_MORE_MSG) { return r; } return 0; } -static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx, uint8_t rsv) -{ +static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx, + uint8_t rsv) { return ((rsv & ~ctx->allowed_rsv_bits) == 0); } int wslay_event_queue_msg(wslay_event_context_ptr ctx, - const struct wslay_event_msg *arg) -{ + const struct wslay_event_msg *arg) { return wslay_event_queue_msg_ex(ctx, arg, WSLAY_RSV_NONE); } int wslay_event_queue_msg_ex(wslay_event_context_ptr ctx, - const struct wslay_event_msg *arg, uint8_t rsv) -{ + const struct wslay_event_msg *arg, uint8_t rsv) { int r; struct wslay_event_omsg *omsg; - if(!wslay_event_is_msg_queueable(ctx)) { + if (!wslay_event_is_msg_queueable(ctx)) { return WSLAY_ERR_NO_MORE_MSG; } /* RSV1 is not allowed for control frames */ - if((wslay_is_ctrl_frame(arg->opcode) && - (arg->msg_length > 125 || wslay_get_rsv1(rsv))) - || !wslay_event_verify_rsv_bits(ctx, rsv)) { + if ((wslay_is_ctrl_frame(arg->opcode) && + (arg->msg_length > 125 || wslay_get_rsv1(rsv))) || + !wslay_event_verify_rsv_bits(ctx, rsv)) { return WSLAY_ERR_INVALID_ARGUMENT; } - if((r = wslay_event_omsg_non_fragmented_init - (&omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) { + if ((r = wslay_event_omsg_non_fragmented_init( + &omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) { return r; } - if(wslay_is_ctrl_frame(arg->opcode)) { - if((r = wslay_queue_push(ctx->send_ctrl_queue, omsg)) != 0) { - return r; - } + if (wslay_is_ctrl_frame(arg->opcode)) { + wslay_queue_push(&ctx->send_ctrl_queue, &omsg->qe); } else { - if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) { - return r; - } + wslay_queue_push(&ctx->send_queue, &omsg->qe); } ++ctx->queued_msg_count; ctx->queued_msg_length += arg->msg_length; return 0; } -int wslay_event_queue_fragmented_msg -(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg) -{ +int wslay_event_queue_fragmented_msg( + wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg) { return wslay_event_queue_fragmented_msg_ex(ctx, arg, WSLAY_RSV_NONE); } -int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx, - const struct wslay_event_fragmented_msg *arg, uint8_t rsv) -{ +int wslay_event_queue_fragmented_msg_ex( + wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg, + uint8_t rsv) { int r; struct wslay_event_omsg *omsg; - if(!wslay_event_is_msg_queueable(ctx)) { + if (!wslay_event_is_msg_queueable(ctx)) { return WSLAY_ERR_NO_MORE_MSG; } - if(wslay_is_ctrl_frame(arg->opcode) || - !wslay_event_verify_rsv_bits(ctx, rsv)) { + if (wslay_is_ctrl_frame(arg->opcode) || + !wslay_event_verify_rsv_bits(ctx, rsv)) { return WSLAY_ERR_INVALID_ARGUMENT; } - if((r = wslay_event_omsg_fragmented_init - (&omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) { - return r; - } - if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) { + if ((r = wslay_event_omsg_fragmented_init( + &omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) { return r; } + wslay_queue_push(&ctx->send_queue, &omsg->qe); ++ctx->queued_msg_count; return 0; } -void wslay_event_config_set_callbacks -(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks) -{ +void wslay_event_config_set_callbacks( + wslay_event_context_ptr ctx, + const struct wslay_event_callbacks *callbacks) { ctx->callbacks = *callbacks; } -static int wslay_event_context_init -(wslay_event_context_ptr *ctx, - const struct wslay_event_callbacks *callbacks, - void *user_data) -{ +static int +wslay_event_context_init(wslay_event_context_ptr *ctx, + const struct wslay_event_callbacks *callbacks, + void *user_data) { int i, r; struct wslay_frame_callbacks frame_callbacks = { - wslay_event_frame_send_callback, - wslay_event_frame_recv_callback, - wslay_event_frame_genmask_callback - }; - *ctx = (wslay_event_context_ptr)malloc(sizeof(struct wslay_event_context)); - if(!*ctx) { + wslay_event_frame_send_callback, wslay_event_frame_recv_callback, + wslay_event_frame_genmask_callback}; + *ctx = calloc(1, sizeof(struct wslay_event_context)); + if (!*ctx) { return WSLAY_ERR_NOMEM; } - memset(*ctx, 0, sizeof(struct wslay_event_context)); wslay_event_config_set_callbacks(*ctx, callbacks); (*ctx)->user_data = user_data; (*ctx)->frame_user_data.ctx = *ctx; (*ctx)->frame_user_data.user_data = user_data; - if((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks, - &(*ctx)->frame_user_data)) != 0) { + if ((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks, + &(*ctx)->frame_user_data)) != 0) { wslay_event_context_free(*ctx); return r; } (*ctx)->read_enabled = (*ctx)->write_enabled = 1; - (*ctx)->send_queue = wslay_queue_new(); - if(!(*ctx)->send_queue) { - wslay_event_context_free(*ctx); - return WSLAY_ERR_NOMEM; - } - (*ctx)->send_ctrl_queue = wslay_queue_new(); - if(!(*ctx)->send_ctrl_queue) { - wslay_event_context_free(*ctx); - return WSLAY_ERR_NOMEM; - } + wslay_queue_init(&(*ctx)->send_queue); + wslay_queue_init(&(*ctx)->send_ctrl_queue); (*ctx)->queued_msg_count = 0; (*ctx)->queued_msg_length = 0; - for(i = 0; i < 2; ++i) { + for (i = 0; i < 2; ++i) { + wslay_queue_init(&(*ctx)->imsgs[i].chunks); wslay_event_imsg_reset(&(*ctx)->imsgs[i]); - (*ctx)->imsgs[i].chunks = wslay_queue_new(); - if(!(*ctx)->imsgs[i].chunks) { - wslay_event_context_free(*ctx); - return WSLAY_ERR_NOMEM; - } } (*ctx)->imsg = &(*ctx)->imsgs[0]; (*ctx)->obufmark = (*ctx)->obuflimit = (*ctx)->obuf; (*ctx)->status_code_sent = WSLAY_CODE_ABNORMAL_CLOSURE; (*ctx)->status_code_recv = WSLAY_CODE_ABNORMAL_CLOSURE; - (*ctx)->max_recv_msg_length = (1u << 31)-1; + (*ctx)->max_recv_msg_length = (1u << 31) - 1; return 0; } -int wslay_event_context_server_init -(wslay_event_context_ptr *ctx, - const struct wslay_event_callbacks *callbacks, - void *user_data) -{ +int wslay_event_context_server_init( + wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks, + void *user_data) { int r; - if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) { + if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) { return r; } (*ctx)->server = 1; return 0; } -int wslay_event_context_client_init -(wslay_event_context_ptr *ctx, - const struct wslay_event_callbacks *callbacks, - void *user_data) -{ +int wslay_event_context_client_init( + wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks, + void *user_data) { int r; - if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) { + if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) { return r; } (*ctx)->server = 0; return 0; } -void wslay_event_context_free(wslay_event_context_ptr ctx) -{ +void wslay_event_context_free(wslay_event_context_ptr ctx) { int i; - if(!ctx) { + if (!ctx) { return; } - for(i = 0; i < 2; ++i) { + for (i = 0; i < 2; ++i) { wslay_event_imsg_chunks_free(&ctx->imsgs[i]); - wslay_queue_free(ctx->imsgs[i].chunks); + wslay_queue_deinit(&ctx->imsgs[i].chunks); } - if(ctx->send_queue) { - while(!wslay_queue_empty(ctx->send_queue)) { - wslay_event_omsg_free(wslay_queue_top(ctx->send_queue)); - wslay_queue_pop(ctx->send_queue); - } - wslay_queue_free(ctx->send_queue); + + while (!wslay_queue_empty(&ctx->send_queue)) { + struct wslay_event_omsg *omsg = wslay_struct_of( + wslay_queue_top(&ctx->send_queue), struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_queue); + wslay_event_omsg_free(omsg); } - if(ctx->send_ctrl_queue) { - while(!wslay_queue_empty(ctx->send_ctrl_queue)) { - wslay_event_omsg_free(wslay_queue_top(ctx->send_ctrl_queue)); - wslay_queue_pop(ctx->send_ctrl_queue); - } - wslay_queue_free(ctx->send_ctrl_queue); + wslay_queue_deinit(&ctx->send_queue); + + while (!wslay_queue_empty(&ctx->send_ctrl_queue)) { + struct wslay_event_omsg *omsg = wslay_struct_of( + wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_ctrl_queue); + wslay_event_omsg_free(omsg); } + wslay_queue_deinit(&ctx->send_ctrl_queue); + wslay_frame_context_free(ctx->frame_ctx); wslay_event_omsg_free(ctx->omsg); free(ctx); } -static void wslay_event_call_on_frame_recv_start_callback -(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) -{ - if(ctx->callbacks.on_frame_recv_start_callback) { +static void wslay_event_call_on_frame_recv_start_callback( + wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) { + if (ctx->callbacks.on_frame_recv_start_callback) { struct wslay_event_on_frame_recv_start_arg arg; arg.fin = iocb->fin; arg.rsv = iocb->rsv; @@ -532,10 +469,9 @@ static void wslay_event_call_on_frame_recv_start_callback } } -static void wslay_event_call_on_frame_recv_chunk_callback -(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) -{ - if(ctx->callbacks.on_frame_recv_chunk_callback) { +static void wslay_event_call_on_frame_recv_chunk_callback( + wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) { + if (ctx->callbacks.on_frame_recv_chunk_callback) { struct wslay_event_on_frame_recv_chunk_arg arg; arg.data = iocb->data; arg.data_length = iocb->data_length; @@ -543,205 +479,202 @@ static void wslay_event_call_on_frame_recv_chunk_callback } } -static void wslay_event_call_on_frame_recv_end_callback -(wslay_event_context_ptr ctx) -{ - if(ctx->callbacks.on_frame_recv_end_callback) { +static void +wslay_event_call_on_frame_recv_end_callback(wslay_event_context_ptr ctx) { + if (ctx->callbacks.on_frame_recv_end_callback) { ctx->callbacks.on_frame_recv_end_callback(ctx, ctx->user_data); } } -static int wslay_event_is_valid_status_code(uint16_t status_code) -{ - return (1000 <= status_code && status_code <= 1011 && - status_code != 1004 && status_code != 1005 && status_code != 1006) || - (3000 <= status_code && status_code <= 4999); +static int wslay_event_is_valid_status_code(uint16_t status_code) { + return (1000 <= status_code && status_code <= 1011 && status_code != 1004 && + status_code != 1005 && status_code != 1006) || + (3000 <= status_code && status_code <= 4999); } -static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx) -{ +static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx) { return (ctx->config & WSLAY_CONFIG_NO_BUFFERING) > 0; } -int wslay_event_recv(wslay_event_context_ptr ctx) -{ +int wslay_event_recv(wslay_event_context_ptr ctx) { struct wslay_frame_iocb iocb; ssize_t r; - while(ctx->read_enabled) { + while (ctx->read_enabled) { memset(&iocb, 0, sizeof(iocb)); r = wslay_frame_recv(ctx->frame_ctx, &iocb); - if(r >= 0) { + if (r >= 0) { int new_frame = 0; /* RSV1 is not allowed on control and continuation frames */ - if((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) || - (wslay_get_rsv1(iocb.rsv) && (wslay_is_ctrl_frame(iocb.opcode) || - iocb.opcode == WSLAY_CONTINUATION_FRAME)) || - (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { - return r; + if ((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) || + (wslay_get_rsv1(iocb.rsv) && + (wslay_is_ctrl_frame(iocb.opcode) || + iocb.opcode == WSLAY_CONTINUATION_FRAME)) || + (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) { + if ((r = wslay_event_queue_close_wrapper(ctx, WSLAY_CODE_PROTOCOL_ERROR, + NULL, 0)) != 0) { + return (int)r; } break; } - if(ctx->imsg->opcode == 0xffu) { - if(iocb.opcode == WSLAY_TEXT_FRAME || - iocb.opcode == WSLAY_BINARY_FRAME || - iocb.opcode == WSLAY_CONNECTION_CLOSE || - iocb.opcode == WSLAY_PING || - iocb.opcode == WSLAY_PONG) { + if (ctx->imsg->opcode == 0xffu) { + if (iocb.opcode == WSLAY_TEXT_FRAME || + iocb.opcode == WSLAY_BINARY_FRAME || + iocb.opcode == WSLAY_CONNECTION_CLOSE || + iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) { wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode); new_frame = 1; } else { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { - return r; + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { + return (int)r; } break; } - } else if(ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) { - if(iocb.opcode == WSLAY_CONTINUATION_FRAME) { + } else if (ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) { + if (iocb.opcode == WSLAY_CONTINUATION_FRAME) { ctx->imsg->fin = iocb.fin; - } else if(iocb.opcode == WSLAY_CONNECTION_CLOSE || - iocb.opcode == WSLAY_PING || - iocb.opcode == WSLAY_PONG) { + } else if (iocb.opcode == WSLAY_CONNECTION_CLOSE || + iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) { ctx->imsg = &ctx->imsgs[1]; wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode); } else { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { - return r; + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { + return (int)r; } break; } new_frame = 1; } - if(new_frame) { - if(ctx->imsg->msg_length+iocb.payload_length > - ctx->max_recv_msg_length) { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) { - return r; + if (new_frame) { + if (ctx->imsg->msg_length + iocb.payload_length > + ctx->max_recv_msg_length) { + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) { + return (int)r; } break; } ctx->ipayloadlen = iocb.payload_length; wslay_event_call_on_frame_recv_start_callback(ctx, &iocb); - if(!wslay_event_config_get_no_buffering(ctx) || - wslay_is_ctrl_frame(iocb.opcode)) { - if((r = wslay_event_imsg_append_chunk(ctx->imsg, - iocb.payload_length)) != 0) { + if (!wslay_event_config_get_no_buffering(ctx) || + wslay_is_ctrl_frame(iocb.opcode)) { + if ((r = wslay_event_imsg_append_chunk(ctx->imsg, + iocb.payload_length)) != 0) { ctx->read_enabled = 0; - return r; + return (int)r; } } } /* If RSV1 bit is set then it is too early for utf-8 validation */ - if((!wslay_get_rsv1(ctx->imsg->rsv) && - ctx->imsg->opcode == WSLAY_TEXT_FRAME) || - ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { + if ((!wslay_get_rsv1(ctx->imsg->rsv) && + ctx->imsg->opcode == WSLAY_TEXT_FRAME) || + ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { size_t i; - if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { + if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { i = 2; } else { i = 0; } - for(; i < iocb.data_length; ++i) { + for (; i < iocb.data_length; ++i) { uint32_t codep; - if(decode(&ctx->imsg->utf8state, &codep, - iocb.data[i]) == UTF8_REJECT) { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) { - return r; + if (decode(&ctx->imsg->utf8state, &codep, iocb.data[i]) == + UTF8_REJECT) { + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != + 0) { + return (int)r; } break; } } } - if(ctx->imsg->utf8state == UTF8_REJECT) { + if (ctx->imsg->utf8state == UTF8_REJECT) { break; } wslay_event_call_on_frame_recv_chunk_callback(ctx, &iocb); - if(iocb.data_length > 0) { - if(!wslay_event_config_get_no_buffering(ctx) || - wslay_is_ctrl_frame(iocb.opcode)) { + if (iocb.data_length > 0) { + if (!wslay_event_config_get_no_buffering(ctx) || + wslay_is_ctrl_frame(iocb.opcode)) { struct wslay_event_byte_chunk *chunk; - chunk = wslay_queue_tail(ctx->imsg->chunks); - wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff, - iocb.data, iocb.data_length); + chunk = wslay_struct_of(wslay_queue_tail(&ctx->imsg->chunks), + struct wslay_event_byte_chunk, qe); + wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff, iocb.data, + iocb.data_length); } ctx->ipayloadoff += iocb.data_length; } - if(ctx->ipayloadoff == ctx->ipayloadlen) { - if(ctx->imsg->fin && - (ctx->imsg->opcode == WSLAY_TEXT_FRAME || - ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) && - ctx->imsg->utf8state != UTF8_ACCEPT) { - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) { - return r; + if (ctx->ipayloadoff == ctx->ipayloadlen) { + if (ctx->imsg->fin && + (ctx->imsg->opcode == WSLAY_TEXT_FRAME || + ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) && + ctx->imsg->utf8state != UTF8_ACCEPT) { + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) { + return (int)r; } break; } wslay_event_call_on_frame_recv_end_callback(ctx); - if(ctx->imsg->fin) { - if(ctx->callbacks.on_msg_recv_callback || - ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE || - ctx->imsg->opcode == WSLAY_PING) { + if (ctx->imsg->fin) { + if (ctx->callbacks.on_msg_recv_callback || + ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE || + ctx->imsg->opcode == WSLAY_PING) { struct wslay_event_on_msg_recv_arg arg; uint16_t status_code = 0; uint8_t *msg = NULL; size_t msg_length = 0; - if(!wslay_event_config_get_no_buffering(ctx) || - wslay_is_ctrl_frame(iocb.opcode)) { - msg = wslay_event_flatten_queue(ctx->imsg->chunks, + if (!wslay_event_config_get_no_buffering(ctx) || + wslay_is_ctrl_frame(iocb.opcode)) { + msg = wslay_event_flatten_queue(&ctx->imsg->chunks, ctx->imsg->msg_length); - if(ctx->imsg->msg_length && !msg) { + if (ctx->imsg->msg_length && !msg) { ctx->read_enabled = 0; return WSLAY_ERR_NOMEM; } msg_length = ctx->imsg->msg_length; } - if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { + if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) { const uint8_t *reason; size_t reason_length; - if(ctx->imsg->msg_length >= 2) { + if (ctx->imsg->msg_length >= 2) { memcpy(&status_code, msg, 2); status_code = ntohs(status_code); - if(!wslay_event_is_valid_status_code(status_code)) { + if (!wslay_event_is_valid_status_code(status_code)) { free(msg); - if((r = wslay_event_queue_close_wrapper - (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { - return r; + if ((r = wslay_event_queue_close_wrapper( + ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) { + return (int)r; } break; } - reason = msg+2; - reason_length = ctx->imsg->msg_length-2; + reason = msg + 2; + reason_length = ctx->imsg->msg_length - 2; } else { reason = NULL; reason_length = 0; } ctx->close_status |= WSLAY_CLOSE_RECEIVED; ctx->status_code_recv = - status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code; - if((r = wslay_event_queue_close_wrapper - (ctx, status_code, reason, reason_length)) != 0) { + status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code; + if ((r = wslay_event_queue_close_wrapper(ctx, status_code, reason, + reason_length)) != 0) { free(msg); - return r; + return (int)r; } - } else if(ctx->imsg->opcode == WSLAY_PING) { + } else if (ctx->imsg->opcode == WSLAY_PING) { struct wslay_event_msg pong_arg; pong_arg.opcode = WSLAY_PONG; pong_arg.msg = msg; pong_arg.msg_length = ctx->imsg->msg_length; - if((r = wslay_event_queue_msg(ctx, &pong_arg)) && - r != WSLAY_ERR_NO_MORE_MSG) { + if ((r = wslay_event_queue_msg(ctx, &pong_arg)) && + r != WSLAY_ERR_NO_MORE_MSG) { ctx->read_enabled = 0; free(msg); - return r; + return (int)r; } } - if(ctx->callbacks.on_msg_recv_callback) { + if (ctx->callbacks.on_msg_recv_callback) { arg.rsv = ctx->imsg->rsv; arg.opcode = ctx->imsg->opcode; arg.msg = msg; @@ -753,17 +686,17 @@ int wslay_event_recv(wslay_event_context_ptr ctx) free(msg); } wslay_event_imsg_reset(ctx->imsg); - if(ctx->imsg == &ctx->imsgs[1]) { + if (ctx->imsg == &ctx->imsgs[1]) { ctx->imsg = &ctx->imsgs[0]; } } ctx->ipayloadlen = ctx->ipayloadoff = 0; } } else { - if(r != WSLAY_ERR_WANT_READ || - (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) { - if((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) { - return r; + if (r != WSLAY_ERR_WANT_READ || + (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) { + if ((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) { + return (int)r; } return WSLAY_ERR_CALLBACK_FAILURE; } @@ -773,26 +706,25 @@ int wslay_event_recv(wslay_event_context_ptr ctx) return 0; } -static void wslay_event_on_non_fragmented_msg_popped -(wslay_event_context_ptr ctx) -{ +static void +wslay_event_on_non_fragmented_msg_popped(wslay_event_context_ptr ctx) { ctx->omsg->fin = 1; ctx->opayloadlen = ctx->omsg->data_length; ctx->opayloadoff = 0; } -static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop -(wslay_event_context_ptr ctx) -{ +static struct wslay_event_omsg * +wslay_event_send_ctrl_queue_pop(wslay_event_context_ptr ctx) { /* * If Close control frame is queued, we don't send any control frame * other than Close. */ - if(ctx->close_status & WSLAY_CLOSE_QUEUED) { - while(!wslay_queue_empty(ctx->send_ctrl_queue)) { - struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue); - wslay_queue_pop(ctx->send_ctrl_queue); - if(msg->opcode == WSLAY_CONNECTION_CLOSE) { + if (ctx->close_status & WSLAY_CLOSE_QUEUED) { + while (!wslay_queue_empty(&ctx->send_ctrl_queue)) { + struct wslay_event_omsg *msg = wslay_struct_of( + wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_ctrl_queue); + if (msg->opcode == WSLAY_CONNECTION_CLOSE) { return msg; } else { wslay_event_omsg_free(msg); @@ -800,71 +732,73 @@ static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop } return NULL; } else { - struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue); - wslay_queue_pop(ctx->send_ctrl_queue); + struct wslay_event_omsg *msg = wslay_struct_of( + wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_ctrl_queue); return msg; } } -int wslay_event_send(wslay_event_context_ptr ctx) -{ +int wslay_event_send(wslay_event_context_ptr ctx) { struct wslay_frame_iocb iocb; ssize_t r; - while(ctx->write_enabled && - (!wslay_queue_empty(ctx->send_queue) || - !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg)) { - if(!ctx->omsg) { - if(wslay_queue_empty(ctx->send_ctrl_queue)) { - ctx->omsg = wslay_queue_top(ctx->send_queue); - wslay_queue_pop(ctx->send_queue); + while (ctx->write_enabled && + (!wslay_queue_empty(&ctx->send_queue) || + !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) { + if (!ctx->omsg) { + if (wslay_queue_empty(&ctx->send_ctrl_queue)) { + ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue), + struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_queue); } else { ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx); - if(ctx->omsg == NULL) { + if (ctx->omsg == NULL) { break; } } - if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) { + if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) { wslay_event_on_non_fragmented_msg_popped(ctx); } - } else if(!wslay_is_ctrl_frame(ctx->omsg->opcode) && - ctx->frame_ctx->ostate == PREP_HEADER && - !wslay_queue_empty(ctx->send_ctrl_queue)) { - if((r = wslay_queue_push_front(ctx->send_queue, ctx->omsg)) != 0) { - ctx->write_enabled = 0; - return r; - } + } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) && + ctx->frame_ctx->ostate == PREP_HEADER && + !wslay_queue_empty(&ctx->send_ctrl_queue)) { + wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe); ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx); - if(ctx->omsg == NULL) { + if (ctx->omsg == NULL) { break; } /* ctrl message has WSLAY_NON_FRAGMENTED */ wslay_event_on_non_fragmented_msg_popped(ctx); } - if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) { + if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) { memset(&iocb, 0, sizeof(iocb)); iocb.fin = 1; iocb.opcode = ctx->omsg->opcode; iocb.rsv = ctx->omsg->rsv; - iocb.mask = ctx->server^1; - iocb.data = ctx->omsg->data+ctx->opayloadoff; - iocb.data_length = ctx->opayloadlen-ctx->opayloadoff; + iocb.mask = ctx->server ^ 1; + iocb.data = ctx->omsg->data; + iocb.data_length = ctx->opayloadlen; + if (ctx->opayloadoff) { + iocb.data += ctx->opayloadoff; + iocb.data_length -= ctx->opayloadoff; + } iocb.payload_length = ctx->opayloadlen; r = wslay_frame_send(ctx->frame_ctx, &iocb); - if(r >= 0) { - ctx->opayloadoff += r; - if(ctx->opayloadoff == ctx->opayloadlen) { + if (r >= 0) { + ctx->opayloadoff += (uint64_t)r; + if (ctx->opayloadoff == ctx->opayloadlen) { --ctx->queued_msg_count; ctx->queued_msg_length -= ctx->omsg->data_length; - if(ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) { + if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) { uint16_t status_code = 0; ctx->write_enabled = 0; ctx->close_status |= WSLAY_CLOSE_SENT; - if(ctx->omsg->data_length >= 2) { + if (ctx->omsg->data_length >= 2) { memcpy(&status_code, ctx->omsg->data, 2); status_code = ntohs(status_code); } ctx->status_code_sent = - status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code; + status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code; } wslay_event_omsg_free(ctx->omsg); ctx->omsg = NULL; @@ -872,30 +806,29 @@ int wslay_event_send(wslay_event_context_ptr ctx) break; } } else { - if(r != WSLAY_ERR_WANT_WRITE || - (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) { + if (r != WSLAY_ERR_WANT_WRITE || + (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) { ctx->write_enabled = 0; return WSLAY_ERR_CALLBACK_FAILURE; } break; } } else { - if(ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) { + if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) { int eof = 0; r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf), - &ctx->omsg->source, - &eof, ctx->user_data); - if(r == 0 && eof == 0) { + &ctx->omsg->source, &eof, ctx->user_data); + if (r == 0 && eof == 0) { break; - } else if(r < 0) { + } else if (r < 0) { ctx->write_enabled = 0; return WSLAY_ERR_CALLBACK_FAILURE; } - ctx->obuflimit = ctx->obuf+r; - if(eof) { + ctx->obuflimit = ctx->obuf + r; + if (eof) { ctx->omsg->fin = 1; } - ctx->opayloadlen = r; + ctx->opayloadlen = (uint64_t)r; ctx->opayloadoff = 0; } memset(&iocb, 0, sizeof(iocb)); @@ -904,29 +837,28 @@ int wslay_event_send(wslay_event_context_ptr ctx) iocb.rsv = ctx->omsg->rsv; iocb.mask = ctx->server ? 0 : 1; iocb.data = ctx->obufmark; - iocb.data_length = ctx->obuflimit-ctx->obufmark; + iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark); iocb.payload_length = ctx->opayloadlen; r = wslay_frame_send(ctx->frame_ctx, &iocb); - if(r >= 0) { + if (r >= 0) { ctx->obufmark += r; - if(ctx->obufmark == ctx->obuflimit) { + if (ctx->obufmark == ctx->obuflimit) { ctx->obufmark = ctx->obuflimit = ctx->obuf; - if(ctx->omsg->fin) { + if (ctx->omsg->fin) { --ctx->queued_msg_count; wslay_event_omsg_free(ctx->omsg); ctx->omsg = NULL; } else { ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME; /* RSV1 is not set on continuation frames */ - ctx->omsg->rsv = ctx->omsg->rsv & ~WSLAY_RSV1_BIT; + ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT); } } else { break; } } else { - if(r != WSLAY_ERR_WANT_WRITE || - (ctx->error != WSLAY_ERR_WOULDBLOCK && - ctx->error != 0)) { + if (r != WSLAY_ERR_WANT_WRITE || + (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) { ctx->write_enabled = 0; return WSLAY_ERR_CALLBACK_FAILURE; } @@ -937,91 +869,214 @@ int wslay_event_send(wslay_event_context_ptr ctx) return 0; } -void wslay_event_set_error(wslay_event_context_ptr ctx, int val) -{ +ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf, + size_t buflen) { + struct wslay_frame_iocb iocb; + ssize_t r; + uint8_t *buf_last = buf; + size_t wpayloadlen; + while (ctx->write_enabled && + (!wslay_queue_empty(&ctx->send_queue) || + !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) { + if (!ctx->omsg) { + if (wslay_queue_empty(&ctx->send_ctrl_queue)) { + ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue), + struct wslay_event_omsg, qe); + wslay_queue_pop(&ctx->send_queue); + } else { + ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx); + if (ctx->omsg == NULL) { + break; + } + } + if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) { + wslay_event_on_non_fragmented_msg_popped(ctx); + } + } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) && + ctx->frame_ctx->ostate == PREP_HEADER && + !wslay_queue_empty(&ctx->send_ctrl_queue)) { + wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe); + ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx); + if (ctx->omsg == NULL) { + break; + } + /* ctrl message has WSLAY_NON_FRAGMENTED */ + wslay_event_on_non_fragmented_msg_popped(ctx); + } + if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) { + memset(&iocb, 0, sizeof(iocb)); + iocb.fin = 1; + iocb.opcode = ctx->omsg->opcode; + iocb.rsv = ctx->omsg->rsv; + iocb.mask = ctx->server ^ 1; + iocb.data = ctx->omsg->data; + iocb.data_length = ctx->opayloadlen; + if (ctx->opayloadoff) { + iocb.data += ctx->opayloadoff; + iocb.data_length -= ctx->opayloadoff; + } + iocb.payload_length = ctx->opayloadlen; + r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen, + &wpayloadlen); + if (r > 0) { + assert((size_t)r <= buflen); + + buf_last += r; + buflen -= (size_t)r; + + ctx->opayloadoff += wpayloadlen; + if (ctx->opayloadoff == ctx->opayloadlen) { + --ctx->queued_msg_count; + ctx->queued_msg_length -= ctx->omsg->data_length; + if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) { + uint16_t status_code = 0; + ctx->write_enabled = 0; + ctx->close_status |= WSLAY_CLOSE_SENT; + if (ctx->omsg->data_length >= 2) { + memcpy(&status_code, ctx->omsg->data, 2); + status_code = ntohs(status_code); + } + ctx->status_code_sent = + status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code; + } + wslay_event_omsg_free(ctx->omsg); + ctx->omsg = NULL; + } else { + break; + } + } else if (r == 0) { + return buf_last - buf; + } else { + return WSLAY_ERR_CALLBACK_FAILURE; + } + } else { + if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) { + int eof = 0; + r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf), + &ctx->omsg->source, &eof, ctx->user_data); + if (r == 0 && eof == 0) { + break; + } else if (r < 0) { + ctx->write_enabled = 0; + return WSLAY_ERR_CALLBACK_FAILURE; + } + ctx->obuflimit = ctx->obuf + r; + if (eof) { + ctx->omsg->fin = 1; + } + ctx->opayloadlen = (uint64_t)r; + ctx->opayloadoff = 0; + } + memset(&iocb, 0, sizeof(iocb)); + iocb.fin = ctx->omsg->fin; + iocb.opcode = ctx->omsg->opcode; + iocb.rsv = ctx->omsg->rsv; + iocb.mask = ctx->server ? 0 : 1; + iocb.data = ctx->obufmark; + iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark); + iocb.payload_length = ctx->opayloadlen; + r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen, + &wpayloadlen); + if (r > 0) { + assert((size_t)r <= buflen); + + buf_last += r; + buflen -= (size_t)r; + + ctx->obufmark += wpayloadlen; + if (ctx->obufmark == ctx->obuflimit) { + ctx->obufmark = ctx->obuflimit = ctx->obuf; + if (ctx->omsg->fin) { + --ctx->queued_msg_count; + wslay_event_omsg_free(ctx->omsg); + ctx->omsg = NULL; + } else { + ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME; + /* RSV1 is not set on continuation frames */ + ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT); + } + } else { + break; + } + } else if (r == 0) { + return buf_last - buf; + } else { + return WSLAY_ERR_CALLBACK_FAILURE; + } + } + } + return buf_last - buf; +} + +void wslay_event_set_error(wslay_event_context_ptr ctx, int val) { ctx->error = val; } -int wslay_event_want_read(wslay_event_context_ptr ctx) -{ +int wslay_event_want_read(wslay_event_context_ptr ctx) { return ctx->read_enabled; } -int wslay_event_want_write(wslay_event_context_ptr ctx) -{ +int wslay_event_want_write(wslay_event_context_ptr ctx) { return ctx->write_enabled && - (!wslay_queue_empty(ctx->send_queue) || - !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg); + (!wslay_queue_empty(&ctx->send_queue) || + !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg); } -void wslay_event_shutdown_read(wslay_event_context_ptr ctx) -{ +void wslay_event_shutdown_read(wslay_event_context_ptr ctx) { ctx->read_enabled = 0; } -void wslay_event_shutdown_write(wslay_event_context_ptr ctx) -{ +void wslay_event_shutdown_write(wslay_event_context_ptr ctx) { ctx->write_enabled = 0; } -int wslay_event_get_read_enabled(wslay_event_context_ptr ctx) -{ +int wslay_event_get_read_enabled(wslay_event_context_ptr ctx) { return ctx->read_enabled; } -int wslay_event_get_write_enabled(wslay_event_context_ptr ctx) -{ +int wslay_event_get_write_enabled(wslay_event_context_ptr ctx) { return ctx->write_enabled; } -int wslay_event_get_close_received(wslay_event_context_ptr ctx) -{ +int wslay_event_get_close_received(wslay_event_context_ptr ctx) { return (ctx->close_status & WSLAY_CLOSE_RECEIVED) > 0; } -int wslay_event_get_close_sent(wslay_event_context_ptr ctx) -{ +int wslay_event_get_close_sent(wslay_event_context_ptr ctx) { return (ctx->close_status & WSLAY_CLOSE_SENT) > 0; } void wslay_event_config_set_allowed_rsv_bits(wslay_event_context_ptr ctx, - uint8_t rsv) -{ + uint8_t rsv) { /* We currently only allow WSLAY_RSV1_BIT or WSLAY_RSV_NONE */ ctx->allowed_rsv_bits = rsv & WSLAY_RSV1_BIT; } -void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val) -{ - if(val) { +void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val) { + if (val) { ctx->config |= WSLAY_CONFIG_NO_BUFFERING; } else { - ctx->config &= ~WSLAY_CONFIG_NO_BUFFERING; + ctx->config &= (uint32_t)~WSLAY_CONFIG_NO_BUFFERING; } } void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx, - uint64_t val) -{ + uint64_t val) { ctx->max_recv_msg_length = val; } -uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx) -{ +uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx) { return ctx->status_code_recv; } -uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx) -{ +uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx) { return ctx->status_code_sent; } -size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx) -{ +size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx) { return ctx->queued_msg_count; } -size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx) -{ +size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx) { return ctx->queued_msg_length; } diff --git a/thirdparty/wslay/wslay_event.h b/thirdparty/wslay/wslay_event.h index 36feb9036d..e30c3d1940 100644 --- a/thirdparty/wslay/wslay_event.h +++ b/thirdparty/wslay/wslay_event.h @@ -31,10 +31,10 @@ #include <wslay/wslay.h> -struct wslay_stack; -struct wslay_queue; +#include "wslay_queue.h" struct wslay_event_byte_chunk { + struct wslay_queue_entry qe; uint8_t *data; size_t data_length; }; @@ -44,16 +44,14 @@ struct wslay_event_imsg { uint8_t rsv; uint8_t opcode; uint32_t utf8state; - struct wslay_queue *chunks; + struct wslay_queue chunks; size_t msg_length; }; -enum wslay_event_msg_type { - WSLAY_NON_FRAGMENTED, - WSLAY_FRAGMENTED -}; +enum wslay_event_msg_type { WSLAY_NON_FRAGMENTED, WSLAY_FRAGMENTED }; struct wslay_event_omsg { + struct wslay_queue_entry qe; uint8_t fin; uint8_t opcode; uint8_t rsv; @@ -77,9 +75,7 @@ enum wslay_event_close_status { WSLAY_CLOSE_SENT = 1 << 2 }; -enum wslay_event_config { - WSLAY_CONFIG_NO_BUFFERING = 1 << 0 -}; +enum wslay_event_config { WSLAY_CONFIG_NO_BUFFERING = 1 << 0 }; struct wslay_event_context { /* config status, bitwise OR of enum wslay_event_config values*/ @@ -118,9 +114,9 @@ struct wslay_event_context { is currently sent. */ struct wslay_event_omsg *omsg; /* Queue for non-control frames */ - struct wslay_queue/*<wslay_omsg*>*/ *send_queue; + struct wslay_queue /*<wslay_omsg*>*/ send_queue; /* Queue for control frames */ - struct wslay_queue/*<wslay_omsg*>*/ *send_ctrl_queue; + struct wslay_queue /*<wslay_omsg*>*/ send_ctrl_queue; /* Size of send_queue + size of send_ctrl_queue */ size_t queued_msg_count; /* The sum of message length in send_queue */ diff --git a/thirdparty/wslay/wslay_frame.c b/thirdparty/wslay/wslay_frame.c index 445e750ca5..435044a3f4 100644 --- a/thirdparty/wslay/wslay_frame.c +++ b/thirdparty/wslay/wslay_frame.c @@ -34,10 +34,9 @@ int wslay_frame_context_init(wslay_frame_context_ptr *ctx, const struct wslay_frame_callbacks *callbacks, - void *user_data) -{ - *ctx = (wslay_frame_context_ptr)malloc(sizeof(struct wslay_frame_context)); - if(*ctx == NULL) { + void *user_data) { + *ctx = malloc(sizeof(struct wslay_frame_context)); + if (*ctx == NULL) { return -1; } memset(*ctx, 0, sizeof(struct wslay_frame_context)); @@ -50,38 +49,35 @@ int wslay_frame_context_init(wslay_frame_context_ptr *ctx, return 0; } -void wslay_frame_context_free(wslay_frame_context_ptr ctx) -{ - free(ctx); -} +void wslay_frame_context_free(wslay_frame_context_ptr ctx) { free(ctx); } ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, - struct wslay_frame_iocb *iocb) -{ - if(iocb->data_length > iocb->payload_length) { + struct wslay_frame_iocb *iocb) { + if (iocb->data_length > iocb->payload_length) { return WSLAY_ERR_INVALID_ARGUMENT; } - if(ctx->ostate == PREP_HEADER) { + if (ctx->ostate == PREP_HEADER) { uint8_t *hdptr = ctx->oheader; memset(ctx->oheader, 0, sizeof(ctx->oheader)); - *hdptr |= (iocb->fin << 7) & 0x80u; - *hdptr |= (iocb->rsv << 4) & 0x70u; - *hdptr |= iocb->opcode & 0xfu; + *hdptr |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u); + *hdptr |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u); + /* Suppress stubborn gcc-10 warning */ + *hdptr |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu); ++hdptr; - *hdptr |= (iocb->mask << 7) & 0x80u; - if(wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) { + *hdptr |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u); + if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) { return WSLAY_ERR_INVALID_ARGUMENT; } - if(iocb->payload_length < 126) { - *hdptr |= iocb->payload_length; + if (iocb->payload_length < 126) { + *hdptr |= (uint8_t)iocb->payload_length; ++hdptr; - } else if(iocb->payload_length < (1 << 16)) { - uint16_t len = htons(iocb->payload_length); + } else if (iocb->payload_length < (1 << 16)) { + uint16_t len = htons((uint16_t)iocb->payload_length); *hdptr |= 126; ++hdptr; memcpy(hdptr, &len, 2); hdptr += 2; - } else if(iocb->payload_length < (1ull << 63)) { + } else if (iocb->payload_length < (1ull << 63)) { uint64_t len = hton64(iocb->payload_length); *hdptr |= 127; ++hdptr; @@ -91,9 +87,9 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, /* Too large payload length */ return WSLAY_ERR_INVALID_ARGUMENT; } - if(iocb->mask) { - if(ctx->callbacks.genmask_callback(ctx->omaskkey, 4, - ctx->user_data) != 0) { + if (iocb->mask) { + if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) != + 0) { return WSLAY_ERR_INVALID_CALLBACK; } else { ctx->omask = 1; @@ -107,21 +103,21 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, ctx->opayloadlen = iocb->payload_length; ctx->opayloadoff = 0; } - if(ctx->ostate == SEND_HEADER) { - ptrdiff_t len = ctx->oheaderlimit-ctx->oheadermark; + if (ctx->ostate == SEND_HEADER) { + ptrdiff_t len = ctx->oheaderlimit - ctx->oheadermark; ssize_t r; int flags = 0; - if(iocb->data_length > 0) { + if (iocb->data_length > 0) { flags |= WSLAY_MSG_MORE; }; - r = ctx->callbacks.send_callback(ctx->oheadermark, len, flags, + r = ctx->callbacks.send_callback(ctx->oheadermark, (size_t)len, flags, ctx->user_data); - if(r > 0) { - if(r > len) { + if (r > 0) { + if (r > len) { return WSLAY_ERR_INVALID_CALLBACK; } else { ctx->oheadermark += r; - if(ctx->oheadermark == ctx->oheaderlimit) { + if (ctx->oheadermark == ctx->oheaderlimit) { ctx->ostate = SEND_PAYLOAD; } else { return WSLAY_ERR_WANT_WRITE; @@ -131,34 +127,34 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, return WSLAY_ERR_WANT_WRITE; } } - if(ctx->ostate == SEND_PAYLOAD) { + if (ctx->ostate == SEND_PAYLOAD) { size_t totallen = 0; - if(iocb->data_length > 0) { - if(ctx->omask) { + if (iocb->data_length > 0) { + if (ctx->omask) { uint8_t temp[4096]; const uint8_t *datamark = iocb->data, - *datalimit = iocb->data+iocb->data_length; - while(datamark < datalimit) { - size_t datalen = datalimit - datamark; - const uint8_t *writelimit = datamark+ - wslay_min(sizeof(temp), datalen); - size_t writelen = writelimit-datamark; + *datalimit = iocb->data + iocb->data_length; + while (datamark < datalimit) { + size_t datalen = (size_t)(datalimit - datamark); + const uint8_t *writelimit = + datamark + wslay_min(sizeof(temp), datalen); + size_t writelen = (size_t)(writelimit - datamark); ssize_t r; size_t i; - for(i = 0; i < writelen; ++i) { - temp[i] = datamark[i]^ctx->omaskkey[(ctx->opayloadoff+i)%4]; + for (i = 0; i < writelen; ++i) { + temp[i] = datamark[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4]; } r = ctx->callbacks.send_callback(temp, writelen, 0, ctx->user_data); - if(r > 0) { - if((size_t)r > writelen) { + if (r > 0) { + if ((size_t)r > writelen) { return WSLAY_ERR_INVALID_CALLBACK; } else { datamark += r; - ctx->opayloadoff += r; - totallen += r; + ctx->opayloadoff += (uint64_t)r; + totallen += (size_t)r; } } else { - if(totallen > 0) { + if (totallen > 0) { break; } else { return WSLAY_ERR_WANT_WRITE; @@ -169,44 +165,148 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx, ssize_t r; r = ctx->callbacks.send_callback(iocb->data, iocb->data_length, 0, ctx->user_data); - if(r > 0) { - if((size_t)r > iocb->data_length) { + if (r > 0) { + if ((size_t)r > iocb->data_length) { return WSLAY_ERR_INVALID_CALLBACK; } else { - ctx->opayloadoff += r; - totallen = r; + ctx->opayloadoff += (uint64_t)r; + totallen = (size_t)r; } } else { return WSLAY_ERR_WANT_WRITE; } } } - if(ctx->opayloadoff == ctx->opayloadlen) { + if (ctx->opayloadoff == ctx->opayloadlen) { ctx->ostate = PREP_HEADER; } - return totallen; + return (ssize_t)totallen; } return WSLAY_ERR_INVALID_ARGUMENT; } -static void wslay_shift_ibuf(wslay_frame_context_ptr ctx) -{ - ptrdiff_t len = ctx->ibuflimit-ctx->ibufmark; - memmove(ctx->ibuf, ctx->ibufmark, len); - ctx->ibuflimit = ctx->ibuf+len; +ssize_t wslay_frame_write(wslay_frame_context_ptr ctx, + struct wslay_frame_iocb *iocb, uint8_t *buf, + size_t buflen, size_t *pwpayloadlen) { + uint8_t *buf_last = buf; + size_t i; + size_t hdlen; + + *pwpayloadlen = 0; + + if (iocb->data_length > iocb->payload_length) { + return WSLAY_ERR_INVALID_ARGUMENT; + } + + switch (ctx->ostate) { + case PREP_HEADER: + case PREP_HEADER_NOBUF: + hdlen = 2; + if (iocb->payload_length < 126) { + /* nothing to do */ + } else if (iocb->payload_length < (1 << 16)) { + hdlen += 2; + } else if (iocb->payload_length < (1ull << 63)) { + hdlen += 8; + } + if (iocb->mask) { + hdlen += 4; + } + + if (buflen < hdlen) { + ctx->ostate = PREP_HEADER_NOBUF; + return 0; + } + + memset(buf_last, 0, hdlen); + *buf_last |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u); + *buf_last |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u); + /* Suppress stubborn gcc-10 warning */ + *buf_last |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu); + ++buf_last; + *buf_last |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u); + if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) { + return WSLAY_ERR_INVALID_ARGUMENT; + } + if (iocb->payload_length < 126) { + *buf_last |= (uint8_t)iocb->payload_length; + ++buf_last; + } else if (iocb->payload_length < (1 << 16)) { + uint16_t len = htons((uint16_t)iocb->payload_length); + *buf_last |= 126; + ++buf_last; + memcpy(buf_last, &len, 2); + buf_last += 2; + } else if (iocb->payload_length < (1ull << 63)) { + uint64_t len = hton64(iocb->payload_length); + *buf_last |= 127; + ++buf_last; + memcpy(buf_last, &len, 8); + buf_last += 8; + } else { + /* Too large payload length */ + return WSLAY_ERR_INVALID_ARGUMENT; + } + if (iocb->mask) { + if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) != + 0) { + return WSLAY_ERR_INVALID_CALLBACK; + } else { + ctx->omask = 1; + memcpy(buf_last, ctx->omaskkey, 4); + buf_last += 4; + } + } + ctx->ostate = SEND_PAYLOAD; + ctx->opayloadlen = iocb->payload_length; + ctx->opayloadoff = 0; + + buflen -= (size_t)(buf_last - buf); + /* fall through */ + case SEND_PAYLOAD: + if (iocb->data_length > 0) { + size_t writelen = wslay_min(buflen, iocb->data_length); + + if (ctx->omask) { + for (i = 0; i < writelen; ++i) { + *buf_last++ = + iocb->data[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4]; + } + } else { + memcpy(buf_last, iocb->data, writelen); + buf_last += writelen; + } + + ctx->opayloadoff += writelen; + *pwpayloadlen = writelen; + } + + if (ctx->opayloadoff == ctx->opayloadlen) { + ctx->ostate = PREP_HEADER; + } + + return buf_last - buf; + default: + return WSLAY_ERR_INVALID_ARGUMENT; + } +} + +static void wslay_shift_ibuf(wslay_frame_context_ptr ctx) { + ptrdiff_t len = ctx->ibuflimit - ctx->ibufmark; + memmove(ctx->ibuf, ctx->ibufmark, (size_t)len); + ctx->ibuflimit = ctx->ibuf + len; ctx->ibufmark = ctx->ibuf; } -static ssize_t wslay_recv(wslay_frame_context_ptr ctx) -{ +static ssize_t wslay_recv(wslay_frame_context_ptr ctx) { ssize_t r; - if(ctx->ibufmark != ctx->ibuf) { + if (ctx->ibufmark != ctx->ibuf) { wslay_shift_ibuf(ctx); } - r = ctx->callbacks.recv_callback - (ctx->ibuflimit, ctx->ibuf+sizeof(ctx->ibuf)-ctx->ibuflimit, - 0, ctx->user_data); - if(r > 0) { + r = ctx->callbacks.recv_callback( + ctx->ibuflimit, (size_t)(ctx->ibuf + sizeof(ctx->ibuf) - ctx->ibuflimit), + 0, ctx->user_data); + if (r > 0) { ctx->ibuflimit += r; } else { r = WSLAY_ERR_WANT_READ; @@ -217,17 +317,16 @@ static ssize_t wslay_recv(wslay_frame_context_ptr ctx) #define WSLAY_AVAIL_IBUF(ctx) ((size_t)(ctx->ibuflimit - ctx->ibufmark)) ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx, - struct wslay_frame_iocb *iocb) -{ + struct wslay_frame_iocb *iocb) { ssize_t r; - if(ctx->istate == RECV_HEADER1) { + if (ctx->istate == RECV_HEADER1) { uint8_t fin, opcode, rsv, payloadlen; - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { - if((r = wslay_recv(ctx)) <= 0) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if ((r = wslay_recv(ctx)) <= 0) { return r; } } - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { return WSLAY_ERR_WANT_READ; } fin = (ctx->ibufmark[0] >> 7) & 1; @@ -240,19 +339,19 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx, ctx->imask = (ctx->ibufmark[0] >> 7) & 1; payloadlen = ctx->ibufmark[0] & 0x7fu; ++ctx->ibufmark; - if(wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) { + if (wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) { return WSLAY_ERR_PROTO; } - if(payloadlen == 126) { + if (payloadlen == 126) { ctx->istate = RECV_EXT_PAYLOADLEN; ctx->ireqread = 2; - } else if(payloadlen == 127) { + } else if (payloadlen == 127) { ctx->istate = RECV_EXT_PAYLOADLEN; ctx->ireqread = 8; } else { ctx->ipayloadlen = payloadlen; ctx->ipayloadoff = 0; - if(ctx->imask) { + if (ctx->imask) { ctx->istate = RECV_MASKKEY; ctx->ireqread = 4; } else { @@ -260,42 +359,41 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx, } } } - if(ctx->istate == RECV_EXT_PAYLOADLEN) { - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { - if((r = wslay_recv(ctx)) <= 0) { + if (ctx->istate == RECV_EXT_PAYLOADLEN) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if ((r = wslay_recv(ctx)) <= 0) { return r; } - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { return WSLAY_ERR_WANT_READ; } } ctx->ipayloadlen = 0; ctx->ipayloadoff = 0; - memcpy((uint8_t*)&ctx->ipayloadlen+(8-ctx->ireqread), - ctx->ibufmark, ctx->ireqread); + memcpy((uint8_t *)&ctx->ipayloadlen + (8 - ctx->ireqread), ctx->ibufmark, + ctx->ireqread); ctx->ipayloadlen = ntoh64(ctx->ipayloadlen); ctx->ibufmark += ctx->ireqread; - if(ctx->ireqread == 8) { - if(ctx->ipayloadlen < (1 << 16) || - ctx->ipayloadlen & (1ull << 63)) { + if (ctx->ireqread == 8) { + if (ctx->ipayloadlen < (1 << 16) || ctx->ipayloadlen & (1ull << 63)) { return WSLAY_ERR_PROTO; } - } else if(ctx->ipayloadlen < 126) { + } else if (ctx->ipayloadlen < 126) { return WSLAY_ERR_PROTO; } - if(ctx->imask) { + if (ctx->imask) { ctx->istate = RECV_MASKKEY; ctx->ireqread = 4; } else { ctx->istate = RECV_PAYLOAD; } } - if(ctx->istate == RECV_MASKKEY) { - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { - if((r = wslay_recv(ctx)) <= 0) { + if (ctx->istate == RECV_MASKKEY) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if ((r = wslay_recv(ctx)) <= 0) { return r; } - if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { + if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) { return WSLAY_ERR_WANT_READ; } } @@ -303,25 +401,25 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx, ctx->ibufmark += 4; ctx->istate = RECV_PAYLOAD; } - if(ctx->istate == RECV_PAYLOAD) { + if (ctx->istate == RECV_PAYLOAD) { uint8_t *readlimit, *readmark; - uint64_t rempayloadlen = ctx->ipayloadlen-ctx->ipayloadoff; - if(WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) { - if((r = wslay_recv(ctx)) <= 0) { + uint64_t rempayloadlen = ctx->ipayloadlen - ctx->ipayloadoff; + if (WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) { + if ((r = wslay_recv(ctx)) <= 0) { return r; } } readmark = ctx->ibufmark; - readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen ? - ctx->ibuflimit : ctx->ibufmark+rempayloadlen; - if(ctx->imask) { - for(; ctx->ibufmark != readlimit; - ++ctx->ibufmark, ++ctx->ipayloadoff) { + readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen + ? ctx->ibuflimit + : ctx->ibufmark + rempayloadlen; + if (ctx->imask) { + for (; ctx->ibufmark != readlimit; ++ctx->ibufmark, ++ctx->ipayloadoff) { ctx->ibufmark[0] ^= ctx->imaskkey[ctx->ipayloadoff % 4]; } } else { ctx->ibufmark = readlimit; - ctx->ipayloadoff += readlimit-readmark; + ctx->ipayloadoff += (uint64_t)(readlimit - readmark); } iocb->fin = ctx->iom.fin; iocb->rsv = ctx->iom.rsv; @@ -329,12 +427,12 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx, iocb->payload_length = ctx->ipayloadlen; iocb->mask = ctx->imask; iocb->data = readmark; - iocb->data_length = ctx->ibufmark-readmark; - if(ctx->ipayloadlen == ctx->ipayloadoff) { + iocb->data_length = (size_t)(ctx->ibufmark - readmark); + if (ctx->ipayloadlen == ctx->ipayloadoff) { ctx->istate = RECV_HEADER1; ctx->ireqread = 2; } - return iocb->data_length; + return (ssize_t)iocb->data_length; } return WSLAY_ERR_INVALID_ARGUMENT; } diff --git a/thirdparty/wslay/wslay_frame.h b/thirdparty/wslay/wslay_frame.h index 6a75858cc7..3ac98112b5 100644 --- a/thirdparty/wslay/wslay_frame.h +++ b/thirdparty/wslay/wslay_frame.h @@ -33,6 +33,7 @@ enum wslay_frame_state { PREP_HEADER, + PREP_HEADER_NOBUF, SEND_HEADER, SEND_PAYLOAD, RECV_HEADER1, diff --git a/thirdparty/wslay/wslay_stack.h b/thirdparty/wslay/wslay_macro.h index 16e4e968eb..a06cff98e1 100644 --- a/thirdparty/wslay/wslay_stack.h +++ b/thirdparty/wslay/wslay_macro.h @@ -1,7 +1,7 @@ /* * Wslay - The WebSocket Library * - * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa + * Copyright (c) 2020 Tatsuhiro Tsujikawa * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -22,8 +22,8 @@ * 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 WSLAY_STACK_H -#define WSLAY_STACK_H +#ifndef WSLAY_MACRO_H +#define WSLAY_MACRO_H #ifdef HAVE_CONFIG_H # include "config.h" @@ -31,20 +31,9 @@ #include <wslay/wslay.h> -struct wslay_stack_cell { - void *data; - struct wslay_stack_cell *next; -}; +#include <stddef.h> -struct wslay_stack { - struct wslay_stack_cell *top; -}; +#define wslay_struct_of(ptr, type, member) \ + ((type *)(void *)((char *)(ptr)-offsetof(type, member))) -struct wslay_stack* wslay_stack_new(); -void wslay_stack_free(struct wslay_stack *stack); -int wslay_stack_push(struct wslay_stack *stack, void *data); -void wslay_stack_pop(struct wslay_stack *stack); -void* wslay_stack_top(struct wslay_stack *stack); -int wslay_stack_empty(struct wslay_stack *stack); - -#endif /* WSLAY_STACK_H */ +#endif /* WSLAY_MACRO_H */ diff --git a/thirdparty/wslay/wslay_net.c b/thirdparty/wslay/wslay_net.c index d3867c21fb..e256158b4c 100644 --- a/thirdparty/wslay/wslay_net.c +++ b/thirdparty/wslay/wslay_net.c @@ -26,10 +26,9 @@ #ifndef WORDS_BIGENDIAN -uint64_t wslay_byteswap64(uint64_t x) -{ +uint64_t wslay_byteswap64(uint64_t x) { uint64_t u = ntohl(x & 0xffffffffllu); - uint64_t l = ntohl(x >> 32); + uint64_t l = ntohl((uint32_t)(x >> 32)); return (u << 32) | l; } diff --git a/thirdparty/wslay/wslay_queue.c b/thirdparty/wslay/wslay_queue.c index 8d2669687d..ebde3ba83d 100644 --- a/thirdparty/wslay/wslay_queue.c +++ b/thirdparty/wslay/wslay_queue.c @@ -27,91 +27,51 @@ #include <string.h> #include <assert.h> -struct wslay_queue* wslay_queue_new(void) -{ - struct wslay_queue *queue = (struct wslay_queue*)malloc - (sizeof(struct wslay_queue)); - if(!queue) { - return NULL; - } - queue->top = queue->tail = NULL; - return queue; -} +#include "wslay_macro.h" -void wslay_queue_free(struct wslay_queue *queue) -{ - if(!queue) { - return; - } else { - struct wslay_queue_cell *p = queue->top; - while(p) { - struct wslay_queue_cell *next = p->next; - free(p); - p = next; - } - free(queue); - } +void wslay_queue_init(struct wslay_queue *queue) { + queue->top = NULL; + queue->tail = &queue->top; } -int wslay_queue_push(struct wslay_queue *queue, void *data) -{ - struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc - (sizeof(struct wslay_queue_cell)); - if(!new_cell) { - return WSLAY_ERR_NOMEM; - } - new_cell->data = data; - new_cell->next = NULL; - if(queue->tail) { - queue->tail->next = new_cell; - queue->tail = new_cell; +void wslay_queue_deinit(struct wslay_queue *queue) { (void)queue; } - } else { - queue->top = queue->tail = new_cell; - } - return 0; +void wslay_queue_push(struct wslay_queue *queue, + struct wslay_queue_entry *ent) { + ent->next = NULL; + *queue->tail = ent; + queue->tail = &ent->next; } -int wslay_queue_push_front(struct wslay_queue *queue, void *data) -{ - struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc - (sizeof(struct wslay_queue_cell)); - if(!new_cell) { - return WSLAY_ERR_NOMEM; - } - new_cell->data = data; - new_cell->next = queue->top; - queue->top = new_cell; - if(!queue->tail) { - queue->tail = queue->top; +void wslay_queue_push_front(struct wslay_queue *queue, + struct wslay_queue_entry *ent) { + ent->next = queue->top; + queue->top = ent; + + if (ent->next == NULL) { + queue->tail = &ent->next; } - return 0; } -void wslay_queue_pop(struct wslay_queue *queue) -{ - struct wslay_queue_cell *top = queue->top; - assert(top); - queue->top = top->next; - if(top == queue->tail) { - queue->tail = NULL; +void wslay_queue_pop(struct wslay_queue *queue) { + assert(queue->top); + queue->top = queue->top->next; + if (queue->top == NULL) { + queue->tail = &queue->top; } - free(top); } -void* wslay_queue_top(struct wslay_queue *queue) -{ +struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue) { assert(queue->top); - return queue->top->data; + return queue->top; } -void* wslay_queue_tail(struct wslay_queue *queue) -{ - assert(queue->tail); - return queue->tail->data; +struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue) { + assert(queue->top); + return wslay_struct_of(queue->tail, struct wslay_queue_entry, next); } -int wslay_queue_empty(struct wslay_queue *queue) -{ +int wslay_queue_empty(struct wslay_queue *queue) { + assert(queue->top || queue->tail == &queue->top); return queue->top == NULL; } diff --git a/thirdparty/wslay/wslay_queue.h b/thirdparty/wslay/wslay_queue.h index 55e78a042e..fa16aea489 100644 --- a/thirdparty/wslay/wslay_queue.h +++ b/thirdparty/wslay/wslay_queue.h @@ -31,23 +31,23 @@ #include <wslay/wslay.h> -struct wslay_queue_cell { - void *data; - struct wslay_queue_cell *next; +struct wslay_queue_entry { + struct wslay_queue_entry *next; }; struct wslay_queue { - struct wslay_queue_cell *top; - struct wslay_queue_cell *tail; + struct wslay_queue_entry *top; + struct wslay_queue_entry **tail; }; -struct wslay_queue* wslay_queue_new(void); -void wslay_queue_free(struct wslay_queue *queue); -int wslay_queue_push(struct wslay_queue *queue, void *data); -int wslay_queue_push_front(struct wslay_queue *queue, void *data); +void wslay_queue_init(struct wslay_queue *queue); +void wslay_queue_deinit(struct wslay_queue *queue); +void wslay_queue_push(struct wslay_queue *queue, struct wslay_queue_entry *ent); +void wslay_queue_push_front(struct wslay_queue *queue, + struct wslay_queue_entry *ent); void wslay_queue_pop(struct wslay_queue *queue); -void* wslay_queue_top(struct wslay_queue *queue); -void* wslay_queue_tail(struct wslay_queue *queue); +struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue); +struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue); int wslay_queue_empty(struct wslay_queue *queue); #endif /* WSLAY_QUEUE_H */ diff --git a/thirdparty/wslay/wslay_stack.c b/thirdparty/wslay/wslay_stack.c deleted file mode 100644 index 0e05d74031..0000000000 --- a/thirdparty/wslay/wslay_stack.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Wslay - The WebSocket Library - * - * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa - * - * 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 "wslay_stack.h" - -#include <string.h> -#include <assert.h> - -struct wslay_stack* wslay_stack_new() -{ - struct wslay_stack *stack = (struct wslay_stack*)malloc - (sizeof(struct wslay_stack)); - if(!stack) { - return NULL; - } - stack->top = NULL; - return stack; -} - -void wslay_stack_free(struct wslay_stack *stack) -{ - struct wslay_stack_cell *p; - if(!stack) { - return; - } - p = stack->top; - while(p) { - struct wslay_stack_cell *next = p->next; - free(p); - p = next; - } - free(stack); -} - -int wslay_stack_push(struct wslay_stack *stack, void *data) -{ - struct wslay_stack_cell *new_cell = (struct wslay_stack_cell*)malloc - (sizeof(struct wslay_stack_cell)); - if(!new_cell) { - return WSLAY_ERR_NOMEM; - } - new_cell->data = data; - new_cell->next = stack->top; - stack->top = new_cell; - return 0; -} - -void wslay_stack_pop(struct wslay_stack *stack) -{ - struct wslay_stack_cell *top = stack->top; - assert(top); - stack->top = top->next; - free(top); -} - -void* wslay_stack_top(struct wslay_stack *stack) -{ - assert(stack->top); - return stack->top->data; -} - -int wslay_stack_empty(struct wslay_stack *stack) -{ - return stack->top == NULL; -} diff --git a/thirdparty/xatlas/xatlas.cpp b/thirdparty/xatlas/xatlas.cpp index 9f66ae0067..d92ef1a83a 100644 --- a/thirdparty/xatlas/xatlas.cpp +++ b/thirdparty/xatlas/xatlas.cpp @@ -40,14 +40,14 @@ Copyright (c) 2012 Brandon Pelfrey #if XATLAS_C_API #include "xatlas_c.h" #endif -#include <assert.h> -#include <float.h> // FLT_MAX -#include <limits.h> -#include <math.h> #include <atomic> #include <condition_variable> #include <mutex> #include <thread> +#include <assert.h> +#include <float.h> // FLT_MAX +#include <limits.h> +#include <math.h> #define __STDC_LIMIT_MACROS #include <stdint.h> #include <stdio.h> @@ -76,10 +76,7 @@ Copyright (c) 2012 Brandon Pelfrey #define XA_XSTR(x) XA_STR(x) #ifndef XA_ASSERT -#define XA_ASSERT(exp) \ - if (!(exp)) { \ - XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); \ - } +#define XA_ASSERT(exp) if (!(exp)) { XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); } #endif #ifndef XA_DEBUG_ASSERT @@ -87,13 +84,13 @@ Copyright (c) 2012 Brandon Pelfrey #endif #ifndef XA_PRINT -#define XA_PRINT(...) \ +#define XA_PRINT(...) \ if (xatlas::internal::s_print && xatlas::internal::s_printVerbose) \ xatlas::internal::s_print(__VA_ARGS__); #endif #ifndef XA_PRINT_WARNING -#define XA_PRINT_WARNING(...) \ +#define XA_PRINT_WARNING(...) \ if (xatlas::internal::s_print) \ xatlas::internal::s_print(__VA_ARGS__); #endif @@ -145,14 +142,18 @@ Copyright (c) 2012 Brandon Pelfrey #define XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION 0 #define XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS 0 -#define XA_DEBUG_EXPORT_OBJ (0 || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS || XA_DEBUG_EXPORT_OBJ_CHARTS || XA_DEBUG_EXPORT_OBJ_TJUNCTION || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS) +#define XA_DEBUG_EXPORT_OBJ (0 \ + || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS \ + || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS \ + || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS \ + || XA_DEBUG_EXPORT_OBJ_CHARTS \ + || XA_DEBUG_EXPORT_OBJ_TJUNCTION \ + || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION \ + || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION \ + || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS) #ifdef _MSC_VER -#define XA_FOPEN(_file, _filename, _mode) \ - { \ - if (fopen_s(&_file, _filename, _mode) != 0) \ - _file = NULL; \ - } +#define XA_FOPEN(_file, _filename, _mode) { if (fopen_s(&_file, _filename, _mode) != 0) _file = NULL; } #define XA_SPRINTF(_buffer, _size, _format, ...) sprintf_s(_buffer, _size, _format, __VA_ARGS__) #else #define XA_FOPEN(_file, _filename, _mode) _file = fopen(_filename, _mode) @@ -172,12 +173,11 @@ typedef uint64_t Duration; #define XA_PROFILE_START(var) const std::chrono::time_point<std::chrono::high_resolution_clock> var##Start = std::chrono::high_resolution_clock::now(); #define XA_PROFILE_END(var) internal::s_profile.var += uint64_t(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - var##Start).count()); -#define XA_PROFILE_PRINT_AND_RESET(label, var) \ - XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); \ - internal::s_profile.var = 0u; +#define XA_PROFILE_PRINT_AND_RESET(label, var) XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); internal::s_profile.var = 0u; #define XA_PROFILE_ALLOC 0 -struct ProfileData { +struct ProfileData +{ #if XA_PROFILE_ALLOC std::atomic<Duration> alloc; #endif @@ -232,11 +232,13 @@ struct ProfileData { static ProfileData s_profile; -static double durationToMs(Duration c) { +static double durationToMs(Duration c) +{ return (double)c * 0.001; } -static double durationToSeconds(Duration c) { +static double durationToSeconds(Duration c) +{ return (double)c * 0.000001; } #else @@ -246,8 +248,10 @@ static double durationToSeconds(Duration c) { #define XA_PROFILE_ALLOC 0 #endif -struct MemTag { - enum { +struct MemTag +{ + enum + { Default, BitImage, BVH, @@ -270,7 +274,8 @@ struct MemTag { }; #if XA_DEBUG_HEAP -struct AllocHeader { +struct AllocHeader +{ size_t size; const char *file; int line; @@ -283,10 +288,11 @@ struct AllocHeader { static std::mutex s_allocMutex; static AllocHeader *s_allocRoot = nullptr; static size_t s_allocTotalCount = 0, s_allocTotalSize = 0, s_allocPeakSize = 0, s_allocCount[MemTag::Count] = { 0 }, s_allocTotalTagSize[MemTag::Count] = { 0 }, s_allocPeakTagSize[MemTag::Count] = { 0 }; -static uint32_t s_allocId = 0; +static uint32_t s_allocId =0 ; static constexpr uint32_t kAllocRedzone = 0x12345678; -static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line) { +static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line) +{ std::unique_lock<std::mutex> lock(s_allocMutex); if (!size && !ptr) return nullptr; @@ -347,7 +353,8 @@ static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line return newPtr + sizeof(AllocHeader); } -static void ReportLeaks() { +static void ReportLeaks() +{ printf("Checking for memory leaks...\n"); bool anyLeaks = false; AllocHeader *header = s_allocRoot; @@ -375,7 +382,8 @@ static void ReportLeaks() { s_allocTotalTagSize[i] = s_allocPeakTagSize[i] = 0; } -static void PrintMemoryUsage() { +static void PrintMemoryUsage() +{ XA_PRINT("Total allocations: %zu\n", s_allocTotalCount); XA_PRINT("Memory usage: %0.2fMB current, %0.2fMB peak\n", internal::s_allocTotalSize / 1024.0f / 1024.0f, internal::s_allocPeakSize / 1024.0f / 1024.0f); static const char *labels[] = { // Sync with MemTag @@ -404,7 +412,8 @@ static void PrintMemoryUsage() { #define XA_PRINT_MEM_USAGE internal::PrintMemoryUsage(); #else -static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/) { +static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/) +{ if (size == 0 && !ptr) return nullptr; if (size == 0 && s_free) { @@ -430,75 +439,89 @@ static constexpr float kEpsilon = 0.0001f; static constexpr float kAreaEpsilon = FLT_EPSILON; static constexpr float kNormalEpsilon = 0.001f; -static int align(int x, int a) { +static int align(int x, int a) +{ return (x + a - 1) & ~(a - 1); } template <typename T> -static T max(const T &a, const T &b) { +static T max(const T &a, const T &b) +{ return a > b ? a : b; } template <typename T> -static T min(const T &a, const T &b) { +static T min(const T &a, const T &b) +{ return a < b ? a : b; } template <typename T> -static T max3(const T &a, const T &b, const T &c) { +static T max3(const T &a, const T &b, const T &c) +{ return max(a, max(b, c)); } /// Return the maximum of the three arguments. template <typename T> -static T min3(const T &a, const T &b, const T &c) { +static T min3(const T &a, const T &b, const T &c) +{ return min(a, min(b, c)); } /// Clamp between two values. template <typename T> -static T clamp(const T &x, const T &a, const T &b) { +static T clamp(const T &x, const T &a, const T &b) +{ return min(max(x, a), b); } template <typename T> -static void swap(T &a, T &b) { +static void swap(T &a, T &b) +{ T temp = a; a = b; b = temp; } -union FloatUint32 { +union FloatUint32 +{ float f; uint32_t u; }; -static bool isFinite(float f) { +static bool isFinite(float f) +{ FloatUint32 fu; fu.f = f; return fu.u != 0x7F800000u && fu.u != 0x7F800001u; } -static bool isNan(float f) { +static bool isNan(float f) +{ return f != f; } // Robust floating point comparisons: // http://realtimecollisiondetection.net/blog/?p=89 -static bool equal(const float f0, const float f1, const float epsilon) { +static bool equal(const float f0, const float f1, const float epsilon) +{ //return fabs(f0-f1) <= epsilon; return fabs(f0 - f1) <= epsilon * max3(1.0f, fabsf(f0), fabsf(f1)); } -static int ftoi_ceil(float val) { +static int ftoi_ceil(float val) +{ return (int)ceilf(val); } -static bool isZero(const float f, const float epsilon) { +static bool isZero(const float f, const float epsilon) +{ return fabs(f) <= epsilon; } -static float square(float f) { +static float square(float f) +{ return f * f; } @@ -508,8 +531,9 @@ static float square(float f) { * @note isPowerOfTwo(x) == true -> nextPowerOfTwo(x) == x * @note nextPowerOfTwo(x) = 2 << log2(x-1) */ -static uint32_t nextPowerOfTwo(uint32_t x) { - XA_DEBUG_ASSERT(x != 0); +static uint32_t nextPowerOfTwo(uint32_t x) +{ + XA_DEBUG_ASSERT( x != 0 ); // On modern CPUs this is supposed to be as fast as using the bsr instruction. x--; x |= x >> 1; @@ -520,34 +544,38 @@ static uint32_t nextPowerOfTwo(uint32_t x) { return x + 1; } -class Vector2 { +class Vector2 +{ public: Vector2() {} - explicit Vector2(float f) : - x(f), y(f) {} - Vector2(float _x, float _y) : - x(_x), y(_y) {} + explicit Vector2(float f) : x(f), y(f) {} + Vector2(float _x, float _y): x(_x), y(_y) {} - Vector2 operator-() const { + Vector2 operator-() const + { return Vector2(-x, -y); } - void operator+=(const Vector2 &v) { + void operator+=(const Vector2 &v) + { x += v.x; y += v.y; } - void operator-=(const Vector2 &v) { + void operator-=(const Vector2 &v) + { x -= v.x; y -= v.y; } - void operator*=(float s) { + void operator*=(float s) + { x *= s; y *= s; } - void operator*=(const Vector2 &v) { + void operator*=(const Vector2 &v) + { x *= v.x; y *= v.y; } @@ -555,11 +583,13 @@ public: float x, y; }; -static bool operator==(const Vector2 &a, const Vector2 &b) { +static bool operator==(const Vector2 &a, const Vector2 &b) +{ return a.x == b.x && a.y == b.y; } -static bool operator!=(const Vector2 &a, const Vector2 &b) { +static bool operator!=(const Vector2 &a, const Vector2 &b) +{ return a.x != b.x || a.y != b.y; } @@ -568,33 +598,40 @@ static bool operator!=(const Vector2 &a, const Vector2 &b) { return Vector2(a.x + b.x, a.y + b.y); }*/ -static Vector2 operator-(const Vector2 &a, const Vector2 &b) { +static Vector2 operator-(const Vector2 &a, const Vector2 &b) +{ return Vector2(a.x - b.x, a.y - b.y); } -static Vector2 operator*(const Vector2 &v, float s) { +static Vector2 operator*(const Vector2 &v, float s) +{ return Vector2(v.x * s, v.y * s); } -static float dot(const Vector2 &a, const Vector2 &b) { +static float dot(const Vector2 &a, const Vector2 &b) +{ return a.x * b.x + a.y * b.y; } -static float lengthSquared(const Vector2 &v) { +static float lengthSquared(const Vector2 &v) +{ return v.x * v.x + v.y * v.y; } -static float length(const Vector2 &v) { +static float length(const Vector2 &v) +{ return sqrtf(lengthSquared(v)); } #if XA_DEBUG -static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon) { +static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon) +{ return equal(length(v), 1, epsilon); } #endif -static Vector2 normalize(const Vector2 &v) { +static Vector2 normalize(const Vector2 &v) +{ const float l = length(v); XA_DEBUG_ASSERT(l > 0.0f); // Never negative. const Vector2 n = v * (1.0f / l); @@ -602,30 +639,36 @@ static Vector2 normalize(const Vector2 &v) { return n; } -static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback) { +static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback) +{ const float l = length(v); if (l > 0.0f) // Never negative. return v * (1.0f / l); return fallback; } -static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon) { +static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon) +{ return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon); } -static Vector2 min(const Vector2 &a, const Vector2 &b) { +static Vector2 min(const Vector2 &a, const Vector2 &b) +{ return Vector2(min(a.x, b.x), min(a.y, b.y)); } -static Vector2 max(const Vector2 &a, const Vector2 &b) { +static Vector2 max(const Vector2 &a, const Vector2 &b) +{ return Vector2(max(a.x, b.x), max(a.y, b.y)); } -static bool isFinite(const Vector2 &v) { +static bool isFinite(const Vector2 &v) +{ return isFinite(v.x) && isFinite(v.y); } -static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) { +static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) +{ // IC: While it may be appealing to use the following expression: //return (c.x * a.y + a.x * b.y + b.x * c.y - b.x * a.y - c.x * b.y - a.x * c.y) * 0.5f; // That's actually a terrible idea. Small triangles far from the origin can end up producing fairly large floating point @@ -639,7 +682,8 @@ static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) return (v0.x * v1.y - v0.y * v1.x) * 0.5f; } -static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon) { +static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon) +{ const Vector2 v0 = a2 - a1; const Vector2 v1 = b2 - b1; const float denom = -v1.x * v0.y + v0.x * v1.y; @@ -647,70 +691,76 @@ static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 & return false; const float s = (-v0.y * (a1.x - b1.x) + v0.x * (a1.y - b1.y)) / denom; if (s > epsilon && s < 1.0f - epsilon) { - const float t = (v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom; + const float t = ( v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom; return t > epsilon && t < 1.0f - epsilon; } return false; } -struct Vector2i { +struct Vector2i +{ Vector2i() {} - Vector2i(int32_t _x, int32_t _y) : - x(_x), y(_y) {} + Vector2i(int32_t _x, int32_t _y) : x(_x), y(_y) {} int32_t x, y; }; -class Vector3 { +class Vector3 +{ public: Vector3() {} - explicit Vector3(float f) : - x(f), y(f), z(f) {} - Vector3(float _x, float _y, float _z) : - x(_x), y(_y), z(_z) {} - Vector3(const Vector2 &v, float _z) : - x(v.x), y(v.y), z(_z) {} - - Vector2 xy() const { + explicit Vector3(float f) : x(f), y(f), z(f) {} + Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {} + Vector3(const Vector2 &v, float _z) : x(v.x), y(v.y), z(_z) {} + + Vector2 xy() const + { return Vector2(x, y); } - Vector3 operator-() const { + Vector3 operator-() const + { return Vector3(-x, -y, -z); } - void operator+=(const Vector3 &v) { + void operator+=(const Vector3 &v) + { x += v.x; y += v.y; z += v.z; } - void operator-=(const Vector3 &v) { + void operator-=(const Vector3 &v) + { x -= v.x; y -= v.y; z -= v.z; } - void operator*=(float s) { + void operator*=(float s) + { x *= s; y *= s; z *= s; } - void operator/=(float s) { + void operator/=(float s) + { float is = 1.0f / s; x *= is; y *= is; z *= is; } - void operator*=(const Vector3 &v) { + void operator*=(const Vector3 &v) + { x *= v.x; y *= v.y; z *= v.z; } - void operator/=(const Vector3 &v) { + void operator/=(const Vector3 &v) + { x /= v.x; y /= v.y; z /= v.z; @@ -719,47 +769,58 @@ public: float x, y, z; }; -static Vector3 operator+(const Vector3 &a, const Vector3 &b) { +static Vector3 operator+(const Vector3 &a, const Vector3 &b) +{ return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); } -static Vector3 operator-(const Vector3 &a, const Vector3 &b) { +static Vector3 operator-(const Vector3 &a, const Vector3 &b) +{ return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); } -static bool operator==(const Vector3 &a, const Vector3 &b) { +static bool operator==(const Vector3 &a, const Vector3 &b) +{ return a.x == b.x && a.y == b.y && a.z == b.z; } -static Vector3 cross(const Vector3 &a, const Vector3 &b) { +static Vector3 cross(const Vector3 &a, const Vector3 &b) +{ return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); } -static Vector3 operator*(const Vector3 &v, float s) { +static Vector3 operator*(const Vector3 &v, float s) +{ return Vector3(v.x * s, v.y * s, v.z * s); } -static Vector3 operator/(const Vector3 &v, float s) { +static Vector3 operator/(const Vector3 &v, float s) +{ return v * (1.0f / s); } -static float dot(const Vector3 &a, const Vector3 &b) { +static float dot(const Vector3 &a, const Vector3 &b) +{ return a.x * b.x + a.y * b.y + a.z * b.z; } -static float lengthSquared(const Vector3 &v) { +static float lengthSquared(const Vector3 &v) +{ return v.x * v.x + v.y * v.y + v.z * v.z; } -static float length(const Vector3 &v) { +static float length(const Vector3 &v) +{ return sqrtf(lengthSquared(v)); } -static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon) { +static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon) +{ return equal(length(v), 1.0f, epsilon); } -static Vector3 normalize(const Vector3 &v) { +static Vector3 normalize(const Vector3 &v) +{ const float l = length(v); XA_DEBUG_ASSERT(l > 0.0f); // Never negative. const Vector3 n = v * (1.0f / l); @@ -767,103 +828,116 @@ static Vector3 normalize(const Vector3 &v) { return n; } -static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback) { +static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback) +{ const float l = length(v); if (l > 0.0f) // Never negative. return v * (1.0f / l); return fallback; } -static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon) { +static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon) +{ return fabs(v0.x - v1.x) <= epsilon && fabs(v0.y - v1.y) <= epsilon && fabs(v0.z - v1.z) <= epsilon; } -static Vector3 min(const Vector3 &a, const Vector3 &b) { +static Vector3 min(const Vector3 &a, const Vector3 &b) +{ return Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z)); } -static Vector3 max(const Vector3 &a, const Vector3 &b) { +static Vector3 max(const Vector3 &a, const Vector3 &b) +{ return Vector3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)); } #if XA_DEBUG -bool isFinite(const Vector3 &v) { +bool isFinite(const Vector3 &v) +{ return isFinite(v.x) && isFinite(v.y) && isFinite(v.z); } #endif -struct Extents2 { +struct Extents2 +{ Vector2 min, max; Extents2() {} - Extents2(Vector2 p1, Vector2 p2) { + Extents2(Vector2 p1, Vector2 p2) + { min = xatlas::internal::min(p1, p2); max = xatlas::internal::max(p1, p2); } - void reset() { + void reset() + { min.x = min.y = FLT_MAX; max.x = max.y = -FLT_MAX; } - void add(Vector2 p) { + void add(Vector2 p) + { min = xatlas::internal::min(min, p); max = xatlas::internal::max(max, p); } - Vector2 midpoint() const { + Vector2 midpoint() const + { return Vector2(min.x + (max.x - min.x) * 0.5f, min.y + (max.y - min.y) * 0.5f); } - static bool intersect(const Extents2 &e1, const Extents2 &e2) { + static bool intersect(const Extents2 &e1, const Extents2 &e2) + { return e1.min.x <= e2.max.x && e1.max.x >= e2.min.x && e1.min.y <= e2.max.y && e1.max.y >= e2.min.y; } }; // From Fast-BVH -struct AABB { - AABB() : - min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {} - AABB(const Vector3 &_min, const Vector3 &_max) : - min(_min), max(_max) {} - AABB(const Vector3 &p, float radius = 0.0f) : - min(p), max(p) { - if (radius > 0.0f) - expand(radius); - } - - bool intersect(const AABB &other) const { +struct AABB +{ + AABB() : min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {} + AABB(const Vector3 &_min, const Vector3 &_max) : min(_min), max(_max) { } + AABB(const Vector3 &p, float radius = 0.0f) : min(p), max(p) { if (radius > 0.0f) expand(radius); } + + bool intersect(const AABB &other) const + { return min.x <= other.max.x && max.x >= other.min.x && min.y <= other.max.y && max.y >= other.min.y && min.z <= other.max.z && max.z >= other.min.z; } - void expandToInclude(const Vector3 &p) { + void expandToInclude(const Vector3 &p) + { min = internal::min(min, p); max = internal::max(max, p); } - void expandToInclude(const AABB &aabb) { + void expandToInclude(const AABB &aabb) + { min = internal::min(min, aabb.min); max = internal::max(max, aabb.max); } - void expand(float amount) { + void expand(float amount) + { min -= Vector3(amount); max += Vector3(amount); } - Vector3 centroid() const { + Vector3 centroid() const + { return min + (max - min) * 0.5f; } - uint32_t maxDimension() const { + uint32_t maxDimension() const + { const Vector3 extent = max - min; uint32_t result = 0; if (extent.y > extent.x) { result = 1; if (extent.z > extent.y) result = 2; - } else if (extent.z > extent.x) + } + else if(extent.z > extent.x) result = 2; return result; } @@ -871,9 +945,10 @@ struct AABB { Vector3 min, max; }; -struct ArrayBase { - ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) : - buffer(nullptr), elementSize(_elementSize), size(0), capacity(0) { +struct ArrayBase +{ + ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) : buffer(nullptr), elementSize(_elementSize), size(0), capacity(0) + { #if XA_DEBUG_HEAP this->memTag = memTag; #else @@ -881,15 +956,18 @@ struct ArrayBase { #endif } - ~ArrayBase() { + ~ArrayBase() + { XA_FREE(buffer); } - XA_INLINE void clear() { + XA_INLINE void clear() + { size = 0; } - void copyFrom(const uint8_t *data, uint32_t length) { + void copyFrom(const uint8_t *data, uint32_t length) + { XA_DEBUG_ASSERT(data); XA_DEBUG_ASSERT(length > 0); resize(length, true); @@ -897,7 +975,8 @@ struct ArrayBase { memcpy(buffer, data, length * elementSize); } - void copyTo(ArrayBase &other) const { + void copyTo(ArrayBase &other) const + { XA_DEBUG_ASSERT(elementSize == other.elementSize); XA_DEBUG_ASSERT(size > 0); other.resize(size, true); @@ -905,7 +984,8 @@ struct ArrayBase { memcpy(other.buffer, buffer, size * elementSize); } - void destroy() { + void destroy() + { size = 0; XA_FREE(buffer); buffer = nullptr; @@ -914,7 +994,8 @@ struct ArrayBase { } // Insert the given element at the given index shifting all the elements up. - void insertAt(uint32_t index, const uint8_t *value) { + void insertAt(uint32_t index, const uint8_t *value) + { XA_DEBUG_ASSERT(index >= 0 && index <= size); XA_DEBUG_ASSERT(value); resize(size + 1, false); @@ -925,7 +1006,8 @@ struct ArrayBase { memcpy(&buffer[index * elementSize], value, elementSize); } - void moveTo(ArrayBase &other) { + void moveTo(ArrayBase &other) + { XA_DEBUG_ASSERT(elementSize == other.elementSize); other.destroy(); other.buffer = buffer; @@ -939,12 +1021,14 @@ struct ArrayBase { elementSize = size = capacity = 0; } - void pop_back() { + void pop_back() + { XA_DEBUG_ASSERT(size > 0); resize(size - 1, false); } - void push_back(const uint8_t *value) { + void push_back(const uint8_t *value) + { XA_DEBUG_ASSERT(value < buffer || value >= buffer + size); XA_DEBUG_ASSERT(value); resize(size + 1, false); @@ -953,7 +1037,8 @@ struct ArrayBase { memcpy(&buffer[(size - 1) * elementSize], value, elementSize); } - void push_back(const ArrayBase &other) { + void push_back(const ArrayBase &other) + { XA_DEBUG_ASSERT(elementSize == other.elementSize); if (other.size > 0) { const uint32_t oldSize = size; @@ -965,7 +1050,8 @@ struct ArrayBase { } // Remove the element at the given index. This is an expensive operation! - void removeAt(uint32_t index) { + void removeAt(uint32_t index) + { XA_DEBUG_ASSERT(index >= 0 && index < size); XA_DEBUG_ASSERT(buffer); if (buffer) { @@ -977,7 +1063,8 @@ struct ArrayBase { } // Element at index is swapped with the last element, then the array length is decremented. - void removeAtFast(uint32_t index) { + void removeAtFast(uint32_t index) + { XA_DEBUG_ASSERT(index >= 0 && index < size); XA_DEBUG_ASSERT(buffer); if (buffer) { @@ -988,12 +1075,14 @@ struct ArrayBase { } } - void reserve(uint32_t desiredSize) { + void reserve(uint32_t desiredSize) + { if (desiredSize > capacity) setArrayCapacity(desiredSize); } - void resize(uint32_t newSize, bool exact) { + void resize(uint32_t newSize, bool exact) + { size = newSize; if (size > capacity) { // First allocation is always exact. Otherwise, following allocations grow array to 150% of desired size. @@ -1006,7 +1095,8 @@ struct ArrayBase { } } - void setArrayCapacity(uint32_t newCapacity) { + void setArrayCapacity(uint32_t newCapacity) + { XA_DEBUG_ASSERT(newCapacity >= size); if (newCapacity == 0) { // free the buffer. @@ -1026,7 +1116,8 @@ struct ArrayBase { } #if XA_DEBUG_HEAP - void setMemTag(int _memTag) { + void setMemTag(int _memTag) + { this->memTag = _memTag; } #endif @@ -1040,27 +1131,30 @@ struct ArrayBase { #endif }; -template <typename T> -class Array { +template<typename T> +class Array +{ public: - Array(int memTag = MemTag::Default) : - m_base(sizeof(T), memTag) {} - Array(const Array &) = delete; + Array(int memTag = MemTag::Default) : m_base(sizeof(T), memTag) {} + Array(const Array&) = delete; Array &operator=(const Array &) = delete; - XA_INLINE const T &operator[](uint32_t index) const { + XA_INLINE const T &operator[](uint32_t index) const + { XA_DEBUG_ASSERT(index < m_base.size); XA_DEBUG_ASSERT(m_base.buffer); return ((const T *)m_base.buffer)[index]; } - XA_INLINE T &operator[](uint32_t index) { + XA_INLINE T &operator[](uint32_t index) + { XA_DEBUG_ASSERT(index < m_base.size); XA_DEBUG_ASSERT(m_base.buffer); return ((T *)m_base.buffer)[index]; } - XA_INLINE const T &back() const { + XA_INLINE const T &back() const + { XA_DEBUG_ASSERT(!isEmpty()); return ((const T *)m_base.buffer)[m_base.size - 1]; } @@ -1068,7 +1162,8 @@ public: XA_INLINE T *begin() { return (T *)m_base.buffer; } XA_INLINE void clear() { m_base.clear(); } - bool contains(const T &value) const { + bool contains(const T &value) const + { for (uint32_t i = 0; i < m_base.size; i++) { if (((const T *)m_base.buffer)[i] == value) return true; @@ -1093,23 +1188,27 @@ public: void reserve(uint32_t desiredSize) { m_base.reserve(desiredSize); } void resize(uint32_t newSize) { m_base.resize(newSize, true); } - void runCtors() { + void runCtors() + { for (uint32_t i = 0; i < m_base.size; i++) new (&((T *)m_base.buffer)[i]) T; } - void runDtors() { + void runDtors() + { for (uint32_t i = 0; i < m_base.size; i++) ((T *)m_base.buffer)[i].~T(); } - void fill(const T &value) { + void fill(const T &value) + { auto buffer = (T *)m_base.buffer; for (uint32_t i = 0; i < m_base.size; i++) buffer[i] = value; } - void fillBytes(uint8_t value) { + void fillBytes(uint8_t value) + { if (m_base.buffer && m_base.size > 0) memset(m_base.buffer, (int)value, m_base.size * m_base.elementSize); } @@ -1120,7 +1219,8 @@ public: XA_INLINE uint32_t size() const { return m_base.size; } - XA_INLINE void zeroOutMemory() { + XA_INLINE void zeroOutMemory() + { if (m_base.buffer && m_base.size > 0) memset(m_base.buffer, 0, m_base.elementSize * m_base.size); } @@ -1129,57 +1229,37 @@ private: ArrayBase m_base; }; -template <typename T> -struct ArrayView { - ArrayView() : - data(nullptr), length(0) {} - ArrayView(Array<T> &a) : - data(a.data()), length(a.size()) {} - ArrayView(T *_data, uint32_t _length) : - data(_data), length(_length) {} - ArrayView &operator=(Array<T> &a) { - data = a.data(); - length = a.size(); - return *this; - } - XA_INLINE const T &operator[](uint32_t index) const { - XA_DEBUG_ASSERT(index < length); - return data[index]; - } - XA_INLINE T &operator[](uint32_t index) { - XA_DEBUG_ASSERT(index < length); - return data[index]; - } +template<typename T> +struct ArrayView +{ + ArrayView() : data(nullptr), length(0) {} + ArrayView(Array<T> &a) : data(a.data()), length(a.size()) {} + ArrayView(T *_data, uint32_t _length) : data(_data), length(_length) {} + ArrayView &operator=(Array<T> &a) { data = a.data(); length = a.size(); return *this; } + XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; } + XA_INLINE T &operator[](uint32_t index) { XA_DEBUG_ASSERT(index < length); return data[index]; } T *data; uint32_t length; }; -template <typename T> -struct ConstArrayView { - ConstArrayView() : - data(nullptr), length(0) {} - ConstArrayView(const Array<T> &a) : - data(a.data()), length(a.size()) {} - ConstArrayView(ArrayView<T> av) : - data(av.data), length(av.length) {} - ConstArrayView(const T *_data, uint32_t _length) : - data(_data), length(_length) {} - ConstArrayView &operator=(const Array<T> &a) { - data = a.data(); - length = a.size(); - return *this; - } - XA_INLINE const T &operator[](uint32_t index) const { - XA_DEBUG_ASSERT(index < length); - return data[index]; - } +template<typename T> +struct ConstArrayView +{ + ConstArrayView() : data(nullptr), length(0) {} + ConstArrayView(const Array<T> &a) : data(a.data()), length(a.size()) {} + ConstArrayView(ArrayView<T> av) : data(av.data), length(av.length) {} + ConstArrayView(const T *_data, uint32_t _length) : data(_data), length(_length) {} + ConstArrayView &operator=(const Array<T> &a) { data = a.data(); length = a.size(); return *this; } + XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; } const T *data; uint32_t length; }; /// Basis class to compute tangent space basis, ortogonalizations and to transform vectors from one space to another. -struct Basis { - XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal) { +struct Basis +{ + XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal) + { XA_ASSERT(isNormalized(normal)); // Choose minimum axis. Vector3 tangent; @@ -1195,7 +1275,8 @@ struct Basis { return tangent; } - XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent) { + XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent) + { return cross(normal, tangent); } @@ -1205,36 +1286,42 @@ struct Basis { }; // Simple bit array. -class BitArray { +class BitArray +{ public: - BitArray() : - m_size(0) {} + BitArray() : m_size(0) {} - BitArray(uint32_t sz) { + BitArray(uint32_t sz) + { resize(sz); } - void resize(uint32_t new_size) { + void resize(uint32_t new_size) + { m_size = new_size; m_wordArray.resize((m_size + 31) >> 5); } - bool get(uint32_t index) const { + bool get(uint32_t index) const + { XA_DEBUG_ASSERT(index < m_size); return (m_wordArray[index >> 5] & (1 << (index & 31))) != 0; } - void set(uint32_t index) { + void set(uint32_t index) + { XA_DEBUG_ASSERT(index < m_size); m_wordArray[index >> 5] |= (1 << (index & 31)); } - void unset(uint32_t index) { + void unset(uint32_t index) + { XA_DEBUG_ASSERT(index < m_size); m_wordArray[index >> 5] &= ~(1 << (index & 31)); } - void zeroOutMemory() { + void zeroOutMemory() + { m_wordArray.zeroOutMemory(); } @@ -1243,13 +1330,13 @@ private: Array<uint32_t> m_wordArray; }; -class BitImage { +class BitImage +{ public: - BitImage() : - m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {} + BitImage() : m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {} - BitImage(uint32_t w, uint32_t h) : - m_width(w), m_height(h), m_data(MemTag::BitImage) { + BitImage(uint32_t w, uint32_t h) : m_width(w), m_height(h), m_data(MemTag::BitImage) + { m_rowStride = (m_width + 63) >> 6; m_data.resize(m_rowStride * m_height); m_data.zeroOutMemory(); @@ -1260,14 +1347,16 @@ public: uint32_t width() const { return m_width; } uint32_t height() const { return m_height; } - void copyTo(BitImage &other) { + void copyTo(BitImage &other) + { other.m_width = m_width; other.m_height = m_height; other.m_rowStride = m_rowStride; m_data.copyTo(other.m_data); } - void resize(uint32_t w, uint32_t h, bool discard) { + void resize(uint32_t w, uint32_t h, bool discard) + { const uint32_t rowStride = (w + 63) >> 6; if (discard) { m_data.resize(rowStride * h); @@ -1291,24 +1380,28 @@ public: m_rowStride = rowStride; } - bool get(uint32_t x, uint32_t y) const { + bool get(uint32_t x, uint32_t y) const + { XA_DEBUG_ASSERT(x < m_width && y < m_height); const uint32_t index = (x >> 6) + y * m_rowStride; return (m_data[index] & (UINT64_C(1) << (uint64_t(x) & UINT64_C(63)))) != 0; } - void set(uint32_t x, uint32_t y) { + void set(uint32_t x, uint32_t y) + { XA_DEBUG_ASSERT(x < m_width && y < m_height); const uint32_t index = (x >> 6) + y * m_rowStride; m_data[index] |= UINT64_C(1) << (uint64_t(x) & UINT64_C(63)); XA_DEBUG_ASSERT(get(x, y)); } - void zeroOutMemory() { + void zeroOutMemory() + { m_data.zeroOutMemory(); } - bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const { + bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const + { for (uint32_t y = 0; y < image.m_height; y++) { const uint32_t thisY = y + offsetY; if (thisY >= m_height) @@ -1332,7 +1425,8 @@ public: return true; } - void dilate(uint32_t padding) { + void dilate(uint32_t padding) + { BitImage tmp(m_width, m_height); for (uint32_t p = 0; p < padding; p++) { tmp.zeroOutMemory(); @@ -1342,21 +1436,15 @@ public: if (!b) { if (x > 0) { b |= get(x - 1, y); - if (y > 0) - b |= get(x - 1, y - 1); - if (y < m_height - 1) - b |= get(x - 1, y + 1); + if (y > 0) b |= get(x - 1, y - 1); + if (y < m_height - 1) b |= get(x - 1, y + 1); } - if (y > 0) - b |= get(x, y - 1); - if (y < m_height - 1) - b |= get(x, y + 1); + if (y > 0) b |= get(x, y - 1); + if (y < m_height - 1) b |= get(x, y + 1); if (x < m_width - 1) { b |= get(x + 1, y); - if (y > 0) - b |= get(x + 1, y - 1); - if (y < m_height - 1) - b |= get(x + 1, y + 1); + if (y > 0) b |= get(x + 1, y - 1); + if (y < m_height - 1) b |= get(x + 1, y + 1); } } if (b) @@ -1375,10 +1463,11 @@ private: }; // From Fast-BVH -class BVH { +class BVH +{ public: - BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) : - m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH) { + BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) : m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH) + { m_objectAabbs = &objectAabbs; if (m_objectAabbs->isEmpty()) return; @@ -1398,7 +1487,7 @@ public: Node node; m_nodes.reserve(objectAabbs.size() * 2); uint32_t nNodes = 0; - while (stackptr > 0) { + while(stackptr > 0) { // Pop the next item off of the stack const BuildEntry &bnode = todo[--stackptr]; const uint32_t start = bnode.start; @@ -1411,7 +1500,7 @@ public: // Calculate the bounding box for this node AABB bb(objectAabbs[m_objectIds[start]]); AABB bc(objectAabbs[m_objectIds[start]].centroid()); - for (uint32_t p = start + 1; p < end; ++p) { + for(uint32_t p = start + 1; p < end; ++p) { bb.expandToInclude(objectAabbs[m_objectIds[p]]); bc.expandToInclude(objectAabbs[m_objectIds[p]].centroid()); } @@ -1427,7 +1516,7 @@ public: m_nodes[bnode.parent].rightOffset--; // When this is the second touch, this is the right child. // The right child sets up the offset for the flat tree. - if (m_nodes[bnode.parent].rightOffset == kTouchedTwice) + if (m_nodes[bnode.parent].rightOffset == kTouchedTwice ) m_nodes[bnode.parent].rightOffset = nNodes - 1 - bnode.parent; } // If this is a leaf, no need to subdivide. @@ -1462,20 +1551,21 @@ public: } } - void query(const AABB &queryAabb, Array<uint32_t> &result) const { + void query(const AABB &queryAabb, Array<uint32_t> &result) const + { result.clear(); // Working set uint32_t todo[64]; int32_t stackptr = 0; // "Push" on the root node to the working set todo[stackptr] = 0; - while (stackptr >= 0) { + while(stackptr >= 0) { // Pop off the next node to work on. const int ni = todo[stackptr--]; const Node &node = m_nodes[ni]; // Is leaf -> Intersect if (node.rightOffset == 0) { - for (uint32_t o = 0; o < node.nPrims; ++o) { + for(uint32_t o = 0; o < node.nPrims; ++o) { const uint32_t obj = node.start + o; if (queryAabb.intersect((*m_objectAabbs)[m_objectIds[obj]])) result.push_back(m_objectIds[obj]); @@ -1492,12 +1582,14 @@ public: } private: - struct BuildEntry { + struct BuildEntry + { uint32_t parent; // If non-zero then this is the index of the parent. (used in offsets) uint32_t start, end; // The range of objects in the object list covered by this node. }; - struct Node { + struct Node + { AABB aabb; uint32_t start, nPrims, rightOffset; }; @@ -1507,8 +1599,10 @@ private: Array<Node> m_nodes; }; -struct Fit { - static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis) { +struct Fit +{ + static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis) + { if (computeLeastSquaresNormal(points, &basis->normal)) { basis->tangent = Basis::computeTangent(basis->normal); basis->bitangent = Basis::computeBitangent(basis->normal, basis->tangent); @@ -1522,7 +1616,8 @@ private: // Fast, and accurate to within a few degrees. // Returns None if the points do not span a plane. // https://www.ilikebigbits.com/2015_03_04_plane_from_points.html - static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal) { + static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal) + { XA_DEBUG_ASSERT(points.length >= 3); if (points.length == 3) { *normal = normalize(cross(points[2] - points[0], points[1] - points[0])); @@ -1587,7 +1682,7 @@ private: // Pick path with best conditioning: Vector3 dir(0.0f); if (det_max == det_x) - dir = Vector3(det_x, xz * yz - xy * zz, xy * yz - xz * yy); + dir = Vector3(det_x,xz * yz - xy * zz,xy * yz - xz * yy); else if (det_max == det_y) dir = Vector3(xz * yz - xy * zz, det_y, xy * xz - yz * xx); else if (det_max == det_z) @@ -1600,7 +1695,8 @@ private: return isNormalized(*normal); } - static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis) { + static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis) + { float matrix[6]; computeCovariance(points, matrix); if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0) @@ -1615,7 +1711,8 @@ private: return true; } - static Vector3 computeCentroid(ConstArrayView<Vector3> points) { + static Vector3 computeCentroid(ConstArrayView<Vector3> points) + { Vector3 centroid(0.0f); for (uint32_t i = 0; i < points.length; i++) centroid += points[i]; @@ -1623,7 +1720,8 @@ private: return centroid; } - static Vector3 computeCovariance(ConstArrayView<Vector3> points, float *covariance) { + static Vector3 computeCovariance(ConstArrayView<Vector3> points, float * covariance) + { // compute the centroid Vector3 centroid = computeCentroid(points); // compute covariance matrix @@ -1645,7 +1743,8 @@ private: // Tridiagonal solver from Charles Bloom. // Householder transforms followed by QL decomposition. // Seems to be based on the code from Numerical Recipes in C. - static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]) { + static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]) + { XA_DEBUG_ASSERT(matrix != nullptr && eigenValues != nullptr && eigenVectors != nullptr); float subd[3]; float diag[3]; @@ -1670,7 +1769,7 @@ private: // eigenvectors are the columns; make them the rows : for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { - (&eigenVectors[j].x)[i] = (float)work[i][j]; + (&eigenVectors[j].x)[i] = (float) work[i][j]; } } // shuffle to sort by singular value : @@ -1692,7 +1791,8 @@ private: } private: - static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd) { + static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd) + { // Householder reduction T = Q^t M Q // Input: // mat, symmetric 3x3 matrix M @@ -1744,7 +1844,8 @@ private: } } - static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd) { + static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd) + { // QL iteration with implicit shifting to reduce matrix from tridiagonal // to diagonal const int maxiter = 32; @@ -1754,21 +1855,21 @@ private: int m; for (m = ell; m <= 1; m++) { float dd = fabsf(diag[m]) + fabsf(diag[m + 1]); - if (fabsf(subd[m]) + dd == dd) + if ( fabsf(subd[m]) + dd == dd ) break; } - if (m == ell) + if ( m == ell ) break; float g = (diag[ell + 1] - diag[ell]) / (2 * subd[ell]); float r = sqrtf(g * g + 1); - if (g < 0) + if ( g < 0 ) g = diag[m] - diag[ell] + subd[ell] / (g - r); else g = diag[m] - diag[ell] + subd[ell] / (g + r); float s = 1, c = 1, p = 0; for (int i = m - 1; i >= ell; i--) { float f = s * subd[i], b = c * subd[i]; - if (fabsf(f) >= fabsf(g)) { + if ( fabsf(f) >= fabsf(g) ) { c = g / f; r = sqrtf(c * c + 1); subd[i + 1] = f * r; @@ -1794,7 +1895,7 @@ private: subd[ell] = g; subd[m] = 0; } - if (iter == maxiter) + if ( iter == maxiter ) // should not get here under normal circumstances return false; } @@ -1802,48 +1903,56 @@ private: } }; -static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381) { - const uint8_t *data = (const uint8_t *)data_in; +static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381) +{ + const uint8_t *data = (const uint8_t *) data_in; uint32_t i = 0; while (i < size) { - h = (h << 16) + (h << 6) - h + (uint32_t)data[i++]; + h = (h << 16) + (h << 6) - h + (uint32_t ) data[i++]; } return h; } template <typename T> -static uint32_t hash(const T &t, uint32_t h = 5381) { +static uint32_t hash(const T &t, uint32_t h = 5381) +{ return sdbmHash(&t, sizeof(T), h); } template <typename Key> -struct Hash { +struct Hash +{ uint32_t operator()(const Key &k) const { return hash(k); } }; template <typename Key> -struct PassthroughHash { +struct PassthroughHash +{ uint32_t operator()(const Key &k) const { return (uint32_t)k; } }; template <typename Key> -struct Equal { +struct Equal +{ bool operator()(const Key &k0, const Key &k1) const { return k0 == k1; } }; -template <typename Key, typename H = Hash<Key>, typename E = Equal<Key>> -class HashMap { +template<typename Key, typename H = Hash<Key>, typename E = Equal<Key> > +class HashMap +{ public: - HashMap(int memTag, uint32_t size) : - m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag) { + HashMap(int memTag, uint32_t size) : m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag) + { } - ~HashMap() { + ~HashMap() + { if (m_slots) XA_FREE(m_slots); } - void destroy() { + void destroy() + { if (m_slots) { XA_FREE(m_slots); m_slots = nullptr; @@ -1852,7 +1961,8 @@ public: m_next.destroy(); } - uint32_t add(const Key &key) { + uint32_t add(const Key &key) + { if (!m_slots) alloc(); const uint32_t hash = computeHash(key); @@ -1862,18 +1972,21 @@ public: return m_keys.size() - 1; } - uint32_t get(const Key &key) const { + uint32_t get(const Key &key) const + { if (!m_slots) return UINT32_MAX; return find(key, m_slots[computeHash(key)]); } - uint32_t getNext(const Key &key, uint32_t current) const { + uint32_t getNext(const Key &key, uint32_t current) const + { return find(key, m_next[current]); } private: - void alloc() { + void alloc() + { XA_DEBUG_ASSERT(m_size > 0); m_numSlots = nextPowerOfTwo(m_size); auto minNumSlots = uint32_t(m_size * 1.3); @@ -1886,12 +1999,14 @@ private: m_next.reserve(m_size); } - uint32_t computeHash(const Key &key) const { + uint32_t computeHash(const Key &key) const + { H hash; return hash(key) & (m_numSlots - 1); } - uint32_t find(const Key &key, uint32_t current) const { + uint32_t find(const Key &key, uint32_t current) const + { E equal; while (current != UINT32_MAX) { if (equal(m_keys[current], key)) @@ -1909,8 +2024,9 @@ private: Array<uint32_t> m_next; }; -template <typename T> -static void insertionSort(T *data, uint32_t length) { +template<typename T> +static void insertionSort(T *data, uint32_t length) +{ for (int32_t i = 1; i < (int32_t)length; i++) { T x = data[i]; int32_t j = i - 1; @@ -1922,18 +2038,21 @@ static void insertionSort(T *data, uint32_t length) { } } -class KISSRng { +class KISSRng +{ public: KISSRng() { reset(); } - void reset() { + void reset() + { x = 123456789; y = 362436000; z = 521288629; c = 7654321; } - uint32_t getRange(uint32_t range) { + uint32_t getRange(uint32_t range) + { if (range == 0) return 0; x = 69069 * x + 12345; @@ -1952,9 +2071,11 @@ private: // Based on Pierre Terdiman's and Michael Herf's source code. // http://www.codercorner.com/RadixSortRevisited.htm // http://www.stereopsis.com/radix.html -class RadixSort { +class RadixSort +{ public: - void sort(ConstArrayView<float> input) { + void sort(ConstArrayView<float> input) + { if (input.length == 0) { m_buffer1.clear(); m_buffer2.clear(); @@ -1983,7 +2104,8 @@ public: } // Access to results. m_ranks is a list of indices in sorted order, i.e. in the order you may further process your data - const uint32_t *ranks() const { + const uint32_t *ranks() const + { XA_DEBUG_ASSERT(m_validRanks); return m_ranks; } @@ -1993,17 +2115,20 @@ private: Array<uint32_t> m_buffer1, m_buffer2; bool m_validRanks = false; - void floatFlip(uint32_t &f) { + void floatFlip(uint32_t &f) + { int32_t mask = (int32_t(f) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko. f ^= mask; } - void ifloatFlip(uint32_t &f) { + void ifloatFlip(uint32_t &f) + { uint32_t mask = ((f >> 31) - 1) | 0x80000000; // Michael Herf. f ^= mask; } - void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram) { + void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram) + { const uint32_t bucketCount = sizeof(uint32_t); // Init bucket pointers. uint32_t *h[bucketCount]; @@ -2014,14 +2139,15 @@ private: memset(histogram, 0, 256 * bucketCount * sizeof(uint32_t)); // @@ Add support for signed integers. // Build histograms. - const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules? + const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules? const uint8_t *pe = p + input.length * sizeof(uint32_t); while (p != pe) { h[0][*p++]++, h[1][*p++]++, h[2][*p++]++, h[3][*p++]++; } } - void insertionSort(ConstArrayView<float> input) { + void insertionSort(ConstArrayView<float> input) + { if (!m_validRanks) { m_ranks[0] = 0; for (uint32_t i = 1; i != input.length; ++i) { @@ -2051,7 +2177,8 @@ private: } } - void radixSort(ConstArrayView<uint32_t> input) { + void radixSort(ConstArrayView<uint32_t> input) + { const uint32_t P = sizeof(uint32_t); // pass count // Allocate histograms & offsets on the stack uint32_t histogram[256 * P]; @@ -2069,8 +2196,7 @@ private: } // Create offsets link[0] = m_ranks2; - for (uint32_t i = 1; i < 256; i++) - link[i] = link[i - 1] + h[i - 1]; + for (uint32_t i = 1; i < 256; i++) link[i] = link[i - 1] + h[i - 1]; // Perform Radix Sort if (!m_validRanks) { for (uint32_t i = 0; i < input.length; i++) { @@ -2096,21 +2222,25 @@ private: }; // Wrapping this in a class allows temporary arrays to be re-used. -class BoundingBox2D { +class BoundingBox2D +{ public: Vector2 majorAxis, minorAxis, minCorner, maxCorner; - void clear() { + void clear() + { m_boundaryVertices.clear(); } - void appendBoundaryVertex(Vector2 v) { + void appendBoundaryVertex(Vector2 v) + { m_boundaryVertices.push_back(v); } // This should compute convex hull and use rotating calipers to find the best box. Currently it uses a brute force method. // If vertices are empty, the boundary vertices are used. - void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>()) { + void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>()) + { XA_DEBUG_ASSERT(!m_boundaryVertices.isEmpty()); if (vertices.length == 0) vertices = m_boundaryVertices; @@ -2157,7 +2287,8 @@ public: private: // Compute the convex hull using Graham Scan. - void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon) { + void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon) + { m_coords.resize(input.length); for (uint32_t i = 0; i < input.length; i++) m_coords[i] = input[i].x; @@ -2186,7 +2317,7 @@ private: XA_DEBUG_ASSERT(m_top.size() >= 2); output.push_back(m_top[0]); output.push_back(m_top[1]); - for (uint32_t i = 2; i < m_top.size();) { + for (uint32_t i = 2; i < m_top.size(); ) { Vector2 a = output[output.size() - 2]; Vector2 b = output[output.size() - 1]; Vector2 c = m_top[i]; @@ -2202,7 +2333,7 @@ private: XA_DEBUG_ASSERT(m_bottom.size() >= 2); output.push_back(m_bottom[1]); // Filter bottom list. - for (uint32_t i = 2; i < m_bottom.size();) { + for (uint32_t i = 2; i < m_bottom.size(); ) { Vector2 a = output[output.size() - 2]; Vector2 b = output[output.size() - 1]; Vector2 c = m_bottom[i]; @@ -2225,45 +2356,45 @@ private: RadixSort m_radix; }; -struct EdgeKey { - EdgeKey(const EdgeKey &k) : - v0(k.v0), v1(k.v1) {} - EdgeKey(uint32_t _v0, uint32_t _v1) : - v0(_v0), v1(_v1) {} +struct EdgeKey +{ + EdgeKey(const EdgeKey &k) : v0(k.v0), v1(k.v1) {} + EdgeKey(uint32_t _v0, uint32_t _v1) : v0(_v0), v1(_v1) {} bool operator==(const EdgeKey &k) const { return v0 == k.v0 && v1 == k.v1; } uint32_t v0; uint32_t v1; }; -struct EdgeHash { +struct EdgeHash +{ uint32_t operator()(const EdgeKey &k) const { return k.v0 * 32768u + k.v1; } }; -static uint32_t meshEdgeFace(uint32_t edge) { - return edge / 3; -} -static uint32_t meshEdgeIndex0(uint32_t edge) { - return edge; -} +static uint32_t meshEdgeFace(uint32_t edge) { return edge / 3; } +static uint32_t meshEdgeIndex0(uint32_t edge) { return edge; } -static uint32_t meshEdgeIndex1(uint32_t edge) { +static uint32_t meshEdgeIndex1(uint32_t edge) +{ const uint32_t faceFirstEdge = edge / 3 * 3; return faceFirstEdge + (edge - faceFirstEdge + 1) % 3; } -struct MeshFlags { - enum { - HasIgnoredFaces = 1 << 0, - HasNormals = 1 << 1, - HasMaterials = 1 << 2 +struct MeshFlags +{ + enum + { + HasIgnoredFaces = 1<<0, + HasNormals = 1<<1, + HasMaterials = 1<<2 }; }; -class Mesh { +class Mesh +{ public: - Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) : - m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3) { + Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) : m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3) + { m_indices.reserve(approxFaceCount * 3); m_positions.reserve(approxVertexCount); m_texcoords.reserve(approxVertexCount); @@ -2278,7 +2409,8 @@ public: uint32_t flags() const { return m_flags; } uint32_t id() const { return m_id; } - void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f)) { + void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f)) + { XA_DEBUG_ASSERT(isFinite(pos)); m_positions.push_back(pos); if (m_flags & MeshFlags::HasNormals) @@ -2286,7 +2418,8 @@ public: m_texcoords.push_back(texcoord); } - void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX) { + void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX) + { if (m_flags & MeshFlags::HasIgnoredFaces) m_faceIgnore.push_back(ignore); if (m_flags & MeshFlags::HasMaterials) @@ -2301,7 +2434,8 @@ public: } } - void createColocalsBVH() { + void createColocalsBVH() + { const uint32_t vertexCount = m_positions.size(); Array<AABB> aabbs(MemTag::BVH); aabbs.resize(vertexCount); @@ -2342,7 +2476,8 @@ public: } } - void createColocalsHash() { + void createColocalsHash() + { const uint32_t vertexCount = m_positions.size(); HashMap<Vector3> positionToVertexMap(MemTag::Default, vertexCount); for (uint32_t i = 0; i < vertexCount; i++) @@ -2380,14 +2515,16 @@ public: } } - void createColocals() { + void createColocals() + { if (m_epsilon <= FLT_EPSILON) createColocalsHash(); else createColocalsBVH(); } - void createBoundaries() { + void createBoundaries() + { const uint32_t edgeCount = m_indices.size(); const uint32_t vertexCount = m_positions.size(); m_oppositeEdges.resize(edgeCount); @@ -2418,7 +2555,8 @@ public: } /// Find edge, test all colocals. - uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const { + uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const + { // Try to find exact vertex match first. { EdgeKey key(vertex0, vertex1); @@ -2459,12 +2597,14 @@ public: // Edge map can be destroyed when no longer used to reduce memory usage. It's used by: // * Mesh::createBoundaries() // * Mesh::edgeMap() (used by MeshFaceGroups) - void destroyEdgeMap() { + void destroyEdgeMap() + { m_edgeMap.destroy(); } #if XA_DEBUG_EXPORT_OBJ - void writeObjVertices(FILE *file) const { + void writeObjVertices(FILE *file) const + { for (uint32_t i = 0; i < m_positions.size(); i++) fprintf(file, "v %g %g %g\n", m_positions[i].x, m_positions[i].y, m_positions[i].z); if (m_flags & MeshFlags::HasNormals) { @@ -2475,7 +2615,8 @@ public: fprintf(file, "vt %g %g\n", m_texcoords[i].x, m_texcoords[i].y); } - void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const { + void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const + { fprintf(file, "f "); for (uint32_t j = 0; j < 3; j++) { const uint32_t index = m_indices[face * 3 + j] + 1 + offset; // 1-indexed @@ -2483,7 +2624,8 @@ public: } } - void writeObjBoundaryEges(FILE *file) const { + void writeObjBoundaryEges(FILE *file) const + { if (m_oppositeEdges.isEmpty()) return; // Boundaries haven't been created. fprintf(file, "o boundary_edges\n"); @@ -2494,7 +2636,8 @@ public: } } - void writeObjFile(const char *filename) const { + void writeObjFile(const char *filename) const + { FILE *file; XA_FOPEN(file, filename, "w"); if (!file) @@ -2509,7 +2652,8 @@ public: } #endif - float computeSurfaceArea() const { + float computeSurfaceArea() const + { float area = 0; for (uint32_t f = 0; f < faceCount(); f++) area += computeFaceArea(f); @@ -2518,21 +2662,24 @@ public: } // Returned value is always positive, even if some triangles are flipped. - float computeParametricArea() const { + float computeParametricArea() const + { float area = 0; for (uint32_t f = 0; f < faceCount(); f++) area += fabsf(computeFaceParametricArea(f)); // May be negative, depends on texcoord winding. return area; } - float computeFaceArea(uint32_t face) const { + float computeFaceArea(uint32_t face) const + { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; return length(cross(p1 - p0, p2 - p0)) * 0.5f; } - Vector3 computeFaceCentroid(uint32_t face) const { + Vector3 computeFaceCentroid(uint32_t face) const + { Vector3 sum(0.0f); for (uint32_t i = 0; i < 3; i++) sum += m_positions[m_indices[face * 3 + i]]; @@ -2541,7 +2688,8 @@ public: // Average of the edge midpoints weighted by the edge length. // I want a point inside the triangle, but closer to the cirumcenter. - Vector3 computeFaceCenter(uint32_t face) const { + Vector3 computeFaceCenter(uint32_t face) const + { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; @@ -2554,7 +2702,8 @@ public: return m0 + m1 + m2; } - Vector3 computeFaceNormal(uint32_t face) const { + Vector3 computeFaceNormal(uint32_t face) const + { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; @@ -2564,7 +2713,8 @@ public: return normalizeSafe(normalAreaScaled, Vector3(0, 0, 1)); } - float computeFaceParametricArea(uint32_t face) const { + float computeFaceParametricArea(uint32_t face) const + { const Vector2 &t0 = m_texcoords[m_indices[face * 3 + 0]]; const Vector2 &t1 = m_texcoords[m_indices[face * 3 + 1]]; const Vector2 &t2 = m_texcoords[m_indices[face * 3 + 2]]; @@ -2572,7 +2722,8 @@ public: } // @@ This is not exactly accurate, we should compare the texture coordinates... - bool isSeam(uint32_t edge) const { + bool isSeam(uint32_t edge) const + { const uint32_t oppositeEdge = m_oppositeEdges[edge]; if (oppositeEdge == UINT32_MAX) return false; // boundary edge @@ -2583,7 +2734,8 @@ public: return m_indices[e0] != m_indices[oe1] || m_indices[e1] != m_indices[oe0]; } - bool isTextureSeam(uint32_t edge) const { + bool isTextureSeam(uint32_t edge) const + { const uint32_t oppositeEdge = m_oppositeEdges[edge]; if (oppositeEdge == UINT32_MAX) return false; // boundary edge @@ -2594,7 +2746,8 @@ public: return m_texcoords[m_indices[e0]] != m_texcoords[m_indices[oe1]] || m_texcoords[m_indices[e1]] != m_texcoords[m_indices[oe0]]; } - uint32_t firstColocalVertex(uint32_t vertex) const { + uint32_t firstColocalVertex(uint32_t vertex) const + { XA_DEBUG_ASSERT(m_firstColocalVertex.size() == m_positions.size()); return m_firstColocalVertex[vertex]; } @@ -2609,10 +2762,7 @@ public: XA_INLINE uint32_t vertexAt(uint32_t i) const { return m_indices[i]; } XA_INLINE const Vector3 &position(uint32_t vertex) const { return m_positions[vertex]; } XA_INLINE ConstArrayView<Vector3> positions() const { return m_positions; } - XA_INLINE const Vector3 &normal(uint32_t vertex) const { - XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals); - return m_normals[vertex]; - } + XA_INLINE const Vector3 &normal(uint32_t vertex) const { XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals); return m_normals[vertex]; } XA_INLINE const Vector2 &texcoord(uint32_t vertex) const { return m_texcoords[vertex]; } XA_INLINE Vector2 &texcoord(uint32_t vertex) { return m_texcoords[vertex]; } XA_INLINE const ConstArrayView<Vector2> texcoords() const { return m_texcoords; } @@ -2625,6 +2775,7 @@ public: XA_INLINE const HashMap<EdgeKey, EdgeHash> &edgeMap() const { return m_edgeMap; } private: + float m_epsilon; uint32_t m_flags; uint32_t m_id; @@ -2647,21 +2798,24 @@ private: HashMap<EdgeKey, EdgeHash> m_edgeMap; public: - class FaceEdgeIterator { + class FaceEdgeIterator + { public: - FaceEdgeIterator(const Mesh *mesh, uint32_t face) : - m_mesh(mesh), m_face(face), m_relativeEdge(0) { + FaceEdgeIterator (const Mesh *mesh, uint32_t face) : m_mesh(mesh), m_face(face), m_relativeEdge(0) + { m_edge = m_face * 3; } - void advance() { + void advance() + { if (m_relativeEdge < 3) { m_edge++; m_relativeEdge++; } } - bool isDone() const { + bool isDone() const + { return m_relativeEdge == 3; } @@ -2673,7 +2827,8 @@ public: uint32_t face() const { return m_face; } uint32_t oppositeEdge() const { return m_mesh->m_oppositeEdges[m_edge]; } - uint32_t oppositeFace() const { + uint32_t oppositeFace() const + { const uint32_t oedge = m_mesh->m_oppositeEdges[m_edge]; if (oedge == UINT32_MAX) return UINT32_MAX; @@ -2697,18 +2852,19 @@ public: }; }; -struct MeshFaceGroups { +struct MeshFaceGroups +{ typedef uint32_t Handle; static constexpr Handle kInvalid = UINT32_MAX; - MeshFaceGroups(const Mesh *mesh) : - m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {} + MeshFaceGroups(const Mesh *mesh) : m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {} XA_INLINE Handle groupAt(uint32_t face) const { return m_groups[face]; } XA_INLINE uint32_t groupCount() const { return m_faceCount.size(); } XA_INLINE uint32_t nextFace(uint32_t face) const { return m_nextFace[face]; } XA_INLINE uint32_t faceCount(uint32_t group) const { return m_faceCount[group]; } - void compute() { + void compute() + { m_groups.resize(m_mesh->faceCount()); m_groups.fillBytes(0xff); // Set all faces to kInvalid uint32_t firstUnassignedFace = 0; @@ -2767,23 +2923,27 @@ struct MeshFaceGroups { } } - class Iterator { + class Iterator + { public: - Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) : - m_meshFaceGroups(meshFaceGroups) { + Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) : m_meshFaceGroups(meshFaceGroups) + { XA_DEBUG_ASSERT(group != kInvalid); m_current = m_meshFaceGroups->m_firstFace[group]; } - void advance() { + void advance() + { m_current = m_meshFaceGroups->m_nextFace[m_current]; } - bool isDone() const { + bool isDone() const + { return m_current == UINT32_MAX; } - uint32_t face() const { + uint32_t face() const + { return m_current; } @@ -2803,7 +2963,8 @@ private: constexpr MeshFaceGroups::Handle MeshFaceGroups::kInvalid; #if XA_CHECK_T_JUNCTIONS -static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon) { +static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon) +{ float tt; if (!t) t = &tt; @@ -2821,7 +2982,8 @@ static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, } // Returns the number of T-junctions found. -static int meshCheckTJunctions(const Mesh &inputMesh) { +static int meshCheckTJunctions(const Mesh &inputMesh) +{ int count = 0; const uint32_t vertexCount = inputMesh.vertexCount(); const uint32_t edgeCount = inputMesh.edgeCount(); @@ -2845,10 +3007,12 @@ static int meshCheckTJunctions(const Mesh &inputMesh) { #endif // References invalid faces and vertices in a mesh. -struct InvalidMeshGeometry { +struct InvalidMeshGeometry +{ // If meshFaceGroups is not null, invalid faces have the face group MeshFaceGroups::kInvalid. // If meshFaceGroups is null, invalid faces are Mesh::isFaceIgnored. - void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups) { + void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups) + { // Copy invalid faces. m_faces.clear(); const uint32_t meshFaceCount = mesh->faceCount(); @@ -2886,28 +3050,32 @@ private: Array<uint32_t> m_vertexToSourceVertexMap; // Map face vertices to vertices of the source mesh. }; -struct Progress { - Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) : - cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0) { +struct Progress +{ + Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) : cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0) + { if (m_func) { if (!m_func(category, 0, userData)) cancel = true; } } - ~Progress() { + ~Progress() + { if (m_func) { if (!m_func(m_category, 100, m_userData)) cancel = true; } } - void increment(uint32_t value) { + void increment(uint32_t value) + { m_value += value; update(); } - void setMaxValue(uint32_t maxValue) { + void setMaxValue(uint32_t maxValue) + { m_maxValue = maxValue; update(); } @@ -2915,15 +3083,15 @@ struct Progress { std::atomic<bool> cancel; private: - void update() { + void update() + { if (!m_func) return; const uint32_t newPercent = uint32_t(ceilf(m_value.load() / (float)m_maxValue.load() * 100.0f)); if (newPercent != m_percent) { // Atomic max. uint32_t oldPercent = m_percent; - while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) { - } + while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {} if (!m_func(m_category, m_percent, m_userData)) cancel = true; } @@ -2935,31 +3103,32 @@ private: std::atomic<uint32_t> m_value, m_maxValue, m_percent; }; -struct Spinlock { - void lock() { - while (m_lock.test_and_set(std::memory_order_acquire)) { - } - } +struct Spinlock +{ + void lock() { while(m_lock.test_and_set(std::memory_order_acquire)) {} } void unlock() { m_lock.clear(std::memory_order_release); } private: std::atomic_flag m_lock = ATOMIC_FLAG_INIT; }; -struct TaskGroupHandle { +struct TaskGroupHandle +{ uint32_t value = UINT32_MAX; }; -struct Task { +struct Task +{ void (*func)(void *groupUserData, void *taskUserData); void *userData; // Passed to func as taskUserData. }; #if XA_MULTITHREADED -class TaskScheduler { +class TaskScheduler +{ public: - TaskScheduler() : - m_shutdown(false) { + TaskScheduler() : m_shutdown(false) + { m_threadIndex = 0; // Max with current task scheduler usage is 1 per thread + 1 deep nesting, but allow for some slop. m_maxGroups = std::thread::hardware_concurrency() * 4; @@ -2978,7 +3147,8 @@ public: } } - ~TaskScheduler() { + ~TaskScheduler() + { m_shutdown = true; for (uint32_t i = 0; i < m_workers.size(); i++) { Worker &worker = m_workers[i]; @@ -2996,12 +3166,14 @@ public: XA_FREE(m_groups); } - uint32_t threadCount() const { + uint32_t threadCount() const + { return max(1u, std::thread::hardware_concurrency()); // Including the main thread. } // userData is passed to Task::func as groupUserData. - TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) { + TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) + { // Claim the first free group. for (uint32_t i = 0; i < m_maxGroups; i++) { TaskGroup &group = m_groups[i]; @@ -3025,7 +3197,8 @@ public: return handle; } - void run(TaskGroupHandle handle, const Task &task) { + void run(TaskGroupHandle handle, const Task &task) + { XA_DEBUG_ASSERT(handle.value != UINT32_MAX); TaskGroup &group = m_groups[handle.value]; group.queueLock.lock(); @@ -3039,7 +3212,8 @@ public: } } - void wait(TaskGroupHandle *handle) { + void wait(TaskGroupHandle *handle) + { if (handle->value == UINT32_MAX) { XA_DEBUG_ASSERT(false); return; @@ -3067,7 +3241,8 @@ public: static uint32_t currentThreadIndex() { return m_threadIndex; } private: - struct TaskGroup { + struct TaskGroup + { std::atomic<bool> free; Array<Task> queue; // Items are never removed. queueHead is incremented to pop items. uint32_t queueHead = 0; @@ -3076,7 +3251,8 @@ private: void *userData; }; - struct Worker { + struct Worker + { std::thread *thread = nullptr; std::mutex mutex; std::condition_variable cv; @@ -3089,11 +3265,12 @@ private: uint32_t m_maxGroups; static thread_local uint32_t m_threadIndex; - static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex) { + static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex) + { m_threadIndex = threadIndex; std::unique_lock<std::mutex> lock(worker->mutex); for (;;) { - worker->cv.wait(lock, [=] { return worker->wakeup.load(); }); + worker->cv.wait(lock, [=]{ return worker->wakeup.load(); }); worker->wakeup = false; for (;;) { if (scheduler->m_shutdown) @@ -3124,18 +3301,22 @@ private: thread_local uint32_t TaskScheduler::m_threadIndex; #else -class TaskScheduler { +class TaskScheduler +{ public: - ~TaskScheduler() { + ~TaskScheduler() + { for (uint32_t i = 0; i < m_groups.size(); i++) destroyGroup({ i }); } - uint32_t threadCount() const { + uint32_t threadCount() const + { return 1; } - TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) { + TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) + { TaskGroup *group = XA_NEW(MemTag::Default, TaskGroup); group->queue.reserve(reserveSize); group->userData = userData; @@ -3145,11 +3326,13 @@ public: return handle; } - void run(TaskGroupHandle handle, Task task) { + void run(TaskGroupHandle handle, Task task) + { m_groups[handle.value]->queue.push_back(task); } - void wait(TaskGroupHandle *handle) { + void wait(TaskGroupHandle *handle) + { if (handle->value == UINT32_MAX) { XA_DEBUG_ASSERT(false); return; @@ -3165,7 +3348,8 @@ public: static uint32_t currentThreadIndex() { return 0; } private: - void destroyGroup(TaskGroupHandle handle) { + void destroyGroup(TaskGroupHandle handle) + { TaskGroup *group = m_groups[handle.value]; if (group) { group->~TaskGroup(); @@ -3174,7 +3358,8 @@ private: } } - struct TaskGroup { + struct TaskGroup + { Array<Task> queue; void *userData; }; @@ -3188,7 +3373,8 @@ const uint8_t TGA_TYPE_RGB = 2; const uint8_t TGA_ORIGIN_UPPER = 0x20; #pragma pack(push, 1) -struct TgaHeader { +struct TgaHeader +{ uint8_t id_length; uint8_t colormap_type; uint8_t image_type; @@ -3205,7 +3391,8 @@ struct TgaHeader { }; #pragma pack(pop) -static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height) { +static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height) +{ XA_DEBUG_ASSERT(sizeof(TgaHeader) == TgaHeader::Size); FILE *f; XA_FOPEN(f, filename, "wb"); @@ -3230,10 +3417,12 @@ static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, } #endif -template <typename T> -class ThreadLocal { +template<typename T> +class ThreadLocal +{ public: - ThreadLocal() { + ThreadLocal() + { #if XA_MULTITHREADED const uint32_t n = std::thread::hardware_concurrency(); #else @@ -3244,7 +3433,8 @@ public: new (&m_array[i]) T; } - ~ThreadLocal() { + ~ThreadLocal() + { #if XA_MULTITHREADED const uint32_t n = std::thread::hardware_concurrency(); #else @@ -3255,7 +3445,8 @@ public: XA_FREE(m_array); } - T &get() const { + T &get() const + { return m_array[TaskScheduler::currentThreadIndex()]; } @@ -3264,10 +3455,12 @@ private: }; // Implemented as a struct so the temporary arrays can be reused. -struct Triangulator { +struct Triangulator +{ // This is doing a simple ear-clipping algorithm that skips invalid triangles. Ideally, we should // also sort the ears by angle, start with the ones that have the smallest angle and proceed in order. - void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices) { + void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices) + { m_polygonVertices.clear(); m_polygonVertices.reserve(inputIndices.length); outputIndices.clear(); @@ -3276,7 +3469,8 @@ struct Triangulator { outputIndices.push_back(inputIndices[0]); outputIndices.push_back(inputIndices[1]); outputIndices.push_back(inputIndices[2]); - } else { + } + else { // Build 2D polygon projecting vertices onto normal plane. // Faces are not necesarily planar, this is for example the case, when the face comes from filling a hole. In such cases // it's much better to use the best fit plane. @@ -3348,7 +3542,8 @@ struct Triangulator { } private: - static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) { + static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) + { return triangleArea(a, b, p) >= kAreaEpsilon && triangleArea(b, c, p) >= kAreaEpsilon && triangleArea(c, a, p) >= kAreaEpsilon; } @@ -3357,10 +3552,12 @@ private: Array<Vector2> m_polygonPoints; }; -class UniformGrid2 { +class UniformGrid2 +{ public: // indices are optional. - void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0) { + void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0) + { m_edges.clear(); if (reserveEdgeCount > 0) m_edges.reserve(reserveEdgeCount); @@ -3369,12 +3566,14 @@ public: m_cellDataOffsets.clear(); } - void append(uint32_t edge) { + void append(uint32_t edge) + { XA_DEBUG_ASSERT(m_cellDataOffsets.isEmpty()); m_edges.push_back(edge); } - bool intersect(Vector2 v1, Vector2 v2, float epsilon) { + bool intersect(Vector2 v1, Vector2 v2, float epsilon) + { const uint32_t edgeCount = m_edges.size(); bool bruteForce = edgeCount <= 20; if (!bruteForce && m_cellDataOffsets.isEmpty()) @@ -3401,7 +3600,8 @@ public: } // If edges is empty, checks for intersection with all edges in the grid. - bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>()) { + bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>()) + { bool bruteForce = m_edges.size() <= 20; if (!bruteForce && m_cellDataOffsets.isEmpty()) bruteForce = !createGrid(); @@ -3471,7 +3671,8 @@ public: } #if XA_DEBUG_EXPORT_BOUNDARY_GRID - void debugExport(const char *filename) { + void debugExport(const char *filename) + { Array<uint8_t> image; image.resize(m_gridWidth * m_gridHeight * 3); for (uint32_t y = 0; y < m_gridHeight; y++) { @@ -3493,7 +3694,8 @@ public: #endif private: - bool createGrid() { + bool createGrid() + { // Compute edge extents. Min will be the grid origin. const uint32_t edgeCount = m_edges.size(); Extents2 edgeExtents; @@ -3545,7 +3747,8 @@ private: return true; } - void computePotentialEdges(Vector2 p1, Vector2 p2) { + void computePotentialEdges(Vector2 p1, Vector2 p2) + { m_potentialEdges.clear(); traverse(p1, p2); for (uint32_t j = 0; j < m_traversedCellOffsets.size(); j++) { @@ -3563,7 +3766,8 @@ private: } // "A Fast Voxel Traversal Algorithm for Ray Tracing" - void traverse(Vector2 p1, Vector2 p2) { + void traverse(Vector2 p1, Vector2 p2) + { const Vector2 dir = p2 - p1; const Vector2 normal = normalizeSafe(dir, Vector2(0.0f)); const int stepX = dir.x >= 0 ? 1 : -1; @@ -3584,12 +3788,14 @@ private: if (normal.x > kEpsilon || normal.x < -kEpsilon) { tMaxX = (distToNextCellX * stepX) / normal.x; tDeltaX = (m_cellSize * stepX) / normal.x; - } else + } + else tMaxX = tDeltaX = FLT_MAX; if (normal.y > kEpsilon || normal.y < -kEpsilon) { tMaxY = (distToNextCellY * stepY) / normal.y; tDeltaY = (m_cellSize * stepY) / normal.y; - } else + } + else tMaxY = tDeltaY = FLT_MAX; m_traversedCellOffsets.clear(); m_traversedCellOffsets.push_back(firstCell[0] + firstCell[1] * m_gridWidth); @@ -3616,23 +3822,28 @@ private: } } - uint32_t cellX(float x) const { + uint32_t cellX(float x) const + { return min((uint32_t)max(0.0f, (x - m_gridOrigin.x) / m_cellSize), m_gridWidth - 1u); } - uint32_t cellY(float y) const { + uint32_t cellY(float y) const + { return min((uint32_t)max(0.0f, (y - m_gridOrigin.y) / m_cellSize), m_gridHeight - 1u); } - Vector2 edgePosition0(uint32_t edge) const { + Vector2 edgePosition0(uint32_t edge) const + { return m_positions[vertexAt(meshEdgeIndex0(edge))]; } - Vector2 edgePosition1(uint32_t edge) const { + Vector2 edgePosition1(uint32_t edge) const + { return m_positions[vertexAt(meshEdgeIndex1(edge))]; } - uint32_t vertexAt(uint32_t index) const { + uint32_t vertexAt(uint32_t index) const + { return m_indices.length > 0 ? m_indices[index] : index; } @@ -3648,13 +3859,15 @@ private: Array<uint32_t> m_traversedCellOffsets; }; -struct UvMeshChart { +struct UvMeshChart +{ Array<uint32_t> faces; Array<uint32_t> indices; uint32_t material; }; -struct UvMesh { +struct UvMesh +{ UvMeshDecl decl; BitArray faceIgnore; Array<uint32_t> faceMaterials; @@ -3664,7 +3877,8 @@ struct UvMesh { Array<uint32_t> vertexToChartMap; }; -struct UvMeshInstance { +struct UvMeshInstance +{ UvMesh *mesh; Array<Vector2> texcoords; }; @@ -3712,30 +3926,27 @@ struct UvMeshInstance { * FRANCE */ namespace opennl { -#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T) -#define NL_NEW_ARRAY(T, NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB) -#define NL_RENEW_ARRAY(T, x, NB) XA_REALLOC(MemTag::OpenNL, x, T, NB) -#define NL_DELETE(x) \ - XA_FREE(x); \ - x = nullptr -#define NL_DELETE_ARRAY(x) \ - XA_FREE(x); \ - x = nullptr -#define NL_CLEAR(x, T) memset(x, 0, sizeof(T)); -#define NL_CLEAR_ARRAY(T, x, NB) memset(x, 0, (size_t)(NB) * sizeof(T)) -#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim) -#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr) +#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T) +#define NL_NEW_ARRAY(T,NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB) +#define NL_RENEW_ARRAY(T,x,NB) XA_REALLOC(MemTag::OpenNL, x, T, NB) +#define NL_DELETE(x) XA_FREE(x); x = nullptr +#define NL_DELETE_ARRAY(x) XA_FREE(x); x = nullptr +#define NL_CLEAR(x, T) memset(x, 0, sizeof(T)); +#define NL_CLEAR_ARRAY(T,x,NB) memset(x, 0, (size_t)(NB)*sizeof(T)) +#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim) +#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr) struct NLMatrixStruct; -typedef NLMatrixStruct *NLMatrix; +typedef NLMatrixStruct * NLMatrix; typedef void (*NLDestroyMatrixFunc)(NLMatrix M); -typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double *x, double *y); +typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double* x, double* y); #define NL_MATRIX_SPARSE_DYNAMIC 0x1001 -#define NL_MATRIX_CRS 0x1002 -#define NL_MATRIX_OTHER 0x1006 +#define NL_MATRIX_CRS 0x1002 +#define NL_MATRIX_OTHER 0x1006 -struct NLMatrixStruct { +struct NLMatrixStruct +{ uint32_t m; uint32_t n; uint32_t type; @@ -3745,35 +3956,39 @@ struct NLMatrixStruct { /* Dynamic arrays for sparse row/columns */ -struct NLCoeff { +struct NLCoeff +{ uint32_t index; double value; }; -struct NLRowColumn { +struct NLRowColumn +{ uint32_t size; uint32_t capacity; - NLCoeff *coeff; + NLCoeff* coeff; }; /* Compressed Row Storage */ -struct NLCRSMatrix { +struct NLCRSMatrix +{ uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; - double *val; - uint32_t *rowptr; - uint32_t *colind; + double* val; + uint32_t* rowptr; + uint32_t* colind; uint32_t nslices; - uint32_t *sliceptr; + uint32_t* sliceptr; }; /* SparseMatrix data structure */ -struct NLSparseMatrix { +struct NLSparseMatrix +{ uint32_t m; uint32_t n; uint32_t type; @@ -3781,23 +3996,25 @@ struct NLSparseMatrix { NLMultMatrixVectorFunc mult_func; uint32_t diag_size; uint32_t diag_capacity; - NLRowColumn *row; - NLRowColumn *column; - double *diag; + NLRowColumn* row; + NLRowColumn* column; + double* diag; uint32_t row_capacity; uint32_t column_capacity; }; /* NLContext data structure */ -struct NLBufferBinding { - void *base_address; +struct NLBufferBinding +{ + void* base_address; uint32_t stride; }; -#define NL_BUFFER_ITEM(B, i) *(double *)((void *)((char *)((B).base_address) + ((i) * (B).stride))) +#define NL_BUFFER_ITEM(B,i) *(double*)((void*)((char*)((B).base_address)+((i)*(B).stride))) -struct NLContext { +struct NLContext +{ NLBufferBinding *variable_buffer; double *variable_value; bool *variable_is_locked; @@ -3821,30 +4038,35 @@ struct NLContext { double error; }; -static void nlDeleteMatrix(NLMatrix M) { +static void nlDeleteMatrix(NLMatrix M) +{ if (!M) return; M->destroy_func(M); NL_DELETE(M); } -static void nlMultMatrixVector(NLMatrix M, const double *x, double *y) { +static void nlMultMatrixVector(NLMatrix M, const double* x, double* y) +{ M->mult_func(M, x, y); } -static void nlRowColumnConstruct(NLRowColumn *c) { +static void nlRowColumnConstruct(NLRowColumn* c) +{ c->size = 0; c->capacity = 0; c->coeff = nullptr; } -static void nlRowColumnDestroy(NLRowColumn *c) { +static void nlRowColumnDestroy(NLRowColumn* c) +{ NL_DELETE_ARRAY(c->coeff); c->size = 0; c->capacity = 0; } -static void nlRowColumnGrow(NLRowColumn *c) { +static void nlRowColumnGrow(NLRowColumn* c) +{ if (c->capacity != 0) { c->capacity = 2 * c->capacity; c->coeff = NL_RENEW_ARRAY(NLCoeff, c->coeff, c->capacity); @@ -3855,7 +4077,8 @@ static void nlRowColumnGrow(NLRowColumn *c) { } } -static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) { +static void nlRowColumnAdd(NLRowColumn* c, uint32_t index, double value) +{ for (uint32_t i = 0; i < c->size; i++) { if (c->coeff[i].index == index) { c->coeff[i].value += value; @@ -3870,7 +4093,8 @@ static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) { } /* Does not check whether the index already exists */ -static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) { +static void nlRowColumnAppend(NLRowColumn* c, uint32_t index, double value) +{ if (c->size == c->capacity) nlRowColumnGrow(c); c->coeff[c->size].index = index; @@ -3878,27 +4102,32 @@ static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) { c->size++; } -static void nlRowColumnZero(NLRowColumn *c) { +static void nlRowColumnZero(NLRowColumn* c) +{ c->size = 0; } -static void nlRowColumnClear(NLRowColumn *c) { +static void nlRowColumnClear(NLRowColumn* c) +{ c->size = 0; c->capacity = 0; NL_DELETE_ARRAY(c->coeff); } -static int nlCoeffCompare(const void *p1, const void *p2) { - return (((NLCoeff *)(p2))->index < ((NLCoeff *)(p1))->index); +static int nlCoeffCompare(const void* p1, const void* p2) +{ + return (((NLCoeff*)(p2))->index < ((NLCoeff*)(p1))->index); } -static void nlRowColumnSort(NLRowColumn *c) { +static void nlRowColumnSort(NLRowColumn* c) +{ qsort(c->coeff, c->size, sizeof(NLCoeff), nlCoeffCompare); } /* CRSMatrix data structure */ -static void nlCRSMatrixDestroy(NLCRSMatrix *M) { +static void nlCRSMatrixDestroy(NLCRSMatrix* M) +{ NL_DELETE_ARRAY(M->val); NL_DELETE_ARRAY(M->rowptr); NL_DELETE_ARRAY(M->colind); @@ -3908,7 +4137,8 @@ static void nlCRSMatrixDestroy(NLCRSMatrix *M) { M->nslices = 0; } -static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uint32_t Ibegin, uint32_t Iend) { +static void nlCRSMatrixMultSlice(NLCRSMatrix* M, const double* x, double* y, uint32_t Ibegin, uint32_t Iend) +{ for (uint32_t i = Ibegin; i < Iend; ++i) { double sum = 0.0; for (uint32_t j = M->rowptr[i]; j < M->rowptr[i + 1]; ++j) @@ -3917,13 +4147,15 @@ static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uin } } -static void nlCRSMatrixMult(NLCRSMatrix *M, const double *x, double *y) { +static void nlCRSMatrixMult(NLCRSMatrix* M, const double* x, double* y) +{ int nslices = (int)(M->nslices); for (int slice = 0; slice < nslices; ++slice) nlCRSMatrixMultSlice(M, x, y, M->sliceptr[slice], M->sliceptr[slice + 1]); } -static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices) { +static void nlCRSMatrixConstruct(NLCRSMatrix* M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices) +{ M->m = m; M->n = n; M->type = NL_MATRIX_CRS; @@ -3942,19 +4174,22 @@ static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_ /* SparseMatrix data structure */ -static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix *M) { +static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix* M) +{ for (uint32_t i = 0; i < M->m; i++) nlRowColumnDestroy(&(M->row[i])); NL_DELETE_ARRAY(M->row); } -static void nlSparseMatrixDestroy(NLSparseMatrix *M) { +static void nlSparseMatrixDestroy(NLSparseMatrix* M) +{ XA_DEBUG_ASSERT(M->type == NL_MATRIX_SPARSE_DYNAMIC); nlSparseMatrixDestroyRowColumns(M); NL_DELETE_ARRAY(M->diag); } -static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double value) { +static void nlSparseMatrixAdd(NLSparseMatrix* M, uint32_t i, uint32_t j, double value) +{ XA_DEBUG_ASSERT(i >= 0 && i <= M->m - 1); XA_DEBUG_ASSERT(j >= 0 && j <= M->n - 1); if (i == j) @@ -3963,21 +4198,24 @@ static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double } /* Returns the number of non-zero coefficients */ -static uint32_t nlSparseMatrixNNZ(NLSparseMatrix *M) { +static uint32_t nlSparseMatrixNNZ(NLSparseMatrix* M) +{ uint32_t nnz = 0; for (uint32_t i = 0; i < M->m; i++) nnz += M->row[i].size; return nnz; } -static void nlSparseMatrixSort(NLSparseMatrix *M) { +static void nlSparseMatrixSort(NLSparseMatrix* M) +{ for (uint32_t i = 0; i < M->m; i++) nlRowColumnSort(&(M->row[i])); } /* SparseMatrix x Vector routines, internal helper routines */ -static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double *y) { +static void nlSparseMatrix_mult_rows(NLSparseMatrix* A, const double* x, double* y) +{ /* * Note: OpenMP does not like unsigned ints * (causes some floating point exceptions), @@ -3985,8 +4223,8 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double * indices. */ int m = (int)(A->m); - NLCoeff *c = nullptr; - NLRowColumn *Ri = nullptr; + NLCoeff* c = nullptr; + NLRowColumn* Ri = nullptr; for (int i = 0; i < m; i++) { Ri = &(A->row[i]); y[i] = 0; @@ -3997,12 +4235,14 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double } } -static void nlSparseMatrixMult(NLSparseMatrix *A, const double *x, double *y) { +static void nlSparseMatrixMult(NLSparseMatrix* A, const double* x, double* y) +{ XA_DEBUG_ASSERT(A->type == NL_MATRIX_SPARSE_DYNAMIC); nlSparseMatrix_mult_rows(A, x, y); } -static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) { +static void nlSparseMatrixConstruct(NLSparseMatrix* M, uint32_t m, uint32_t n) +{ M->m = m; M->n = n; M->type = NL_MATRIX_SPARSE_DYNAMIC; @@ -4022,23 +4262,24 @@ static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) { NL_CLEAR_ARRAY(double, M->diag, M->diag_size); } -static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) { +static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix* M) +{ uint32_t nnz = nlSparseMatrixNNZ(M); uint32_t nslices = 8; /* TODO: get number of cores */ uint32_t slice, cur_bound, cur_NNZ, cur_row; uint32_t k; uint32_t slice_size = nnz / nslices; - NLCRSMatrix *CRS = NL_NEW(NLCRSMatrix); + NLCRSMatrix* CRS = NL_NEW(NLCRSMatrix); NL_CLEAR(CRS, NLCRSMatrix); nlCRSMatrixConstruct(CRS, M->m, M->n, nnz, nslices); nlSparseMatrixSort(M); /* Convert matrix to CRS format */ k = 0; for (uint32_t i = 0; i < M->m; ++i) { - NLRowColumn *Ri = &(M->row[i]); + NLRowColumn* Ri = &(M->row[i]); CRS->rowptr[i] = k; for (uint32_t ij = 0; ij < Ri->size; ij++) { - NLCoeff *c = &(Ri->coeff[ij]); + NLCoeff* c = &(Ri->coeff[ij]); CRS->val[k] = c->value; CRS->colind[k] = c->index; ++k; @@ -4053,8 +4294,8 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) { CRS->sliceptr[0] = 0; for (slice = 1; slice < nslices; ++slice) { while (cur_NNZ < cur_bound && cur_row < M->m) { - ++cur_row; cur_NNZ += CRS->rowptr[cur_row + 1] - CRS->rowptr[cur_row]; + ++cur_row; } CRS->sliceptr[slice] = cur_row; cur_bound += slice_size; @@ -4064,17 +4305,19 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) { return (NLMatrix)CRS; } -static void nlMatrixCompress(NLMatrix *M) { +static void nlMatrixCompress(NLMatrix* M) +{ NLMatrix CRS = nullptr; if ((*M)->type != NL_MATRIX_SPARSE_DYNAMIC) return; - CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix *)*M); + CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix*)*M); nlDeleteMatrix(*M); *M = CRS; } -static NLContext *nlNewContext() { - NLContext *result = NL_NEW(NLContext); +static NLContext *nlNewContext() +{ + NLContext* result = NL_NEW(NLContext); NL_CLEAR(result, NLContext); result->max_iterations = 100; result->threshold = 1e-6; @@ -4083,7 +4326,8 @@ static NLContext *nlNewContext() { return result; } -static void nlDeleteContext(NLContext *context) { +static void nlDeleteContext(NLContext *context) +{ nlDeleteMatrix(context->M); context->M = nullptr; nlDeleteMatrix(context->P); @@ -4101,19 +4345,22 @@ static void nlDeleteContext(NLContext *context) { NL_DELETE(context); } -static double ddot(int n, const double *x, const double *y) { +static double ddot(int n, const double *x, const double *y) +{ double sum = 0.0; for (int i = 0; i < n; i++) sum += x[i] * y[i]; return sum; } -static void daxpy(int n, double a, const double *x, double *y) { +static void daxpy(int n, double a, const double *x, double *y) +{ for (int i = 0; i < n; i++) y[i] = a * x[i] + y[i]; } -static void dscal(int n, double a, double *x) { +static void dscal(int n, double a, double *x) +{ for (int i = 0; i < n; i++) x[i] *= a; } @@ -4136,16 +4383,17 @@ static void dscal(int n, double a, double *x) { * versions of matrix x vector product (CPU/GPU, sparse/dense ...) */ -static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double *x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm) { - int N = (int)M->n; - double *r = NL_NEW_VECTOR(N); - double *d = NL_NEW_VECTOR(N); - double *h = NL_NEW_VECTOR(N); +static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double* b, double* x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm) +{ + int N = (int)M->n; + double* r = NL_NEW_VECTOR(N); + double* d = NL_NEW_VECTOR(N); + double* h = NL_NEW_VECTOR(N); double *Ad = h; uint32_t its = 0; double rh, alpha, beta; double b_square = ddot(N, b, b); - double err = eps * eps * b_square; + double err = eps * eps*b_square; double curr_err; nlMultMatrixVector(M, x, r); daxpy(N, -1., b, r); @@ -4175,12 +4423,13 @@ static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double * return its; } -static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double *b_in, double *x_in, double eps, uint32_t max_iter) { +static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double* b_in, double* x_in, double eps, uint32_t max_iter) +{ uint32_t result = 0; double rnorm = 0.0; double bnorm = 0.0; - double *b = b_in; - double *x = x_in; + double* b = b_in; + double* x = x_in; XA_DEBUG_ASSERT(M->m == M->n); double sq_bnorm, sq_rnorm; result = nlSolveSystem_PRE_CG(M, P, b, x, eps, max_iter, &sq_bnorm, &sq_rnorm); @@ -4195,9 +4444,10 @@ static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix return result; } -static bool nlSolveIterative(NLContext *context) { - double *b = context->b; - double *x = context->x; +static bool nlSolveIterative(NLContext *context) +{ + double* b = context->b; + double* x = context->x; uint32_t n = context->n; NLMatrix M = context->M; NLMatrix P = context->P; @@ -4209,30 +4459,34 @@ static bool nlSolveIterative(NLContext *context) { return true; } -struct NLJacobiPreconditioner { +struct NLJacobiPreconditioner +{ uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; - double *diag_inv; + double* diag_inv; }; -static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner *M) { +static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner* M) +{ NL_DELETE_ARRAY(M->diag_inv); } -static void nlJacobiPreconditionerMult(NLJacobiPreconditioner *M, const double *x, double *y) { +static void nlJacobiPreconditionerMult(NLJacobiPreconditioner* M, const double* x, double* y) +{ for (uint32_t i = 0; i < M->n; ++i) y[i] = x[i] * M->diag_inv[i]; } -static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) { - NLSparseMatrix *M = nullptr; - NLJacobiPreconditioner *result = nullptr; +static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) +{ + NLSparseMatrix* M = nullptr; + NLJacobiPreconditioner* result = nullptr; XA_DEBUG_ASSERT(M_in->type == NL_MATRIX_SPARSE_DYNAMIC); XA_DEBUG_ASSERT(M_in->m == M_in->n); - M = (NLSparseMatrix *)M_in; + M = (NLSparseMatrix*)M_in; result = NL_NEW(NLJacobiPreconditioner); NL_CLEAR(result, NLJacobiPreconditioner); result->m = M->m; @@ -4250,7 +4504,8 @@ static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) { #define NL_NB_VARIABLES 0x101 #define NL_MAX_ITERATIONS 0x103 -static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) { +static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) +{ if (pname == NL_NB_VARIABLES) { XA_DEBUG_ASSERT(param > 0); context->nb_variables = (uint32_t)param; @@ -4261,22 +4516,26 @@ static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) { } } -static void nlSetVariable(NLContext *context, uint32_t index, double value) { +static void nlSetVariable(NLContext *context, uint32_t index, double value) +{ XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); NL_BUFFER_ITEM(context->variable_buffer[0], index) = value; } -static double nlGetVariable(NLContext *context, uint32_t index) { +static double nlGetVariable(NLContext *context, uint32_t index) +{ XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); return NL_BUFFER_ITEM(context->variable_buffer[0], index); } -static void nlLockVariable(NLContext *context, uint32_t index) { +static void nlLockVariable(NLContext *context, uint32_t index) +{ XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); context->variable_is_locked[index] = true; } -static void nlVariablesToVector(NLContext *context) { +static void nlVariablesToVector(NLContext *context) +{ uint32_t n = context->n; XA_DEBUG_ASSERT(context->x); for (uint32_t k = 0; k < context->nb_systems; ++k) { @@ -4291,7 +4550,8 @@ static void nlVariablesToVector(NLContext *context) { } } -static void nlVectorToVariables(NLContext *context) { +static void nlVectorToVariables(NLContext *context) +{ uint32_t n = context->n; XA_DEBUG_ASSERT(context->x); for (uint32_t k = 0; k < context->nb_systems; ++k) { @@ -4306,7 +4566,8 @@ static void nlVectorToVariables(NLContext *context) { } } -static void nlCoefficient(NLContext *context, uint32_t index, double value) { +static void nlCoefficient(NLContext *context, uint32_t index, double value) +{ XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); if (context->variable_is_locked[index]) { /* @@ -4323,11 +4584,12 @@ static void nlCoefficient(NLContext *context, uint32_t index, double value) { } } -#define NL_SYSTEM 0x0 -#define NL_MATRIX 0x1 -#define NL_ROW 0x2 +#define NL_SYSTEM 0x0 +#define NL_MATRIX 0x1 +#define NL_ROW 0x2 -static void nlBegin(NLContext *context, uint32_t prim) { +static void nlBegin(NLContext *context, uint32_t prim) +{ if (prim == NL_SYSTEM) { XA_DEBUG_ASSERT(context->nb_variables > 0); context->variable_buffer = NL_NEW_ARRAY(NLBufferBinding, context->nb_systems); @@ -4336,8 +4598,8 @@ static void nlBegin(NLContext *context, uint32_t prim) { NL_CLEAR_ARRAY(double, context->variable_value, context->nb_variables * context->nb_systems); for (uint32_t k = 0; k < context->nb_systems; ++k) { context->variable_buffer[k].base_address = - context->variable_value + - k * context->nb_variables; + context->variable_value + + k * context->nb_variables; context->variable_buffer[k].stride = sizeof(double); } context->variable_is_locked = NL_NEW_ARRAY(bool, context->nb_variables); @@ -4360,11 +4622,11 @@ static void nlBegin(NLContext *context, uint32_t prim) { context->max_iterations = n * 5; context->M = (NLMatrix)(NL_NEW(NLSparseMatrix)); NL_CLEAR(context->M, NLSparseMatrix); - nlSparseMatrixConstruct((NLSparseMatrix *)(context->M), n, n); - context->x = NL_NEW_ARRAY(double, n * context->nb_systems); - NL_CLEAR_ARRAY(double, context->x, n * context->nb_systems); - context->b = NL_NEW_ARRAY(double, n * context->nb_systems); - NL_CLEAR_ARRAY(double, context->b, n * context->nb_systems); + nlSparseMatrixConstruct((NLSparseMatrix*)(context->M), n, n); + context->x = NL_NEW_ARRAY(double, n*context->nb_systems); + NL_CLEAR_ARRAY(double, context->x, n*context->nb_systems); + context->b = NL_NEW_ARRAY(double, n*context->nb_systems); + NL_CLEAR_ARRAY(double, context->b, n*context->nb_systems); nlVariablesToVector(context); nlRowColumnConstruct(&context->af); nlRowColumnConstruct(&context->al); @@ -4375,15 +4637,16 @@ static void nlBegin(NLContext *context, uint32_t prim) { } } -static void nlEnd(NLContext *context, uint32_t prim) { +static void nlEnd(NLContext *context, uint32_t prim) +{ if (prim == NL_MATRIX) { nlRowColumnClear(&context->af); nlRowColumnClear(&context->al); } else if (prim == NL_ROW) { - NLRowColumn *af = &context->af; - NLRowColumn *al = &context->al; - NLSparseMatrix *M = (NLSparseMatrix *)context->M; - double *b = context->b; + NLRowColumn* af = &context->af; + NLRowColumn* al = &context->al; + NLSparseMatrix* M = (NLSparseMatrix*)context->M; + double* b = context->b; uint32_t nf = af->size; uint32_t nl = al->size; uint32_t n = context->n; @@ -4404,13 +4667,14 @@ static void nlEnd(NLContext *context, uint32_t prim) { S += al->coeff[jj].value * NL_BUFFER_ITEM(context->variable_buffer[k], j); } for (uint32_t jj = 0; jj < nf; jj++) - b[k * n + af->coeff[jj].index] -= af->coeff[jj].value * S; + b[k*n + af->coeff[jj].index] -= af->coeff[jj].value * S; } context->current_row++; } } -static bool nlSolve(NLContext *context) { +static bool nlSolve(NLContext *context) +{ nlDeleteMatrix(context->P); context->P = nlNewJacobiPreconditioner(context->M); nlMatrixCompress(&context->M); @@ -4421,9 +4685,11 @@ static bool nlSolve(NLContext *context) { } // namespace opennl namespace raster { -class ClippedTriangle { +class ClippedTriangle +{ public: - ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c) { + ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c) + { m_numVertices = 3; m_activeVertexBuffer = 0; m_verticesA[0] = a; @@ -4434,20 +4700,20 @@ public: m_area = 0; } - void clipHorizontalPlane(float offset, float clipdirection) { - Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; + void clipHorizontalPlane(float offset, float clipdirection) + { + Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; m_activeVertexBuffer ^= 1; Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; - float dy2, dy1 = offset - v[0].y; - int dy2in, dy1in = clipdirection * dy1 >= 0; - uint32_t p = 0; + float dy2, dy1 = offset - v[0].y; + int dy2in, dy1in = clipdirection * dy1 >= 0; + uint32_t p = 0; for (uint32_t k = 0; k < m_numVertices; k++) { - dy2 = offset - v[k + 1].y; + dy2 = offset - v[k + 1].y; dy2in = clipdirection * dy2 >= 0; - if (dy1in) - v2[p++] = v[k]; - if (dy1in + dy2in == 1) { // not both in/out + if (dy1in) v2[p++] = v[k]; + if ( dy1in + dy2in == 1 ) { // not both in/out float dx = v[k + 1].x - v[k].x; float dy = v[k + 1].y - v[k].y; v2[p++] = Vector2(v[k].x + dy1 * (dx / dy), offset); @@ -4458,20 +4724,20 @@ public: m_numVertices = p; } - void clipVerticalPlane(float offset, float clipdirection) { - Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; + void clipVerticalPlane(float offset, float clipdirection) + { + Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; m_activeVertexBuffer ^= 1; Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; - float dx2, dx1 = offset - v[0].x; - int dx2in, dx1in = clipdirection * dx1 >= 0; - uint32_t p = 0; + float dx2, dx1 = offset - v[0].x; + int dx2in, dx1in = clipdirection * dx1 >= 0; + uint32_t p = 0; for (uint32_t k = 0; k < m_numVertices; k++) { dx2 = offset - v[k + 1].x; dx2in = clipdirection * dx2 >= 0; - if (dx1in) - v2[p++] = v[k]; - if (dx1in + dx2in == 1) { // not both in/out + if (dx1in) v2[p++] = v[k]; + if ( dx1in + dx2in == 1 ) { // not both in/out float dx = v[k + 1].x - v[k].x; float dy = v[k + 1].y - v[k].y; v2[p++] = Vector2(offset, v[k].y + dx1 * (dy / dx)); @@ -4482,8 +4748,9 @@ public: m_numVertices = p; } - void computeArea() { - Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; + void computeArea() + { + Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; m_area = 0; float centroidx = 0, centroidy = 0; @@ -4497,7 +4764,8 @@ public: m_area = 0.5f * fabsf(m_area); } - void clipAABox(float x0, float y0, float x1, float y1) { + void clipAABox(float x0, float y0, float x1, float y1) + { clipVerticalPlane(x0, -1); clipHorizontalPlane(y0, -1); clipVerticalPlane(x1, 1); @@ -4505,7 +4773,8 @@ public: computeArea(); } - float area() const { + float area() const + { return m_area; } @@ -4522,9 +4791,10 @@ private: typedef bool (*SamplingCallback)(void *param, int x, int y); /// A triangle for rasterization. -struct Triangle { - Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) : - v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f) { +struct Triangle +{ + Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) : v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f) + { // make sure every triangle is front facing. flipBackface(); // Compute deltas. @@ -4532,7 +4802,8 @@ struct Triangle { computeUnitInwardNormals(); } - bool isValid() { + bool isValid() + { const Vector2 e0 = v3 - v1; const Vector2 e1 = v2 - v1; const float area = e0.y * e1.x - e1.y * e0.x; @@ -4540,17 +4811,18 @@ struct Triangle { } // extents has to be multiple of BK_SIZE!! - bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param) { - const float PX_INSIDE = 1.0f / sqrtf(2.0f); - const float PX_OUTSIDE = -1.0f / sqrtf(2.0f); + bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param) + { + const float PX_INSIDE = 1.0f/sqrtf(2.0f); + const float PX_OUTSIDE = -1.0f/sqrtf(2.0f); const float BK_SIZE = 8; - const float BK_INSIDE = sqrtf(BK_SIZE * BK_SIZE / 2.0f); - const float BK_OUTSIDE = -sqrtf(BK_SIZE * BK_SIZE / 2.0f); + const float BK_INSIDE = sqrtf(BK_SIZE*BK_SIZE/2.0f); + const float BK_OUTSIDE = -sqrtf(BK_SIZE*BK_SIZE/2.0f); // Bounding rectangle float minx = floorf(max(min3(v1.x, v2.x, v3.x), 0.0f)); float miny = floorf(max(min3(v1.y, v2.y, v3.y), 0.0f)); - float maxx = ceilf(min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f)); - float maxy = ceilf(min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f)); + float maxx = ceilf( min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f)); + float maxy = ceilf( min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f)); // There's no reason to align the blocks to the viewport, instead we align them to the origin of the triangle bounds. minx = floorf(minx); miny = floorf(miny); @@ -4575,10 +4847,9 @@ struct Triangle { float bC = C2 + n2.x * xc + n2.y * yc; float cC = C3 + n3.x * xc + n3.y * yc; // Skip block when outside an edge - if ((aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE)) - continue; + if ( (aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE) ) continue; // Accept whole block when totally covered - if ((aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE)) { + if ( (aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE) ) { for (float y = y0; y < y0 + BK_SIZE; y++) { for (float x = x0; x < x0 + BK_SIZE; x++) { if (!cb(param, (int)x, (int)y)) @@ -4621,9 +4892,10 @@ struct Triangle { } private: - void flipBackface() { + void flipBackface() + { // check if triangle is backfacing, if so, swap two vertices - if (((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0) { + if ( ((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0 ) { Vector2 hv = v1; v1 = v2; v2 = hv; // swap pos @@ -4631,7 +4903,8 @@ private: } // compute unit inward normals for each edge. - void computeUnitInwardNormals() { + void computeUnitInwardNormals() + { n1 = v1 - v2; n1 = Vector2(-n1.y, n1.x); n1 = n1 * (1.0f / sqrtf(dot(n1, n1))); @@ -4649,7 +4922,8 @@ private: }; // Process the given triangle. Returns false if rasterization was interrupted by the callback. -static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param) { +static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param) +{ Triangle tri(v[0], v[1], v[2]); // @@ It would be nice to have a conservative drawing mode that enlarges the triangle extents by one texel and is able to handle degenerate triangles. // @@ Maybe the simplest thing to do would be raster triangle edges. @@ -4664,19 +4938,22 @@ namespace segment { // - Insertion is o(n) // - Smallest element goes at the end, so that popping it is o(1). -struct CostQueue { - CostQueue(uint32_t size = UINT32_MAX) : - m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {} +struct CostQueue +{ + CostQueue(uint32_t size = UINT32_MAX) : m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {} - float peekCost() const { + float peekCost() const + { return m_pairs.back().cost; } - uint32_t peekFace() const { + uint32_t peekFace() const + { return m_pairs.back().face; } - void push(float cost, uint32_t face) { + void push(float cost, uint32_t face) + { const Pair p = { cost, face }; if (m_pairs.isEmpty() || cost < peekCost()) m_pairs.push_back(p); @@ -4693,25 +4970,29 @@ struct CostQueue { } } - uint32_t pop() { + uint32_t pop() + { XA_DEBUG_ASSERT(!m_pairs.isEmpty()); uint32_t f = m_pairs.back().face; m_pairs.pop_back(); return f; } - XA_INLINE void clear() { + XA_INLINE void clear() + { m_pairs.clear(); } - XA_INLINE uint32_t count() const { + XA_INLINE uint32_t count() const + { return m_pairs.size(); } private: const uint32_t m_maxSize; - struct Pair { + struct Pair + { float cost; uint32_t face; }; @@ -4719,7 +5000,8 @@ private: Array<Pair> m_pairs; }; -struct AtlasData { +struct AtlasData +{ ChartOptions options; const Mesh *mesh = nullptr; Array<float> edgeDihedralAngles; @@ -4729,10 +5011,10 @@ struct AtlasData { Array<Vector3> faceNormals; BitArray isFaceInChart; - AtlasData() : - edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {} + AtlasData() : edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {} - void compute() { + void compute() + { const uint32_t faceCount = mesh->faceCount(); const uint32_t edgeCount = mesh->edgeCount(); edgeDihedralAngles.resize(edgeCount); @@ -4773,18 +5055,20 @@ struct AtlasData { }; // If MeshDecl::vertexUvData is set on input meshes, find charts by floodfilling faces in world/model space without crossing UV seams. -struct OriginalUvCharts { - OriginalUvCharts(AtlasData &data) : - m_data(data) {} +struct OriginalUvCharts +{ + OriginalUvCharts(AtlasData &data) : m_data(data) {} uint32_t chartCount() const { return m_charts.size(); } const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; } - ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { + ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const + { const Chart &chart = m_charts[chartIndex]; return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount); } - void compute() { + void compute() + { m_charts.clear(); m_chartFaces.clear(); const Mesh *mesh = m_data.mesh; @@ -4805,7 +5089,8 @@ struct OriginalUvCharts { } // Compute basis for each chart. m_chartBasis.resize(m_charts.size()); - for (uint32_t c = 0; c < m_charts.size(); c++) { + for (uint32_t c = 0; c < m_charts.size(); c++) + { const Chart &chart = m_charts[c]; m_tempPoints.resize(chart.faceCount * 3); for (uint32_t f = 0; f < chart.faceCount; f++) { @@ -4818,11 +5103,13 @@ struct OriginalUvCharts { } private: - struct Chart { + struct Chart + { uint32_t firstFace, faceCount; }; - void floodfillFaces(Chart &chart) { + void floodfillFaces(Chart &chart) + { const bool isFaceAreaNegative = m_data.faceUvAreas[m_chartFaces[chart.firstFace]] < 0.0f; for (;;) { bool newFaceAdded = false; @@ -4868,13 +5155,14 @@ static uint32_t s_planarRegionsCurrentRegion; static uint32_t s_planarRegionsCurrentVertex; #endif -struct PlanarCharts { - PlanarCharts(AtlasData &data) : - m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {} +struct PlanarCharts +{ + PlanarCharts(AtlasData &data) : m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {} const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; } uint32_t chartCount() const { return m_charts.size(); } - ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { + ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const + { const Chart &chart = m_charts[chartIndex]; return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount); } @@ -4883,7 +5171,8 @@ struct PlanarCharts { uint32_t nextRegionFace(uint32_t face) const { return m_nextRegionFace[face]; } float regionArea(uint32_t region) const { return m_regionAreas[region]; } - void compute() { + void compute() + { const uint32_t faceCount = m_data.mesh->faceCount(); // Precompute regions of coplanar incident faces. m_regionFirstFace.clear(); @@ -4983,7 +5272,8 @@ struct PlanarCharts { if (!createChart) break; face = m_nextRegionFace[face]; - } while (face != firstRegionFace); + } + while (face != firstRegionFace); // Create a chart. if (createChart) { Chart chart; @@ -4995,13 +5285,15 @@ struct PlanarCharts { m_chartFaces.push_back(face); chart.faceCount++; face = m_nextRegionFace[face]; - } while (face != firstRegionFace); + } + while (face != firstRegionFace); m_charts.push_back(chart); } } // Compute basis for each chart using the first face normal (all faces have the same normal). m_chartBasis.resize(m_charts.size()); - for (uint32_t c = 0; c < m_charts.size(); c++) { + for (uint32_t c = 0; c < m_charts.size(); c++) + { const uint32_t face = m_chartFaces[m_charts[c].firstFace]; Basis &basis = m_chartBasis[c]; basis.normal = m_data.faceNormals[face]; @@ -5011,7 +5303,8 @@ struct PlanarCharts { } private: - struct Chart { + struct Chart + { uint32_t firstFace, faceCount; }; @@ -5025,11 +5318,12 @@ private: Array<Basis> m_chartBasis; }; -struct ClusteredCharts { - ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) : - m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {} +struct ClusteredCharts +{ + ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) : m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {} - ~ClusteredCharts() { + ~ClusteredCharts() + { const uint32_t chartCount = m_charts.size(); for (uint32_t i = 0; i < chartCount; i++) { m_charts[i]->~Chart(); @@ -5041,7 +5335,8 @@ struct ClusteredCharts { ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { return m_charts[chartIndex]->faces; } const Basis &chartBasis(uint32_t chartIndex) const { return m_charts[chartIndex]->basis; } - void compute() { + void compute() + { const uint32_t faceCount = m_data.mesh->faceCount(); m_facesLeft = 0; for (uint32_t i = 0; i < faceCount; i++) { @@ -5087,9 +5382,9 @@ struct ClusteredCharts { } private: - struct Chart { - Chart() : - faces(MemTag::SegmentAtlasChartFaces) {} + struct Chart + { + Chart() : faces(MemTag::SegmentAtlasChartFaces) {} int id = -1; Basis basis; // Best fit normal. @@ -5103,7 +5398,8 @@ private: uint32_t seed; }; - void placeSeeds(float threshold) { + void placeSeeds(float threshold) + { XA_PROFILE_START(clusteredChartsPlaceSeeds) m_placingSeeds = true; // Instead of using a predefiened number of seeds: @@ -5119,7 +5415,8 @@ private: } // Returns true if any of the charts can grow more. - void growCharts(float threshold) { + void growCharts(float threshold) + { XA_PROFILE_START(clusteredChartsGrow) for (;;) { if (m_facesLeft == 0) @@ -5165,7 +5462,8 @@ private: XA_PROFILE_END(clusteredChartsGrow) } - void resetCharts() { + void resetCharts() + { XA_PROFILE_START(clusteredChartsReset) const uint32_t faceCount = m_data.mesh->faceCount(); for (uint32_t i = 0; i < faceCount; i++) { @@ -5196,7 +5494,8 @@ private: XA_PROFILE_END(clusteredChartsReset) } - bool relocateSeeds() { + bool relocateSeeds() + { XA_PROFILE_START(clusteredChartsRelocateSeeds) bool anySeedChanged = false; const uint32_t chartCount = m_charts.size(); @@ -5209,7 +5508,8 @@ private: return anySeedChanged; } - void fillHoles(float threshold) { + void fillHoles(float threshold) + { XA_PROFILE_START(clusteredChartsFillHoles) while (m_facesLeft > 0) createChart(threshold); @@ -5217,7 +5517,8 @@ private: } #if XA_MERGE_CHARTS - void mergeCharts() { + void mergeCharts() + { XA_PROFILE_START(clusteredChartsMerge) const uint32_t chartCount = m_charts.size(); // Merge charts progressively until there's none left to merge. @@ -5286,7 +5587,7 @@ private: if (m_sharedBoundaryLengthsNoSeams[cc] > 0.0f && equal(m_sharedBoundaryLengthsNoSeams[cc], chart2->boundaryLength, kEpsilon)) goto merge; if (m_sharedBoundaryLengths[cc] > 0.2f * max(0.0f, chart->boundaryLength - externalBoundaryLength) || - m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength) + m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength) goto merge; continue; merge: @@ -5324,7 +5625,8 @@ private: #endif private: - void createChart(float threshold) { + void createChart(float threshold) + { Chart *chart = XA_NEW(MemTag::Default, Chart); chart->id = (int)m_charts.size(); m_charts.push_back(chart); @@ -5355,13 +5657,15 @@ private: } } - bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const { + bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const + { const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge); const uint32_t oppositeFace = meshEdgeFace(oppositeEdge); return oppositeEdge == UINT32_MAX || m_faceCharts[oppositeFace] != chart->id; } - bool computeChartBasis(Chart *chart, Basis *basis) { + bool computeChartBasis(Chart *chart, Basis *basis) + { const uint32_t faceCount = chart->faces.size(); m_tempPoints.resize(chart->faces.size() * 3); for (uint32_t i = 0; i < faceCount; i++) { @@ -5372,7 +5676,8 @@ private: return Fit::computeBasis(m_tempPoints, basis); } - bool isFaceFlipped(uint32_t face) const { + bool isFaceFlipped(uint32_t face) const + { const Vector2 &v1 = m_texcoords[face * 3 + 0]; const Vector2 &v2 = m_texcoords[face * 3 + 1]; const Vector2 &v3 = m_texcoords[face * 3 + 2]; @@ -5380,7 +5685,8 @@ private: return parametricArea < 0.0f; } - void parameterizeChart(const Chart *chart) { + void parameterizeChart(const Chart *chart) + { const uint32_t faceCount = chart->faces.size(); for (uint32_t i = 0; i < faceCount; i++) { const uint32_t face = chart->faces[i]; @@ -5393,7 +5699,8 @@ private: } // m_faceCharts for the chart faces must be set to the chart ID. Needed to compute boundary edges. - bool isChartParameterizationValid(const Chart *chart) { + bool isChartParameterizationValid(const Chart *chart) + { const uint32_t faceCount = chart->faces.size(); // Check for flipped faces in the parameterization. OK if all are flipped. uint32_t flippedFaceCount = 0; @@ -5427,7 +5734,8 @@ private: return true; } - bool addFaceToChart(Chart *chart, uint32_t face) { + bool addFaceToChart(Chart *chart, uint32_t face) + { XA_DEBUG_ASSERT(!m_data.isFaceInChart.get(face)); const uint32_t oldFaceCount = chart->faces.size(); const bool firstFace = oldFaceCount == 0; @@ -5505,7 +5813,8 @@ private: } // Returns true if the seed has changed. - bool relocateSeed(Chart *chart) { + bool relocateSeed(Chart *chart) + { // Find the first N triangles that fit the proxy best. const uint32_t faceCount = chart->faces.size(); m_bestTriangles.clear(); @@ -5535,7 +5844,8 @@ private: } // Cost is combined metrics * weights. - float computeCost(Chart *chart, uint32_t face) const { + float computeCost(Chart *chart, uint32_t face) const + { // Estimate boundary length and area: const float newChartArea = computeArea(chart, face); const float newBoundaryLength = computeBoundaryLength(chart, face); @@ -5571,20 +5881,23 @@ private: // Returns a value in [0-1]. // 0 if face normal is coplanar to the chart's best fit normal. // 1 if face normal is perpendicular. - float computeNormalDeviationMetric(Chart *chart, uint32_t face) const { + float computeNormalDeviationMetric(Chart *chart, uint32_t face) const + { // All faces in coplanar regions have the same normal, can use any face. const Vector3 faceNormal = m_data.faceNormals[face]; // Use plane fitting metric for now: return min(1.0f - dot(faceNormal, chart->basis.normal), 1.0f); // @@ normal deviations should be weighted by face area } - float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const { + float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const + { const float oldRoundness = square(chart->boundaryLength) / chart->area; const float newRoundness = square(newBoundaryLength) / newChartArea; return 1.0f - oldRoundness / newRoundness; } - float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const { + float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const + { float l_out = 0.0f; // Length of firstFace planar region boundary that doesn't border the chart. float l_in = 0.0f; // Length that does border the chart. const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace); @@ -5613,7 +5926,8 @@ private: #endif } - bool isNormalSeam(uint32_t edge) const { + bool isNormalSeam(uint32_t edge) const + { const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge); if (oppositeEdge == UINT32_MAX) return false; // boundary edge @@ -5633,7 +5947,8 @@ private: return !equal(m_data.faceNormals[f0], m_data.faceNormals[f1], kNormalEpsilon); } - float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const { + float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const + { float seamFactor = 0.0f, totalLength = 0.0f; uint32_t face = firstFace; for (;;) { @@ -5673,7 +5988,8 @@ private: return seamFactor / totalLength; } - float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const { + float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const + { float seamLength = 0.0f, totalLength = 0.0f; uint32_t face = firstFace; for (;;) { @@ -5699,7 +6015,8 @@ private: return seamLength / totalLength; } - float computeArea(Chart *chart, uint32_t firstFace) const { + float computeArea(Chart *chart, uint32_t firstFace) const + { float area = chart->area; uint32_t face = firstFace; for (;;) { @@ -5711,7 +6028,8 @@ private: return area; } - float computeBoundaryLength(Chart *chart, uint32_t firstFace) const { + float computeBoundaryLength(Chart *chart, uint32_t firstFace) const + { float boundaryLength = chart->boundaryLength; // Add new edges, subtract edges shared with the chart. const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace); @@ -5732,10 +6050,11 @@ private: if (face == firstFace) break; } - return max(0.0f, boundaryLength); // @@ Hack! + return max(0.0f, boundaryLength); // @@ Hack! } - bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength) { + bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength) + { const uint32_t oldOwnerFaceCount = owner->faces.size(); const uint32_t chartFaceCount = chart->faces.size(); owner->faces.push_back(chart->faces); @@ -5793,8 +6112,10 @@ private: bool m_placingSeeds; }; -struct ChartGeneratorType { - enum Enum { +struct ChartGeneratorType +{ + enum Enum + { OriginalUv, Planar, Clustered, @@ -5802,15 +6123,17 @@ struct ChartGeneratorType { }; }; -struct Atlas { - Atlas() : - m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {} +struct Atlas +{ + Atlas() : m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {} - uint32_t chartCount() const { + uint32_t chartCount() const + { return m_originalUvCharts.chartCount() + m_planarCharts.chartCount() + m_clusteredCharts.chartCount(); } - ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { + ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const + { if (chartIndex < m_originalUvCharts.chartCount()) return m_originalUvCharts.chartFaces(chartIndex); chartIndex -= m_originalUvCharts.chartCount(); @@ -5820,7 +6143,8 @@ struct Atlas { return m_clusteredCharts.chartFaces(chartIndex); } - const Basis &chartBasis(uint32_t chartIndex) const { + const Basis &chartBasis(uint32_t chartIndex) const + { if (chartIndex < m_originalUvCharts.chartCount()) return m_originalUvCharts.chartBasis(chartIndex); chartIndex -= m_originalUvCharts.chartCount(); @@ -5830,7 +6154,8 @@ struct Atlas { return m_clusteredCharts.chartBasis(chartIndex); } - ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const { + ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const + { if (chartIndex < m_originalUvCharts.chartCount()) return ChartGeneratorType::OriginalUv; chartIndex -= m_originalUvCharts.chartCount(); @@ -5839,7 +6164,8 @@ struct Atlas { return ChartGeneratorType::Clustered; } - void reset(const Mesh *mesh, const ChartOptions &options) { + void reset(const Mesh *mesh, const ChartOptions &options) + { XA_PROFILE_START(buildAtlasInit) m_data.options = options; m_data.mesh = mesh; @@ -5847,7 +6173,8 @@ struct Atlas { XA_PROFILE_END(buildAtlasInit) } - void compute() { + void compute() + { if (m_data.options.useInputMeshUvs) { XA_PROFILE_START(originalUvCharts) m_originalUvCharts.compute(); @@ -5868,17 +6195,19 @@ private: ClusteredCharts m_clusteredCharts; }; -struct ComputeUvMeshChartsTaskArgs { +struct ComputeUvMeshChartsTaskArgs +{ UvMesh *mesh; Progress *progress; }; // Charts are found by floodfilling faces without crossing UV seams. -struct ComputeUvMeshChartsTask { - ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) : - m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {} +struct ComputeUvMeshChartsTask +{ + ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) : m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {} - void run() { + void run() + { const uint32_t vertexCount = m_mesh->texcoords.size(); const uint32_t indexCount = m_mesh->indices.size(); const uint32_t faceCount = indexCount / 3; @@ -5932,7 +6261,8 @@ struct ComputeUvMeshChartsTask { private: // The chart at chartIndex doesn't have to exist yet. - bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const { + bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const + { if (m_faceAssigned.get(face)) return false; // Already assigned to a chart. if (m_mesh->faceIgnore.get(face)) @@ -5949,7 +6279,8 @@ private: return true; } - void addFaceToChart(uint32_t chartIndex, uint32_t face) { + void addFaceToChart(uint32_t chartIndex, uint32_t face) + { UvMeshChart *chart = m_mesh->charts[chartIndex]; m_faceAssigned.set(face); chart->faces.push_back(face); @@ -5960,20 +6291,22 @@ private: } } - UvMesh *const m_mesh; - Progress *const m_progress; + UvMesh * const m_mesh; + Progress * const m_progress; HashMap<Vector2> m_uvToEdgeMap; // Face is edge / 3. BitArray m_faceAssigned; }; -static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData) { +static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData) +{ XA_PROFILE_START(computeChartsThread) ComputeUvMeshChartsTask task((ComputeUvMeshChartsTaskArgs *)taskUserData); task.run(); XA_PROFILE_END(computeChartsThread) } -static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData) { +static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData) +{ uint32_t totalFaceCount = 0; for (uint32_t i = 0; i < meshes.length; i++) totalFaceCount += meshes[i]->indices.size() / 3; @@ -5981,7 +6314,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh * TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(nullptr, meshes.length); Array<ComputeUvMeshChartsTaskArgs> taskArgs; taskArgs.resize(meshes.length); - for (uint32_t i = 0; i < meshes.length; i++) { + for (uint32_t i = 0; i < meshes.length; i++) + { ComputeUvMeshChartsTaskArgs &args = taskArgs[i]; args.mesh = meshes[i]; args.progress = &progress; @@ -5999,7 +6333,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh * namespace param { // Fast sweep in 3 directions -static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b) { +static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b) +{ XA_DEBUG_ASSERT(a != nullptr); XA_DEBUG_ASSERT(b != nullptr); const uint32_t vertexCount = mesh->vertexCount(); @@ -6056,7 +6391,8 @@ static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b // From OpenNL LSCM example. // Computes the coordinates of the vertices of a triangle in a local 2D orthonormal basis of the triangle's plane. -static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2) { +static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2) +{ Vector3 X = normalize(p1 - p0); Vector3 Z = normalize(cross(X, p2 - p0)); Vector3 Y = cross(Z, X); @@ -6068,24 +6404,28 @@ static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vec // Conformal relations from Brecht Van Lommel (based on ABF): -static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) { +static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) +{ Vector3 d1 = v1 - v2; Vector3 d2 = v3 - v2; return clamp(dot(d1, d2) / (length(d1) * length(d2)), -1.0f, 1.0f); } -static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) { +static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) +{ float dot = vec_angle_cos(v1, v2, v3); return acosf(dot); } -static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3) { +static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3) +{ *a1 = vec_angle(v3, v1, v2); *a2 = vec_angle(v1, v2, v3); *a3 = kPi - *a2 - *a1; } -static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2) { +static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2) +{ // @@ IC: Wouldn't it be more accurate to return cos and compute 1-cos^2? // It does indeed seem to be a little bit more robust. // @@ Need to revisit this more carefully! @@ -6142,7 +6482,8 @@ static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, in return true; } -static bool computeLeastSquaresConformalMap(Mesh *mesh) { +static bool computeLeastSquaresConformalMap(Mesh *mesh) +{ uint32_t lockedVertex0, lockedVertex1; if (!findApproximateDiameterVertices(mesh, &lockedVertex0, &lockedVertex1)) { // Mesh has no boundaries. @@ -6189,16 +6530,16 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) { // Note : b = 0 // Real part opennl::nlBegin(context, NL_ROW); - opennl::nlCoefficient(context, u0_id, -a + c); - opennl::nlCoefficient(context, v0_id, b - d); - opennl::nlCoefficient(context, u1_id, -c); - opennl::nlCoefficient(context, v1_id, d); + opennl::nlCoefficient(context, u0_id, -a+c) ; + opennl::nlCoefficient(context, v0_id, b-d) ; + opennl::nlCoefficient(context, u1_id, -c) ; + opennl::nlCoefficient(context, v1_id, d) ; opennl::nlCoefficient(context, u2_id, a); opennl::nlEnd(context, NL_ROW); // Imaginary part opennl::nlBegin(context, NL_ROW); - opennl::nlCoefficient(context, u0_id, -b + d); - opennl::nlCoefficient(context, v0_id, -a + c); + opennl::nlCoefficient(context, u0_id, -b+d); + opennl::nlCoefficient(context, v0_id, -a+c); opennl::nlCoefficient(context, u1_id, -d); opennl::nlCoefficient(context, v1_id, -c); opennl::nlCoefficient(context, v2_id, a); @@ -6222,8 +6563,10 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) { return true; } -struct PiecewiseParam { - void reset(const Mesh *mesh) { +struct PiecewiseParam +{ + void reset(const Mesh *mesh) + { m_mesh = mesh; const uint32_t faceCount = m_mesh->faceCount(); const uint32_t vertexCount = m_mesh->vertexCount(); @@ -6241,7 +6584,8 @@ struct PiecewiseParam { ConstArrayView<uint32_t> chartFaces() const { return m_patch; } ConstArrayView<Vector2> texcoords() const { return m_texcoords; } - bool computeChart() { + bool computeChart() + { // Clear per-patch state. m_patch.clear(); m_candidates.clear(); @@ -6370,7 +6714,8 @@ struct PiecewiseParam { } private: - struct Candidate { + struct Candidate + { uint32_t face, vertex; Candidate *prev, *next; // The previous/next candidate with the same vertex. Vector2 position; @@ -6380,14 +6725,10 @@ private: float patchVertexOrient; }; - struct CandidateIterator { - CandidateIterator(Candidate *head) : - m_current(head) { XA_DEBUG_ASSERT(!head->prev); } - void advance() { - if (m_current != nullptr) { - m_current = m_current->next; - } - } + struct CandidateIterator + { + CandidateIterator(Candidate *head) : m_current(head) { XA_DEBUG_ASSERT(!head->prev); } + void advance() { if (m_current != nullptr) { m_current = m_current->next; } } bool isDone() const { return !m_current; } Candidate *current() { return m_current; } @@ -6406,7 +6747,8 @@ private: UniformGrid2 m_boundaryGrid; Array<uint32_t> m_newBoundaryEdges, m_ignoreBoundaryEdges; // Temp arrays used when testing for boundary intersection. - void addFaceToPatch(uint32_t face) { + void addFaceToPatch(uint32_t face) + { XA_DEBUG_ASSERT(!m_faceInPatch.get(face)); XA_DEBUG_ASSERT(!m_faceInAnyPatch.get(face)); m_patch.push_back(face); @@ -6446,7 +6788,8 @@ private: } } - void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex) { + void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex) + { XA_DEBUG_ASSERT(!m_faceToCandidate[face]); Vector2 texcoords[3]; orthoProjectFace(face, texcoords); @@ -6549,7 +6892,8 @@ private: it.current()->maxCost = maxCost; } - Candidate *linkedCandidateHead(Candidate *candidate) { + Candidate *linkedCandidateHead(Candidate *candidate) + { Candidate *current = candidate; for (;;) { if (!current->prev) @@ -6559,7 +6903,8 @@ private: return current; } - void removeLinkedCandidates(Candidate *head) { + void removeLinkedCandidates(Candidate *head) + { XA_DEBUG_ASSERT(!head->prev); Candidate *current = head; while (current) { @@ -6576,7 +6921,8 @@ private: } } - void orthoProjectFace(uint32_t face, Vector2 *texcoords) const { + void orthoProjectFace(uint32_t face, Vector2 *texcoords) const + { const Vector3 normal = -m_mesh->computeFaceNormal(face); const Vector3 tangent = normalize(m_mesh->position(m_mesh->vertexAt(face * 3 + 1)) - m_mesh->position(m_mesh->vertexAt(face * 3 + 0))); const Vector3 bitangent = cross(normal, tangent); @@ -6586,14 +6932,16 @@ private: } } - float parametricArea(const Vector2 *texcoords) const { + float parametricArea(const Vector2 *texcoords) const + { const Vector2 &v1 = texcoords[0]; const Vector2 &v2 = texcoords[1]; const Vector2 &v3 = texcoords[2]; return ((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f; } - float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const { + float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const + { float parametricArea = ((t2.y - t1.y) * (t3.x - t1.x) - (t3.y - t1.y) * (t2.x - t1.x)) * 0.5f; if (isZero(parametricArea, kAreaEpsilon)) return FLT_MAX; @@ -6607,13 +6955,15 @@ private: } // Return value is positive if the point is one side of the edge, negative if on the other side. - float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const { + float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const + { return (edgeVertex0.x - point.x) * (edgeVertex1.y - point.y) - (edgeVertex0.y - point.y) * (edgeVertex1.x - point.x); } }; // Estimate quality of existing parameterization. -struct Quality { +struct Quality +{ // computeBoundaryIntersection bool boundaryIntersection = false; @@ -6630,7 +6980,8 @@ struct Quality { float conformalMetric = 0.0f; float authalicMetric = 0.0f; - void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid) { + void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid) + { const Array<uint32_t> &boundaryEdges = mesh->boundaryEdges(); const uint32_t boundaryEdgeCount = boundaryEdges.size(); boundaryGrid.reset(mesh->texcoords(), mesh->indices(), boundaryEdgeCount); @@ -6646,7 +6997,8 @@ struct Quality { #endif } - void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces) { + void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces) + { totalTriangleCount = flippedTriangleCount = zeroAreaTriangleCount = 0; if (flippedFaces) flippedFaces->clear(); @@ -6682,7 +7034,8 @@ struct Quality { flippedFaces->clear(); flippedTriangleCount = 0; } - if (flippedTriangleCount > totalTriangleCount / 2) { + if (flippedTriangleCount > totalTriangleCount / 2) + { // If more than half the triangles are flipped, reverse the flipped / not flipped classification. flippedTriangleCount = totalTriangleCount - flippedTriangleCount; if (flippedFaces) { @@ -6704,7 +7057,8 @@ struct Quality { } } - void computeMetrics(const Mesh *mesh) { + void computeMetrics(const Mesh *mesh) + { totalGeometricArea = totalParametricArea = 0.0f; stretchMetric = maxStretchMetric = conformalMetric = authalicMetric = 0.0f; const uint32_t faceCount = mesh->faceCount(); @@ -6736,7 +7090,7 @@ struct Quality { const float a = dot(Ss, Ss); // E const float b = dot(Ss, St); // F const float c = dot(St, St); // G - // Compute eigen-values of the first fundamental form: + // Compute eigen-values of the first fundamental form: const float sigma1 = sqrtf(0.5f * max(0.0f, a + c - sqrtf(square(a - c) + 4 * square(b)))); // gamma uppercase, min eigenvalue. const float sigma2 = sqrtf(0.5f * max(0.0f, a + c + sqrtf(square(a - c) + 4 * square(b)))); // gamma lowercase, max eigenvalue. XA_ASSERT(sigma2 > sigma1 || equal(sigma1, sigma2, kEpsilon)); @@ -6767,22 +7121,24 @@ struct Quality { if (totalGeometricArea > 0.0f) { const float normFactor = sqrtf(totalParametricArea / totalGeometricArea); stretchMetric = sqrtf(stretchMetric / totalGeometricArea) * normFactor; - maxStretchMetric *= normFactor; + maxStretchMetric *= normFactor; conformalMetric = sqrtf(conformalMetric / totalGeometricArea); authalicMetric = sqrtf(authalicMetric / totalGeometricArea); } } }; -struct ChartCtorBuffers { +struct ChartCtorBuffers +{ Array<uint32_t> chartMeshIndices; Array<uint32_t> unifiedMeshIndices; }; -class Chart { +class Chart +{ public: - Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) : - m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) { + Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) : m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) + { XA_UNUSED(chartGroupId); XA_UNUSED(chartId); m_faceToSourceFaceMap.copyFrom(faces.data, faces.length); @@ -6813,8 +7169,7 @@ public: m_chartVertexToUnifiedVertexMap.push_back(unifiedVertex); m_originalVertexCount++; } - m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex); - ; + m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);; XA_DEBUG_ASSERT(m_originalIndices[f * 3 + i] != UINT32_MAX); unifiedIndices[i] = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex); XA_DEBUG_ASSERT(unifiedIndices[i] != UINT32_MAX); @@ -6838,8 +7193,8 @@ public: #endif } - Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) : - m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) { + Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) : m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) + { const uint32_t faceCount = faces.length; m_faceToSourceFaceMap.resize(faceCount); for (uint32_t i = 0; i < faceCount; i++) @@ -6886,7 +7241,8 @@ public: backupTexcoords(); } - ~Chart() { + ~Chart() + { if (m_unifiedMesh) { m_unifiedMesh->~Mesh(); XA_FREE(m_unifiedMesh); @@ -6914,7 +7270,8 @@ public: ConstArrayView<uint32_t> originalVertices() const { return m_originalIndices; } - void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid) { + void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid) + { const uint32_t unifiedVertexCount = m_unifiedMesh->vertexCount(); if (m_generatorType == segment::ChartGeneratorType::OriginalUv) { } else { @@ -6938,7 +7295,8 @@ public: XA_PROFILE_START(parameterizeChartsLSCM) if (options.paramFunc) { options.paramFunc(&m_unifiedMesh->position(0).x, &m_unifiedMesh->texcoord(0).x, m_unifiedMesh->vertexCount(), m_unifiedMesh->indices().data, m_unifiedMesh->indexCount()); - } else + } + else computeLeastSquaresConformalMap(m_unifiedMesh); XA_PROFILE_END(parameterizeChartsLSCM) XA_PROFILE_START(parameterizeChartsEvaluateQuality) @@ -6980,7 +7338,8 @@ public: backupTexcoords(); } - Vector2 computeParametricBounds() const { + Vector2 computeParametricBounds() const + { Vector2 minCorner(FLT_MAX, FLT_MAX); Vector2 maxCorner(-FLT_MAX, -FLT_MAX); const uint32_t vertexCount = m_unifiedMesh->vertexCount(); @@ -6992,7 +7351,8 @@ public: } #if XA_CHECK_PIECEWISE_CHART_QUALITY - void evaluateQuality(UniformGrid2 &boundaryGrid) { + void evaluateQuality(UniformGrid2 &boundaryGrid) + { m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid); #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION m_quality.computeFlippedFaces(m_unifiedMesh, &m_paramFlippedFaces); @@ -7004,12 +7364,14 @@ public: } #endif - void restoreTexcoords() { + void restoreTexcoords() + { memcpy(m_unifiedMesh->texcoords().data, m_backupTexcoords.data(), m_unifiedMesh->vertexCount() * sizeof(Vector2)); } private: - void backupTexcoords() { + void backupTexcoords() + { m_backupTexcoords.resize(m_unifiedMesh->vertexCount()); memcpy(m_backupTexcoords.data(), m_unifiedMesh->texcoords().data, m_unifiedMesh->vertexCount() * sizeof(Vector2)); } @@ -7040,7 +7402,8 @@ private: bool m_isInvalid; }; -struct CreateAndParameterizeChartTaskGroupArgs { +struct CreateAndParameterizeChartTaskGroupArgs +{ Progress *progress; ThreadLocal<UniformGrid2> *boundaryGrid; ThreadLocal<ChartCtorBuffers> *chartBuffers; @@ -7048,7 +7411,8 @@ struct CreateAndParameterizeChartTaskGroupArgs { ThreadLocal<PiecewiseParam> *pp; }; -struct CreateAndParameterizeChartTaskArgs { +struct CreateAndParameterizeChartTaskArgs +{ const Basis *basis; Chart *chart; // output Array<Chart *> charts; // output (if more than one chart) @@ -7059,7 +7423,8 @@ struct CreateAndParameterizeChartTaskArgs { uint32_t chartId; }; -static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData) { +static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData) +{ XA_PROFILE_START(createChartMeshAndParameterizeThread) auto groupArgs = (CreateAndParameterizeChartTaskGroupArgs *)groupUserData; auto args = (CreateAndParameterizeChartTaskArgs *)taskUserData; @@ -7130,13 +7495,15 @@ static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUse } // Set of charts corresponding to mesh faces in the same face group. -class ChartGroup { +class ChartGroup +{ public: - ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) : - m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup) { + ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) : m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup) + { } - ~ChartGroup() { + ~ChartGroup() + { for (uint32_t i = 0; i < m_charts.size(); i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); @@ -7147,7 +7514,8 @@ public: Chart *chartAt(uint32_t i) const { return m_charts[i]; } uint32_t faceCount() const { return m_sourceMeshFaceGroups->faceCount(m_faceGroup); } - void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam) { + void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam) + { // This function may be called multiple times, so destroy existing charts. for (uint32_t i = 0; i < m_charts.size(); i++) { m_charts[i]->~Chart(); @@ -7291,7 +7659,8 @@ public: } private: - Mesh *createMesh() { + Mesh *createMesh() + { XA_DEBUG_ASSERT(m_faceGroup != MeshFaceGroups::kInvalid); // Create new mesh from the source mesh, using faces that belong to this group. m_faceToSourceFaceMap.reserve(m_sourceMeshFaceGroups->faceCount(m_faceGroup)); @@ -7345,14 +7714,15 @@ private: } const uint32_t m_id; - const Mesh *const m_sourceMesh; - const MeshFaceGroups *const m_sourceMeshFaceGroups; + const Mesh * const m_sourceMesh; + const MeshFaceGroups * const m_sourceMeshFaceGroups; const MeshFaceGroups::Handle m_faceGroup; Array<uint32_t> m_faceToSourceFaceMap; // List of faces of the source mesh that belong to this chart group. Array<Chart *> m_charts; }; -struct ChartGroupComputeChartsTaskGroupArgs { +struct ChartGroupComputeChartsTaskGroupArgs +{ ThreadLocal<segment::Atlas> *atlas; const ChartOptions *options; Progress *progress; @@ -7362,7 +7732,8 @@ struct ChartGroupComputeChartsTaskGroupArgs { ThreadLocal<PiecewiseParam> *piecewiseParam; }; -static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData) { +static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData) +{ auto args = (ChartGroupComputeChartsTaskGroupArgs *)groupUserData; auto chartGroup = (ChartGroup *)taskUserData; if (args->progress->cancel) @@ -7372,7 +7743,8 @@ static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserDa XA_PROFILE_END(chartGroupComputeChartsThread) } -struct MeshComputeChartsTaskGroupArgs { +struct MeshComputeChartsTaskGroupArgs +{ ThreadLocal<segment::Atlas> *atlas; const ChartOptions *options; Progress *progress; @@ -7382,7 +7754,8 @@ struct MeshComputeChartsTaskGroupArgs { ThreadLocal<PiecewiseParam> *piecewiseParam; }; -struct MeshComputeChartsTaskArgs { +struct MeshComputeChartsTaskArgs +{ const Mesh *sourceMesh; Array<ChartGroup *> *chartGroups; // output InvalidMeshGeometry *invalidMeshGeometry; // output @@ -7392,7 +7765,8 @@ struct MeshComputeChartsTaskArgs { static uint32_t s_faceGroupsCurrentVertex = 0; #endif -static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData) { +static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData) +{ auto groupArgs = (MeshComputeChartsTaskGroupArgs *)groupUserData; auto args = (MeshComputeChartsTaskArgs *)taskUserData; if (groupArgs->progress->cancel) @@ -7491,12 +7865,13 @@ cleanup: } /// An atlas is a set of chart groups. -class Atlas { +class Atlas +{ public: - Atlas() : - m_chartsComputed(false) {} + Atlas() : m_chartsComputed(false) {} - ~Atlas() { + ~Atlas() + { for (uint32_t i = 0; i < m_meshChartGroups.size(); i++) { for (uint32_t j = 0; j < m_meshChartGroups[i].size(); j++) { m_meshChartGroups[i][j]->~ChartGroup(); @@ -7513,11 +7888,13 @@ public: uint32_t chartGroupCount(uint32_t mesh) const { return m_meshChartGroups[mesh].size(); } const ChartGroup *chartGroupAt(uint32_t mesh, uint32_t group) const { return m_meshChartGroups[mesh][group]; } - void addMesh(const Mesh *mesh) { + void addMesh(const Mesh *mesh) + { m_meshes.push_back(mesh); } - bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData) { + bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData) + { XA_PROFILE_START(computeChartsReal) #if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS segment::s_planarRegionsCurrentRegion = segment::s_planarRegionsCurrentVertex = 0; @@ -7591,7 +7968,7 @@ public: private: Array<const Mesh *> m_meshes; Array<InvalidMeshGeometry> m_invalidMeshGeometry; // 1 per mesh. - Array<Array<ChartGroup *>> m_meshChartGroups; + Array<Array<ChartGroup *> > m_meshChartGroups; bool m_chartsComputed; }; @@ -7599,15 +7976,17 @@ private: namespace pack { -class AtlasImage { +class AtlasImage +{ public: - AtlasImage(uint32_t width, uint32_t height) : - m_width(width), m_height(height) { + AtlasImage(uint32_t width, uint32_t height) : m_width(width), m_height(height) + { m_data.resize(m_width * m_height); memset(m_data.data(), 0, sizeof(uint32_t) * m_data.size()); } - void resize(uint32_t width, uint32_t height) { + void resize(uint32_t width, uint32_t height) + { Array<uint32_t> data; data.resize(width * height); memset(data.data(), 0, sizeof(uint32_t) * data.size()); @@ -7618,7 +7997,8 @@ public: data.moveTo(m_data); } - void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y) { + void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y) + { const int w = image->width(); const int h = image->height(); for (int y = 0; y < h; y++) { @@ -7644,13 +8024,15 @@ public: } } - void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const { + void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const + { for (uint32_t y = 0; y < destHeight; y++) memcpy(&dest[y * destWidth], &m_data[padding + (y + padding) * m_width], destWidth * sizeof(uint32_t)); } #if XA_DEBUG_EXPORT_ATLAS_IMAGES - void writeTga(const char *filename, uint32_t width, uint32_t height) const { + void writeTga(const char *filename, uint32_t width, uint32_t height) const + { Array<uint8_t> image; image.resize(width * height * 3); for (uint32_t y = 0; y < height; y++) { @@ -7692,7 +8074,8 @@ private: Array<uint32_t> m_data; }; -struct Chart { +struct Chart +{ int32_t atlasIndex; uint32_t material; ConstArrayView<uint32_t> indices; @@ -7711,12 +8094,14 @@ struct Chart { uint32_t uniqueVertexCount() const { return uniqueVertices.isEmpty() ? vertices.length : uniqueVertices.size(); } }; -struct AddChartTaskArgs { +struct AddChartTaskArgs +{ param::Chart *paramChart; Chart *chart; // out }; -static void runAddChartTask(void *groupUserData, void *taskUserData) { +static void runAddChartTask(void *groupUserData, void *taskUserData) +{ XA_PROFILE_START(packChartsAddChartsThread) auto boundingBox = (ThreadLocal<BoundingBox2D> *)groupUserData; auto args = (AddChartTaskArgs *)taskUserData; @@ -7753,8 +8138,10 @@ static void runAddChartTask(void *groupUserData, void *taskUserData) { XA_PROFILE_END(packChartsAddChartsThread) } -struct Atlas { - ~Atlas() { +struct Atlas +{ + ~Atlas() + { for (uint32_t i = 0; i < m_atlasImages.size(); i++) { m_atlasImages[i]->~AtlasImage(); XA_FREE(m_atlasImages[i]); @@ -7778,7 +8165,8 @@ struct Atlas { const Array<AtlasImage *> &getImages() const { return m_atlasImages; } float getUtilization(uint32_t atlas) const { return m_utilization[atlas]; } - void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas) { + void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas) + { // Count charts. uint32_t chartCount = 0; for (uint32_t i = 0; i < paramAtlas->meshCount(); i++) { @@ -7819,7 +8207,8 @@ struct Atlas { m_charts[i] = taskArgs[i].chart; } - void addUvMeshCharts(UvMeshInstance *mesh) { + void addUvMeshCharts(UvMeshInstance *mesh) + { // Copy texcoords from mesh. mesh->texcoords.resize(mesh->mesh->texcoords.size()); memcpy(mesh->texcoords.data(), mesh->mesh->texcoords.data(), mesh->texcoords.size() * sizeof(Vector2)); @@ -7882,7 +8271,8 @@ struct Atlas { } // Pack charts in the smallest possible rectangle. - bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData) { + bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData) + { if (progressFunc) { if (!progressFunc(ProgressCategory::PackCharts, 0, progressUserData)) return false; @@ -8116,7 +8506,8 @@ struct Atlas { int best_x = 0, best_y = 0; int best_cw = 0, best_ch = 0; int best_r = 0; - for (;;) { + for (;;) + { #if XA_DEBUG bool firstChartInBitImage = false; #endif @@ -8152,7 +8543,8 @@ struct Atlas { if (best_x + best_cw > atlasSizes[currentAtlas].x || best_y + best_ch > atlasSizes[currentAtlas].y) { for (uint32_t j = 0; j < chartStartPositions.size(); j++) chartStartPositions[j] = Vector2i(0, 0); - } else { + } + else { chartStartPositions[currentAtlas] = Vector2i(best_x, best_y); } } @@ -8240,7 +8632,8 @@ struct Atlas { } if (m_utilization.size() > 1) { XA_PRINT(" %u: %f%% utilization\n", i, m_utilization[i] * 100.0f); - } else { + } + else { XA_PRINT(" %f%% utilization\n", m_utilization[i] * 100.0f); } } @@ -8259,14 +8652,16 @@ struct Atlas { } private: - bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) { + bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) + { const int attempts = 4096; if (options.bruteForce || attempts >= w * h) return findChartLocation_bruteForce(options, startPosition, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, maxResolution); return findChartLocation_random(options, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, attempts, maxResolution); } - bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) { + bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) + { const int stepSize = options.blockAlign ? 4 : 1; int best_metric = INT_MAX; // Try two different orientations. @@ -8311,7 +8706,8 @@ private: return best_metric != INT_MAX; } - bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution) { + bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution) + { bool result = false; const int BLOCK_SIZE = 4; int best_metric = INT_MAX; @@ -8366,7 +8762,8 @@ private: return result; } - void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r) { + void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r) + { XA_DEBUG_ASSERT(r == 0 || r == 1); const BitImage *image = r == 0 ? chartBitImage : chartBitImageRotated; const int w = image->width(); @@ -8389,7 +8786,8 @@ private: } } - void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const { + void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const + { boundaryEdgeGrid.reset(chart->vertices, chart->indices); if (chart->boundaryEdges) { const uint32_t edgeCount = chart->boundaryEdges->size(); @@ -8444,11 +8842,13 @@ private: } } - struct DrawTriangleCallbackArgs { + struct DrawTriangleCallbackArgs + { BitImage *chartBitImage, *chartBitImageRotated; }; - static bool drawTriangleCallback(void *param, int x, int y) { + static bool drawTriangleCallback(void *param, int x, int y) + { auto args = (DrawTriangleCallbackArgs *)param; args->chartBitImage->set(x, y); if (args->chartBitImageRotated) @@ -8471,13 +8871,15 @@ private: } // namespace internal // Used to map triangulated polygons back to polygons. -struct MeshPolygonMapping { +struct MeshPolygonMapping +{ internal::Array<uint8_t> faceVertexCount; // Copied from MeshDecl::faceVertexCount. internal::Array<uint32_t> triangleToPolygonMap; // Triangle index (mesh face index) to polygon index. internal::Array<uint32_t> triangleToPolygonIndicesMap; // Triangle indices to polygon indices. }; -struct Context { +struct Context +{ Atlas atlas; internal::Progress *addMeshProgress = nullptr; internal::TaskGroupHandle addMeshTaskGroup; @@ -8492,14 +8894,16 @@ struct Context { bool uvMeshChartsComputed = false; }; -Atlas *Create() { +Atlas *Create() +{ Context *ctx = XA_NEW(internal::MemTag::Default, Context); memset(&ctx->atlas, 0, sizeof(Atlas)); ctx->taskScheduler = XA_NEW(internal::MemTag::Default, internal::TaskScheduler); return &ctx->atlas; } -static void DestroyOutputMeshes(Context *ctx) { +static void DestroyOutputMeshes(Context *ctx) +{ if (!ctx->atlas.meshes) return; for (int i = 0; i < (int)ctx->atlas.meshCount; i++) { @@ -8520,7 +8924,8 @@ static void DestroyOutputMeshes(Context *ctx) { ctx->atlas.meshes = nullptr; } -void Destroy(Atlas *atlas) { +void Destroy(Atlas *atlas) +{ XA_DEBUG_ASSERT(atlas); Context *ctx = (Context *)atlas; if (atlas->utilization) @@ -8567,14 +8972,15 @@ void Destroy(Atlas *atlas) { #endif } -static void runAddMeshTask(void *groupUserData, void *taskUserData) { +static void runAddMeshTask(void *groupUserData, void *taskUserData) +{ XA_PROFILE_START(addMeshThread) auto ctx = (Context *)groupUserData; auto mesh = (internal::Mesh *)taskUserData; internal::Progress *progress = ctx->addMeshProgress; if (progress->cancel) { XA_PROFILE_END(addMeshThread) - return; + return; } XA_PROFILE_START(addMeshCreateColocals) mesh->createColocals(); @@ -8587,32 +8993,37 @@ static void runAddMeshTask(void *groupUserData, void *taskUserData) { XA_PROFILE_END(addMeshThread) } -static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index) { +static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index) +{ XA_DEBUG_ASSERT(meshDecl.vertexPositionData); XA_DEBUG_ASSERT(meshDecl.vertexPositionStride > 0); return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexPositionData)[meshDecl.vertexPositionStride * index]); } -static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index) { +static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index) +{ XA_DEBUG_ASSERT(meshDecl.vertexNormalData); XA_DEBUG_ASSERT(meshDecl.vertexNormalStride > 0); return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexNormalData)[meshDecl.vertexNormalStride * index]); } -static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index) { +static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index) +{ XA_DEBUG_ASSERT(meshDecl.vertexUvData); XA_DEBUG_ASSERT(meshDecl.vertexUvStride > 0); return *((const internal::Vector2 *)&((const uint8_t *)meshDecl.vertexUvData)[meshDecl.vertexUvStride * index]); } -static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i) { +static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i) +{ XA_DEBUG_ASSERT(indexData); if (format == IndexFormat::UInt16) return uint16_t((int32_t)((const uint16_t *)indexData)[i] + offset); return uint32_t((int32_t)((const uint32_t *)indexData)[i] + offset); } -AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint) { +AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint) +{ XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddMesh: atlas is null.\n"); @@ -8630,7 +9041,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH // Don't know how many times AddMesh will be called, so progress needs to adjusted each time. if (!ctx->addMeshProgress) { ctx->addMeshProgress = XA_NEW_ARGS(internal::MemTag::Default, internal::Progress, ProgressCategory::AddMesh, ctx->progressFunc, ctx->progressUserData, 1); - } else { + } + else { ctx->addMeshProgress->setMaxValue(internal::max(ctx->meshes.size() + 1, meshCountHint)); } XA_PROFILE_START(addMeshCopyData) @@ -8804,7 +9216,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH return AddMeshError::Success; } -void AddMeshJoin(Atlas *atlas) { +void AddMeshJoin(Atlas *atlas) +{ XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddMeshJoin: atlas is null.\n"); @@ -8847,7 +9260,8 @@ void AddMeshJoin(Atlas *atlas) { } } -AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) { +AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) +{ XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddUvMesh: atlas is null.\n"); @@ -8948,7 +9362,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) { return AddMeshError::Success; } -void ComputeCharts(Atlas *atlas, ChartOptions options) { +void ComputeCharts(Atlas *atlas, ChartOptions options) +{ if (!atlas) { XA_PRINT_WARNING("ComputeCharts: atlas is null.\n"); return; @@ -9136,7 +9551,8 @@ void ComputeCharts(Atlas *atlas, ChartOptions options) { XA_PRINT_MEM_USAGE } -void PackCharts(Atlas *atlas, PackOptions packOptions) { +void PackCharts(Atlas *atlas, PackOptions packOptions) +{ // Validate arguments and context state. if (!atlas) { XA_PRINT_WARNING("PackCharts: atlas is null.\n"); @@ -9177,7 +9593,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) { if (!ctx->uvMeshInstances.isEmpty()) { for (uint32_t i = 0; i < ctx->uvMeshInstances.size(); i++) packAtlas.addUvMeshCharts(ctx->uvMeshInstances[i]); - } else + } + else packAtlas.addCharts(ctx->taskScheduler, &ctx->paramAtlas); XA_PROFILE_END(packChartsAddCharts) XA_PROFILE_START(packCharts) @@ -9455,7 +9872,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) { XA_PRINT_MEM_USAGE } -void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) { +void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) +{ if (!atlas) { XA_PRINT_WARNING("Generate: atlas is null.\n"); return; @@ -9469,7 +9887,8 @@ void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) PackCharts(atlas, packOptions); } -void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData) { +void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData) +{ if (!atlas) { XA_PRINT_WARNING("SetProgressCallback: atlas is null.\n"); return; @@ -9479,17 +9898,20 @@ void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progress ctx->progressUserData = progressUserData; } -void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc) { +void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc) +{ internal::s_realloc = reallocFunc; internal::s_free = freeFunc; } -void SetPrint(PrintFunc print, bool verbose) { +void SetPrint(PrintFunc print, bool verbose) +{ internal::s_print = print; internal::s_printVerbose = verbose; } -const char *StringForEnum(AddMeshError error) { +const char *StringForEnum(AddMeshError error) +{ if (error == AddMeshError::Error) return "Unspecified error"; if (error == AddMeshError::IndexOutOfRange) @@ -9501,7 +9923,8 @@ const char *StringForEnum(AddMeshError error) { return "Success"; } -const char *StringForEnum(ProgressCategory category) { +const char *StringForEnum(ProgressCategory category) +{ if (category == ProgressCategory::AddMesh) return "Adding mesh(es)"; if (category == ProgressCategory::ComputeCharts) @@ -9529,76 +9952,93 @@ static_assert(sizeof(xatlas::PackOptions) == sizeof(xatlasPackOptions), "xatlasP extern "C" { #endif -xatlasAtlas *xatlasCreate() { +xatlasAtlas *xatlasCreate() +{ return (xatlasAtlas *)xatlas::Create(); } -void xatlasDestroy(xatlasAtlas *atlas) { +void xatlasDestroy(xatlasAtlas *atlas) +{ xatlas::Destroy((xatlas::Atlas *)atlas); } -xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint) { +xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint) +{ return (xatlasAddMeshError)xatlas::AddMesh((xatlas::Atlas *)atlas, *(const xatlas::MeshDecl *)meshDecl, meshCountHint); } -void xatlasAddMeshJoin(xatlasAtlas *atlas) { +void xatlasAddMeshJoin(xatlasAtlas *atlas) +{ xatlas::AddMeshJoin((xatlas::Atlas *)atlas); } -xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl) { +xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl) +{ return (xatlasAddMeshError)xatlas::AddUvMesh((xatlas::Atlas *)atlas, *(const xatlas::UvMeshDecl *)decl); } -void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions) { +void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions) +{ xatlas::ComputeCharts((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions()); } -void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions) { +void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions) +{ xatlas::PackCharts((xatlas::Atlas *)atlas, packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions()); } -void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions) { +void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions) +{ xatlas::Generate((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions(), packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions()); } -void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData) { +void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData) +{ xatlas::ProgressFunc pf; *(void **)&pf = (void *)progressFunc; xatlas::SetProgressCallback((xatlas::Atlas *)atlas, pf, progressUserData); } -void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc) { +void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc) +{ xatlas::SetAlloc((xatlas::ReallocFunc)reallocFunc, (xatlas::FreeFunc)freeFunc); } -void xatlasSetPrint(xatlasPrintFunc print, bool verbose) { +void xatlasSetPrint(xatlasPrintFunc print, bool verbose) +{ xatlas::SetPrint((xatlas::PrintFunc)print, verbose); } -const char *xatlasAddMeshErrorString(xatlasAddMeshError error) { +const char *xatlasAddMeshErrorString(xatlasAddMeshError error) +{ return xatlas::StringForEnum((xatlas::AddMeshError)error); } -const char *xatlasProgressCategoryString(xatlasProgressCategory category) { +const char *xatlasProgressCategoryString(xatlasProgressCategory category) +{ return xatlas::StringForEnum((xatlas::ProgressCategory)category); } -void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl) { +void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl) +{ xatlas::MeshDecl init; memcpy(meshDecl, &init, sizeof(init)); } -void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl) { +void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl) +{ xatlas::UvMeshDecl init; memcpy(uvMeshDecl, &init, sizeof(init)); } -void xatlasChartOptionsInit(xatlasChartOptions *chartOptions) { +void xatlasChartOptionsInit(xatlasChartOptions *chartOptions) +{ xatlas::ChartOptions init; memcpy(chartOptions, &init, sizeof(init)); } -void xatlasPackOptionsInit(xatlasPackOptions *packOptions) { +void xatlasPackOptionsInit(xatlasPackOptions *packOptions) +{ xatlas::PackOptions init; memcpy(packOptions, &init, sizeof(init)); } diff --git a/thirdparty/xatlas/xatlas.h b/thirdparty/xatlas/xatlas.h index fc40d9d49c..d66a96db21 100644 --- a/thirdparty/xatlas/xatlas.h +++ b/thirdparty/xatlas/xatlas.h @@ -36,7 +36,8 @@ Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com> namespace xatlas { -enum class ChartType { +enum class ChartType +{ Planar, Ortho, LSCM, @@ -45,7 +46,8 @@ enum class ChartType { }; // A group of connected faces, belonging to a single atlas. -struct Chart { +struct Chart +{ uint32_t *faceArray; uint32_t atlasIndex; // Sub-atlas index. uint32_t faceCount; @@ -54,7 +56,8 @@ struct Chart { }; // Output vertex. -struct Vertex { +struct Vertex +{ int32_t atlasIndex; // Sub-atlas index. -1 if the vertex doesn't exist in any atlas. int32_t chartIndex; // -1 if the vertex doesn't exist in any chart. float uv[2]; // Not normalized - values are in Atlas width and height range. @@ -62,7 +65,8 @@ struct Vertex { }; // Output mesh. -struct Mesh { +struct Mesh +{ Chart *chartArray; uint32_t *indexArray; Vertex *vertexArray; @@ -77,7 +81,8 @@ static const uint32_t kImageIsBilinearBit = 0x40000000; static const uint32_t kImageIsPaddingBit = 0x20000000; // Empty on creation. Populated after charts are packed. -struct Atlas { +struct Atlas +{ uint32_t *image; Mesh *meshes; // The output meshes, corresponding to each AddMesh call. float *utilization; // Normalized atlas texel utilization array. E.g. a value of 0.8 means 20% empty space. atlasCount in length. @@ -94,13 +99,15 @@ Atlas *Create(); void Destroy(Atlas *atlas); -enum class IndexFormat { +enum class IndexFormat +{ UInt16, UInt32 }; // Input mesh declaration. -struct MeshDecl { +struct MeshDecl +{ const void *vertexPositionData = nullptr; const void *vertexNormalData = nullptr; // optional const void *vertexUvData = nullptr; // optional. The input UVs are provided as a hint to the chart generator. @@ -131,7 +138,8 @@ struct MeshDecl { float epsilon = 1.192092896e-07F; }; -enum class AddMeshError { +enum class AddMeshError +{ Success, // No error. Error, // Unspecified error. IndexOutOfRange, // An index is >= MeshDecl vertexCount. @@ -145,7 +153,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH // Wait for AddMesh async processing to finish. ComputeCharts / Generate call this internally. void AddMeshJoin(Atlas *atlas); -struct UvMeshDecl { +struct UvMeshDecl +{ const void *vertexUvData = nullptr; const void *indexData = nullptr; // optional const uint32_t *faceMaterialData = nullptr; // Optional. Overlapping UVs should be assigned a different material. Must be indexCount / 3 in length. @@ -161,7 +170,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl); // Custom parameterization function. texcoords initial values are an orthogonal parameterization. typedef void (*ParameterizeFunc)(const float *positions, float *texcoords, uint32_t vertexCount, const uint32_t *indices, uint32_t indexCount); -struct ChartOptions { +struct ChartOptions +{ ParameterizeFunc paramFunc = nullptr; float maxChartArea = 0.0f; // Don't grow charts to be larger than this. 0 means no limit. @@ -184,7 +194,8 @@ struct ChartOptions { // Call after all AddMesh calls. Can be called multiple times to recompute charts with different options. void ComputeCharts(Atlas *atlas, ChartOptions options = ChartOptions()); -struct PackOptions { +struct PackOptions +{ // Charts larger than this will be scaled down. 0 means no limit. uint32_t maxChartSize = 0; @@ -227,7 +238,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions = PackOptions()); void Generate(Atlas *atlas, ChartOptions chartOptions = ChartOptions(), PackOptions packOptions = PackOptions()); // Progress tracking. -enum class ProgressCategory { +enum class ProgressCategory +{ AddMesh, ComputeCharts, PackCharts, diff --git a/thirdparty/zstd/common/bitstream.h b/thirdparty/zstd/common/bitstream.h index d9a2730104..2e5a933ad3 100644 --- a/thirdparty/zstd/common/bitstream.h +++ b/thirdparty/zstd/common/bitstream.h @@ -1,7 +1,7 @@ /* ****************************************************************** * bitstream * Part of FSE library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/common/compiler.h b/thirdparty/zstd/common/compiler.h index 3e454f38c1..a951d0adea 100644 --- a/thirdparty/zstd/common/compiler.h +++ b/thirdparty/zstd/common/compiler.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -90,6 +90,7 @@ # endif #endif + /* target attribute */ #ifndef __has_attribute #define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ diff --git a/thirdparty/zstd/common/cpu.h b/thirdparty/zstd/common/cpu.h index cb210593ea..8acd33be3c 100644 --- a/thirdparty/zstd/common/cpu.h +++ b/thirdparty/zstd/common/cpu.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Facebook, Inc. + * Copyright (c) Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/debug.c b/thirdparty/zstd/common/debug.c index f303f4a2e5..bb863c9ea6 100644 --- a/thirdparty/zstd/common/debug.c +++ b/thirdparty/zstd/common/debug.c @@ -1,7 +1,7 @@ /* ****************************************************************** * debug * Part of FSE library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/common/debug.h b/thirdparty/zstd/common/debug.h index 8b5734366c..3b2a320a18 100644 --- a/thirdparty/zstd/common/debug.h +++ b/thirdparty/zstd/common/debug.h @@ -1,7 +1,7 @@ /* ****************************************************************** * debug * Part of FSE library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/common/entropy_common.c b/thirdparty/zstd/common/entropy_common.c index f9fcb1acfc..41cd69566b 100644 --- a/thirdparty/zstd/common/entropy_common.c +++ b/thirdparty/zstd/common/entropy_common.c @@ -1,6 +1,6 @@ /* ****************************************************************** * Common functions of New Generation Entropy library - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/common/error_private.c b/thirdparty/zstd/common/error_private.c index 45bba5305b..6d1135f8c3 100644 --- a/thirdparty/zstd/common/error_private.c +++ b/thirdparty/zstd/common/error_private.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/error_private.h b/thirdparty/zstd/common/error_private.h index 71b37b8dfa..6d8b9f7763 100644 --- a/thirdparty/zstd/common/error_private.h +++ b/thirdparty/zstd/common/error_private.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -21,8 +21,8 @@ extern "C" { /* **************************************** * Dependencies ******************************************/ -#include "zstd_deps.h" /* size_t */ -#include "zstd_errors.h" /* enum list */ +#include "../zstd_errors.h" /* enum list */ +#include "zstd_deps.h" /* size_t */ /* **************************************** diff --git a/thirdparty/zstd/common/fse.h b/thirdparty/zstd/common/fse.h index dd5fc44e80..19dd4febcd 100644 --- a/thirdparty/zstd/common/fse.h +++ b/thirdparty/zstd/common/fse.h @@ -1,7 +1,7 @@ /* ****************************************************************** * FSE : Finite State Entropy codec * Public Prototypes declaration - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy @@ -352,7 +352,7 @@ size_t FSE_buildDTable_raw (FSE_DTable* dt, unsigned nbBits); size_t FSE_buildDTable_rle (FSE_DTable* dt, unsigned char symbolValue); /**< build a fake FSE_DTable, designed to always generate the same symbolValue */ -#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue)) +#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) + (FSE_MAX_SYMBOL_VALUE + 1) / 2 + 1) #define FSE_DECOMPRESS_WKSP_SIZE(maxTableLog, maxSymbolValue) (FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(unsigned)) size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize); /**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DECOMPRESS_WKSP_SIZE_U32(maxLog, maxSymbolValue)` */ diff --git a/thirdparty/zstd/common/fse_decompress.c b/thirdparty/zstd/common/fse_decompress.c index c164430f99..f4ff58fa0a 100644 --- a/thirdparty/zstd/common/fse_decompress.c +++ b/thirdparty/zstd/common/fse_decompress.c @@ -1,6 +1,6 @@ /* ****************************************************************** * FSE : Finite State Entropy decoder - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy @@ -310,6 +310,12 @@ size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size return FSE_decompress_wksp_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, /* bmi2 */ 0); } +typedef struct { + short ncount[FSE_MAX_SYMBOL_VALUE + 1]; + FSE_DTable dtable[1]; /* Dynamically sized */ +} FSE_DecompressWksp; + + FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body( void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, @@ -318,33 +324,37 @@ FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body( { const BYTE* const istart = (const BYTE*)cSrc; const BYTE* ip = istart; - short counting[FSE_MAX_SYMBOL_VALUE+1]; unsigned tableLog; unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE; - FSE_DTable* const dtable = (FSE_DTable*)workSpace; + FSE_DecompressWksp* const wksp = (FSE_DecompressWksp*)workSpace; + + DEBUG_STATIC_ASSERT((FSE_MAX_SYMBOL_VALUE + 1) % 2 == 0); + if (wkspSize < sizeof(*wksp)) return ERROR(GENERIC); /* normal FSE decoding mode */ - size_t const NCountLength = FSE_readNCount_bmi2(counting, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2); - if (FSE_isError(NCountLength)) return NCountLength; - if (tableLog > maxLog) return ERROR(tableLog_tooLarge); - assert(NCountLength <= cSrcSize); - ip += NCountLength; - cSrcSize -= NCountLength; + { + size_t const NCountLength = FSE_readNCount_bmi2(wksp->ncount, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2); + if (FSE_isError(NCountLength)) return NCountLength; + if (tableLog > maxLog) return ERROR(tableLog_tooLarge); + assert(NCountLength <= cSrcSize); + ip += NCountLength; + cSrcSize -= NCountLength; + } if (FSE_DECOMPRESS_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(tableLog_tooLarge); - workSpace = dtable + FSE_DTABLE_SIZE_U32(tableLog); - wkspSize -= FSE_DTABLE_SIZE(tableLog); + workSpace = wksp->dtable + FSE_DTABLE_SIZE_U32(tableLog); + wkspSize -= sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog); - CHECK_F( FSE_buildDTable_internal(dtable, counting, maxSymbolValue, tableLog, workSpace, wkspSize) ); + CHECK_F( FSE_buildDTable_internal(wksp->dtable, wksp->ncount, maxSymbolValue, tableLog, workSpace, wkspSize) ); { - const void* ptr = dtable; + const void* ptr = wksp->dtable; const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr; const U32 fastMode = DTableH->fastMode; /* select fast mode (static) */ - if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 1); - return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 0); + if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 1); + return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 0); } } diff --git a/thirdparty/zstd/common/huf.h b/thirdparty/zstd/common/huf.h index 1afef90c7c..3d47ced030 100644 --- a/thirdparty/zstd/common/huf.h +++ b/thirdparty/zstd/common/huf.h @@ -1,7 +1,7 @@ /* ****************************************************************** * huff0 huffman codec, * part of Finite State Entropy library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy @@ -192,6 +192,7 @@ size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue); size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits); /* @return : maxNbBits; CTable and count can overlap. In which case, CTable will overwrite count content */ size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog); +size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, void* workspace, size_t workspaceSize); size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable); size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue); int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue); @@ -278,7 +279,7 @@ U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize); * a required workspace size greater than that specified in the following * macro. */ -#define HUF_DECOMPRESS_WORKSPACE_SIZE (2 << 10) +#define HUF_DECOMPRESS_WORKSPACE_SIZE ((2 << 10) + (1 << 9)) #define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32)) #ifndef HUF_FORCE_DECOMPRESS_X2 diff --git a/thirdparty/zstd/common/mem.h b/thirdparty/zstd/common/mem.h index 4728ef767b..9f3b81ab9d 100644 --- a/thirdparty/zstd/common/mem.h +++ b/thirdparty/zstd/common/mem.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -143,9 +143,7 @@ MEM_STATIC size_t MEM_swapST(size_t in); * Prefer these methods in priority order (0 > 1 > 2) */ #ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ -# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) -# define MEM_FORCE_MEMORY_ACCESS 2 -# elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__) +# if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__) # define MEM_FORCE_MEMORY_ACCESS 1 # endif #endif @@ -308,7 +306,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val) MEM_STATIC U32 MEM_readLE24(const void* memPtr) { - return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16); + return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16); } MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val) diff --git a/thirdparty/zstd/common/pool.c b/thirdparty/zstd/common/pool.c index 4c1b83376f..ea70b8b65a 100644 --- a/thirdparty/zstd/common/pool.c +++ b/thirdparty/zstd/common/pool.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/pool.h b/thirdparty/zstd/common/pool.h index 63954ca6ca..e18aa0708f 100644 --- a/thirdparty/zstd/common/pool.h +++ b/thirdparty/zstd/common/pool.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/xxhash.c b/thirdparty/zstd/common/xxhash.c index e708df3c33..926b33604e 100644 --- a/thirdparty/zstd/common/xxhash.c +++ b/thirdparty/zstd/common/xxhash.c @@ -1,6 +1,6 @@ /* * xxHash - Fast Hash algorithm - * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - xxHash homepage: http://www.xxhash.com @@ -30,9 +30,7 @@ * Prefer these methods in priority order (0 > 1 > 2) */ #ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ -# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) -# define XXH_FORCE_MEMORY_ACCESS 2 -# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \ +# if (defined(__INTEL_COMPILER) && !defined(WIN32)) || \ (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) || \ defined(__ICCARM__) # define XXH_FORCE_MEMORY_ACCESS 1 diff --git a/thirdparty/zstd/common/xxhash.h b/thirdparty/zstd/common/xxhash.h index eceb55d5e0..16c1f1617b 100644 --- a/thirdparty/zstd/common/xxhash.h +++ b/thirdparty/zstd/common/xxhash.h @@ -1,7 +1,7 @@ /* * xxHash - Extremely Fast Hash algorithm * Header File - * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - xxHash source repository : https://github.com/Cyan4973/xxHash diff --git a/thirdparty/zstd/common/zstd_common.c b/thirdparty/zstd/common/zstd_common.c index 939e9f08fa..3d7e35b309 100644 --- a/thirdparty/zstd/common/zstd_common.c +++ b/thirdparty/zstd/common/zstd_common.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/zstd_deps.h b/thirdparty/zstd/common/zstd_deps.h index 0fb8b7818b..14211344a0 100644 --- a/thirdparty/zstd/common/zstd_deps.h +++ b/thirdparty/zstd/common/zstd_deps.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Facebook, Inc. + * Copyright (c) Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/common/zstd_internal.h b/thirdparty/zstd/common/zstd_internal.h index 0991f20a08..68252e987e 100644 --- a/thirdparty/zstd/common/zstd_internal.h +++ b/thirdparty/zstd/common/zstd_internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -36,6 +36,11 @@ # define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */ #endif #include "xxhash.h" /* XXH_reset, update, digest */ +#ifndef ZSTD_NO_TRACE +# include "zstd_trace.h" +#else +# define ZSTD_TRACE 0 +#endif #if defined (__cplusplus) extern "C" { @@ -347,11 +352,18 @@ typedef enum { * Private declarations *********************************************/ typedef struct seqDef_s { - U32 offset; /* Offset code of the sequence */ + U32 offset; /* offset == rawOffset + ZSTD_REP_NUM, or equivalently, offCode + 1 */ U16 litLength; U16 matchLength; } seqDef; +/* Controls whether seqStore has a single "long" litLength or matchLength. See seqStore_t. */ +typedef enum { + ZSTD_llt_none = 0, /* no longLengthType */ + ZSTD_llt_literalLength = 1, /* represents a long literal */ + ZSTD_llt_matchLength = 2 /* represents a long match */ +} ZSTD_longLengthType_e; + typedef struct { seqDef* sequencesStart; seqDef* sequences; /* ptr to end of sequences */ @@ -363,12 +375,12 @@ typedef struct { size_t maxNbSeq; size_t maxNbLit; - /* longLengthPos and longLengthID to allow us to represent either a single litLength or matchLength + /* longLengthPos and longLengthType to allow us to represent either a single litLength or matchLength * in the seqStore that has a value larger than U16 (if it exists). To do so, we increment - * the existing value of the litLength or matchLength by 0x10000. + * the existing value of the litLength or matchLength by 0x10000. */ - U32 longLengthID; /* 0 == no longLength; 1 == Represent the long literal; 2 == Represent the long match; */ - U32 longLengthPos; /* Index of the sequence to apply long length modification to */ + ZSTD_longLengthType_e longLengthType; + U32 longLengthPos; /* Index of the sequence to apply long length modification to */ } seqStore_t; typedef struct { @@ -378,7 +390,7 @@ typedef struct { /** * Returns the ZSTD_sequenceLength for the given sequences. It handles the decoding of long sequences - * indicated by longLengthPos and longLengthID, and adds MINMATCH back to matchLength. + * indicated by longLengthPos and longLengthType, and adds MINMATCH back to matchLength. */ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore, seqDef const* seq) { @@ -386,10 +398,10 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore seqLen.litLength = seq->litLength; seqLen.matchLength = seq->matchLength + MINMATCH; if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) { - if (seqStore->longLengthID == 1) { + if (seqStore->longLengthType == ZSTD_llt_literalLength) { seqLen.litLength += 0xFFFF; } - if (seqStore->longLengthID == 2) { + if (seqStore->longLengthType == ZSTD_llt_matchLength) { seqLen.matchLength += 0xFFFF; } } diff --git a/thirdparty/zstd/common/zstd_trace.h b/thirdparty/zstd/common/zstd_trace.h new file mode 100644 index 0000000000..2da5640771 --- /dev/null +++ b/thirdparty/zstd/common/zstd_trace.h @@ -0,0 +1,154 @@ +/* + * Copyright (c) Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_TRACE_H +#define ZSTD_TRACE_H + +#if defined (__cplusplus) +extern "C" { +#endif + +#include <stddef.h> + +/* weak symbol support */ +#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && defined(__GNUC__) && \ + !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \ + !defined(__CYGWIN__) +# define ZSTD_HAVE_WEAK_SYMBOLS 1 +#else +# define ZSTD_HAVE_WEAK_SYMBOLS 0 +#endif +#if ZSTD_HAVE_WEAK_SYMBOLS +# define ZSTD_WEAK_ATTR __attribute__((__weak__)) +#else +# define ZSTD_WEAK_ATTR +#endif + +/* Only enable tracing when weak symbols are available. */ +#ifndef ZSTD_TRACE +# define ZSTD_TRACE ZSTD_HAVE_WEAK_SYMBOLS +#endif + +#if ZSTD_TRACE + +struct ZSTD_CCtx_s; +struct ZSTD_DCtx_s; +struct ZSTD_CCtx_params_s; + +typedef struct { + /** + * ZSTD_VERSION_NUMBER + * + * This is guaranteed to be the first member of ZSTD_trace. + * Otherwise, this struct is not stable between versions. If + * the version number does not match your expectation, you + * should not interpret the rest of the struct. + */ + unsigned version; + /** + * Non-zero if streaming (de)compression is used. + */ + unsigned streaming; + /** + * The dictionary ID. + */ + unsigned dictionaryID; + /** + * Is the dictionary cold? + * Only set on decompression. + */ + unsigned dictionaryIsCold; + /** + * The dictionary size or zero if no dictionary. + */ + size_t dictionarySize; + /** + * The uncompressed size of the data. + */ + size_t uncompressedSize; + /** + * The compressed size of the data. + */ + size_t compressedSize; + /** + * The fully resolved CCtx parameters (NULL on decompression). + */ + struct ZSTD_CCtx_params_s const* params; + /** + * The ZSTD_CCtx pointer (NULL on decompression). + */ + struct ZSTD_CCtx_s const* cctx; + /** + * The ZSTD_DCtx pointer (NULL on compression). + */ + struct ZSTD_DCtx_s const* dctx; +} ZSTD_Trace; + +/** + * A tracing context. It must be 0 when tracing is disabled. + * Otherwise, any non-zero value returned by a tracing begin() + * function is presented to any subsequent calls to end(). + * + * Any non-zero value is treated as tracing is enabled and not + * interpreted by the library. + * + * Two possible uses are: + * * A timestamp for when the begin() function was called. + * * A unique key identifying the (de)compression, like the + * address of the [dc]ctx pointer if you need to track + * more information than just a timestamp. + */ +typedef unsigned long long ZSTD_TraceCtx; + +/** + * Trace the beginning of a compression call. + * @param cctx The dctx pointer for the compression. + * It can be used as a key to map begin() to end(). + * @returns Non-zero if tracing is enabled. The return value is + * passed to ZSTD_trace_compress_end(). + */ +ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_compress_begin( + struct ZSTD_CCtx_s const* cctx); + +/** + * Trace the end of a compression call. + * @param ctx The return value of ZSTD_trace_compress_begin(). + * @param trace The zstd tracing info. + */ +ZSTD_WEAK_ATTR void ZSTD_trace_compress_end( + ZSTD_TraceCtx ctx, + ZSTD_Trace const* trace); + +/** + * Trace the beginning of a decompression call. + * @param dctx The dctx pointer for the decompression. + * It can be used as a key to map begin() to end(). + * @returns Non-zero if tracing is enabled. The return value is + * passed to ZSTD_trace_compress_end(). + */ +ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_decompress_begin( + struct ZSTD_DCtx_s const* dctx); + +/** + * Trace the end of a decompression call. + * @param ctx The return value of ZSTD_trace_decompress_begin(). + * @param trace The zstd tracing info. + */ +ZSTD_WEAK_ATTR void ZSTD_trace_decompress_end( + ZSTD_TraceCtx ctx, + ZSTD_Trace const* trace); + +#endif /* ZSTD_TRACE */ + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_TRACE_H */ diff --git a/thirdparty/zstd/compress/fse_compress.c b/thirdparty/zstd/compress/fse_compress.c index 304a82b3cc..b4297ec88a 100644 --- a/thirdparty/zstd/compress/fse_compress.c +++ b/thirdparty/zstd/compress/fse_compress.c @@ -1,6 +1,6 @@ /* ****************************************************************** * FSE : Finite State Entropy encoder - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/compress/hist.c b/thirdparty/zstd/compress/hist.c index a9659d11ad..073c57e752 100644 --- a/thirdparty/zstd/compress/hist.c +++ b/thirdparty/zstd/compress/hist.c @@ -1,7 +1,7 @@ /* ****************************************************************** * hist : Histogram functions * part of Finite State Entropy project - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/compress/hist.h b/thirdparty/zstd/compress/hist.h index fb9ead6834..228ed48a71 100644 --- a/thirdparty/zstd/compress/hist.h +++ b/thirdparty/zstd/compress/hist.h @@ -1,7 +1,7 @@ /* ****************************************************************** * hist : Histogram functions * part of Finite State Entropy project - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy diff --git a/thirdparty/zstd/compress/huf_compress.c b/thirdparty/zstd/compress/huf_compress.c index 302e08864d..485906e678 100644 --- a/thirdparty/zstd/compress/huf_compress.c +++ b/thirdparty/zstd/compress/huf_compress.c @@ -1,6 +1,6 @@ /* ****************************************************************** * Huffman encoder, part of New Generation Entropy library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy @@ -59,7 +59,15 @@ unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxS * Note : all elements within weightTable are supposed to be <= HUF_TABLELOG_MAX. */ #define MAX_FSE_TABLELOG_FOR_HUFF_HEADER 6 -static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weightTable, size_t wtSize) + +typedef struct { + FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)]; + U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)]; + unsigned count[HUF_TABLELOG_MAX+1]; + S16 norm[HUF_TABLELOG_MAX+1]; +} HUF_CompressWeightsWksp; + +static size_t HUF_compressWeights(void* dst, size_t dstSize, const void* weightTable, size_t wtSize, void* workspace, size_t workspaceSize) { BYTE* const ostart = (BYTE*) dst; BYTE* op = ostart; @@ -67,33 +75,30 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight unsigned maxSymbolValue = HUF_TABLELOG_MAX; U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER; + HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)workspace; - FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)]; - U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)]; - - unsigned count[HUF_TABLELOG_MAX+1]; - S16 norm[HUF_TABLELOG_MAX+1]; + if (workspaceSize < sizeof(HUF_CompressWeightsWksp)) return ERROR(GENERIC); /* init conditions */ if (wtSize <= 1) return 0; /* Not compressible */ /* Scan input and build symbol stats */ - { unsigned const maxCount = HIST_count_simple(count, &maxSymbolValue, weightTable, wtSize); /* never fails */ + { unsigned const maxCount = HIST_count_simple(wksp->count, &maxSymbolValue, weightTable, wtSize); /* never fails */ if (maxCount == wtSize) return 1; /* only a single symbol in src : rle */ if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */ } tableLog = FSE_optimalTableLog(tableLog, wtSize, maxSymbolValue); - CHECK_F( FSE_normalizeCount(norm, tableLog, count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) ); + CHECK_F( FSE_normalizeCount(wksp->norm, tableLog, wksp->count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) ); /* Write table description header */ - { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), norm, maxSymbolValue, tableLog) ); + { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), wksp->norm, maxSymbolValue, tableLog) ); op += hSize; } /* Compress */ - CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, sizeof(scratchBuffer)) ); - { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, CTable) ); + CHECK_F( FSE_buildCTable_wksp(wksp->CTable, wksp->norm, maxSymbolValue, tableLog, wksp->scratchBuffer, sizeof(wksp->scratchBuffer)) ); + { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, wksp->CTable) ); if (cSize == 0) return 0; /* not enough space for compressed data */ op += cSize; } @@ -102,29 +107,33 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight } -/*! HUF_writeCTable() : - `CTable` : Huffman tree to save, using huf representation. - @return : size of saved CTable */ -size_t HUF_writeCTable (void* dst, size_t maxDstSize, - const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog) -{ +typedef struct { + HUF_CompressWeightsWksp wksp; BYTE bitsToWeight[HUF_TABLELOG_MAX + 1]; /* precomputed conversion table */ BYTE huffWeight[HUF_SYMBOLVALUE_MAX]; +} HUF_WriteCTableWksp; + +size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, + const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, + void* workspace, size_t workspaceSize) +{ BYTE* op = (BYTE*)dst; U32 n; + HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)workspace; - /* check conditions */ + /* check conditions */ + if (workspaceSize < sizeof(HUF_WriteCTableWksp)) return ERROR(GENERIC); if (maxSymbolValue > HUF_SYMBOLVALUE_MAX) return ERROR(maxSymbolValue_tooLarge); /* convert to weight */ - bitsToWeight[0] = 0; + wksp->bitsToWeight[0] = 0; for (n=1; n<huffLog+1; n++) - bitsToWeight[n] = (BYTE)(huffLog + 1 - n); + wksp->bitsToWeight[n] = (BYTE)(huffLog + 1 - n); for (n=0; n<maxSymbolValue; n++) - huffWeight[n] = bitsToWeight[CTable[n].nbBits]; + wksp->huffWeight[n] = wksp->bitsToWeight[CTable[n].nbBits]; /* attempt weights compression by FSE */ - { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, huffWeight, maxSymbolValue) ); + { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, wksp->huffWeight, maxSymbolValue, &wksp->wksp, sizeof(wksp->wksp)) ); if ((hSize>1) & (hSize < maxSymbolValue/2)) { /* FSE compressed */ op[0] = (BYTE)hSize; return hSize+1; @@ -134,12 +143,22 @@ size_t HUF_writeCTable (void* dst, size_t maxDstSize, if (maxSymbolValue > (256-128)) return ERROR(GENERIC); /* should not happen : likely means source cannot be compressed */ if (((maxSymbolValue+1)/2) + 1 > maxDstSize) return ERROR(dstSize_tooSmall); /* not enough space within dst buffer */ op[0] = (BYTE)(128 /*special case*/ + (maxSymbolValue-1)); - huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */ + wksp->huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */ for (n=0; n<maxSymbolValue; n+=2) - op[(n/2)+1] = (BYTE)((huffWeight[n] << 4) + huffWeight[n+1]); + op[(n/2)+1] = (BYTE)((wksp->huffWeight[n] << 4) + wksp->huffWeight[n+1]); return ((maxSymbolValue+1)/2) + 1; } +/*! HUF_writeCTable() : + `CTable` : Huffman tree to save, using huf representation. + @return : size of saved CTable */ +size_t HUF_writeCTable (void* dst, size_t maxDstSize, + const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog) +{ + HUF_WriteCTableWksp wksp; + return HUF_writeCTable_wksp(dst, maxDstSize, CTable, maxSymbolValue, huffLog, &wksp, sizeof(wksp)); +} + size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned* hasZeroWeights) { @@ -732,7 +751,10 @@ static size_t HUF_compressCTable_internal( typedef struct { unsigned count[HUF_SYMBOLVALUE_MAX + 1]; HUF_CElt CTable[HUF_SYMBOLVALUE_MAX + 1]; - HUF_buildCTable_wksp_tables buildCTable_wksp; + union { + HUF_buildCTable_wksp_tables buildCTable_wksp; + HUF_WriteCTableWksp writeCTable_wksp; + } wksps; } HUF_compress_tables_t; /* HUF_compress_internal() : @@ -795,7 +817,7 @@ HUF_compress_internal (void* dst, size_t dstSize, huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue); { size_t const maxBits = HUF_buildCTable_wksp(table->CTable, table->count, maxSymbolValue, huffLog, - &table->buildCTable_wksp, sizeof(table->buildCTable_wksp)); + &table->wksps.buildCTable_wksp, sizeof(table->wksps.buildCTable_wksp)); CHECK_F(maxBits); huffLog = (U32)maxBits; /* Zero unused symbols in CTable, so we can check it for validity */ @@ -804,7 +826,8 @@ HUF_compress_internal (void* dst, size_t dstSize, } /* Write table description header */ - { CHECK_V_F(hSize, HUF_writeCTable (op, dstSize, table->CTable, maxSymbolValue, huffLog) ); + { CHECK_V_F(hSize, HUF_writeCTable_wksp(op, dstSize, table->CTable, maxSymbolValue, huffLog, + &table->wksps.writeCTable_wksp, sizeof(table->wksps.writeCTable_wksp)) ); /* Check if using previous huffman table is beneficial */ if (repeat && *repeat != HUF_repeat_none) { size_t const oldSize = HUF_estimateCompressedSize(oldHufTable, table->count, maxSymbolValue); diff --git a/thirdparty/zstd/compress/zstd_compress.c b/thirdparty/zstd/compress/zstd_compress.c index 386b051df6..b7ee2980a7 100644 --- a/thirdparty/zstd/compress/zstd_compress.c +++ b/thirdparty/zstd/compress/zstd_compress.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -72,6 +72,10 @@ struct ZSTD_CDict_s { ZSTD_customMem customMem; U32 dictID; int compressionLevel; /* 0 indicates that advanced API was used to select CDict params */ + ZSTD_useRowMatchFinderMode_e useRowMatchFinder; /* Indicates whether the CDict was created with params that would use + * row-based matchfinder. Unless the cdict is reloaded, we will use + * the same greedy/lazy matchfinder at compression time. + */ }; /* typedef'd to ZSTD_CDict within "zstd.h" */ ZSTD_CCtx* ZSTD_createCCtx(void) @@ -202,6 +206,49 @@ size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs) /* private API call, for dictBuilder only */ const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx) { return &(ctx->seqStore); } +/* Returns true if the strategy supports using a row based matchfinder */ +static int ZSTD_rowMatchFinderSupported(const ZSTD_strategy strategy) { + return (strategy >= ZSTD_greedy && strategy <= ZSTD_lazy2); +} + +/* Returns true if the strategy and useRowMatchFinder mode indicate that we will use the row based matchfinder + * for this compression. + */ +static int ZSTD_rowMatchFinderUsed(const ZSTD_strategy strategy, const ZSTD_useRowMatchFinderMode_e mode) { + assert(mode != ZSTD_urm_auto); + return ZSTD_rowMatchFinderSupported(strategy) && (mode == ZSTD_urm_enableRowMatchFinder); +} + +/* Returns row matchfinder usage enum given an initial mode and cParams */ +static ZSTD_useRowMatchFinderMode_e ZSTD_resolveRowMatchFinderMode(ZSTD_useRowMatchFinderMode_e mode, + const ZSTD_compressionParameters* const cParams) { +#if !defined(ZSTD_NO_INTRINSICS) && (defined(__SSE2__) || defined(__ARM_NEON)) + int const kHasSIMD128 = 1; +#else + int const kHasSIMD128 = 0; +#endif + if (mode != ZSTD_urm_auto) return mode; /* if requested enabled, but no SIMD, we still will use row matchfinder */ + mode = ZSTD_urm_disableRowMatchFinder; + if (!ZSTD_rowMatchFinderSupported(cParams->strategy)) return mode; + if (kHasSIMD128) { + if (cParams->windowLog > 14) mode = ZSTD_urm_enableRowMatchFinder; + } else { + if (cParams->windowLog > 17) mode = ZSTD_urm_enableRowMatchFinder; + } + return mode; +} + +/* Returns 1 if the arguments indicate that we should allocate a chainTable, 0 otherwise */ +static int ZSTD_allocateChainTable(const ZSTD_strategy strategy, + const ZSTD_useRowMatchFinderMode_e useRowMatchFinder, + const U32 forDDSDict) { + assert(useRowMatchFinder != ZSTD_urm_auto); + /* We always should allocate a chaintable if we are allocating a matchstate for a DDS dictionary matchstate. + * We do not allocate a chaintable if we are using ZSTD_fast, or are using the row-based matchfinder. + */ + return forDDSDict || ((strategy != ZSTD_fast) && !ZSTD_rowMatchFinderUsed(strategy, useRowMatchFinder)); +} + /* Returns 1 if compression parameters are such that we should * enable long distance matching (wlog >= 27, strategy >= btopt). * Returns 0 otherwise. @@ -210,6 +257,14 @@ static U32 ZSTD_CParams_shouldEnableLdm(const ZSTD_compressionParameters* const return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 27; } +/* Returns 1 if compression parameters are such that we should + * enable blockSplitter (wlog >= 17, strategy >= btopt). + * Returns 0 otherwise. + */ +static U32 ZSTD_CParams_useBlockSplitter(const ZSTD_compressionParameters* const cParams) { + return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 17; +} + static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams( ZSTD_compressionParameters cParams) { @@ -218,6 +273,7 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams( ZSTD_CCtxParams_init(&cctxParams, ZSTD_CLEVEL_DEFAULT); cctxParams.cParams = cParams; + /* Adjust advanced params according to cParams */ if (ZSTD_CParams_shouldEnableLdm(&cParams)) { DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including LDM into cctx params"); cctxParams.ldmParams.enableLdm = 1; @@ -227,6 +283,12 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams( assert(cctxParams.ldmParams.hashRateLog < 32); } + if (ZSTD_CParams_useBlockSplitter(&cParams)) { + DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including block splitting into cctx params"); + cctxParams.splitBlocks = 1; + } + + cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams); assert(!ZSTD_checkCParams(cParams)); return cctxParams; } @@ -269,29 +331,48 @@ size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel) return 0; } +#define ZSTD_NO_CLEVEL 0 + +/** + * Initializes the cctxParams from params and compressionLevel. + * @param compressionLevel If params are derived from a compression level then that compression level, otherwise ZSTD_NO_CLEVEL. + */ +static void ZSTD_CCtxParams_init_internal(ZSTD_CCtx_params* cctxParams, ZSTD_parameters const* params, int compressionLevel) +{ + assert(!ZSTD_checkCParams(params->cParams)); + ZSTD_memset(cctxParams, 0, sizeof(*cctxParams)); + cctxParams->cParams = params->cParams; + cctxParams->fParams = params->fParams; + /* Should not matter, as all cParams are presumed properly defined. + * But, set it for tracing anyway. + */ + cctxParams->compressionLevel = compressionLevel; + cctxParams->useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams->useRowMatchFinder, ¶ms->cParams); + DEBUGLOG(4, "ZSTD_CCtxParams_init_internal: useRowMatchFinder=%d", cctxParams->useRowMatchFinder); +} + size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params) { RETURN_ERROR_IF(!cctxParams, GENERIC, "NULL pointer!"); FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , ""); - ZSTD_memset(cctxParams, 0, sizeof(*cctxParams)); - assert(!ZSTD_checkCParams(params.cParams)); - cctxParams->cParams = params.cParams; - cctxParams->fParams = params.fParams; - cctxParams->compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */ + ZSTD_CCtxParams_init_internal(cctxParams, ¶ms, ZSTD_NO_CLEVEL); return 0; } -/* ZSTD_assignParamsToCCtxParams() : - * params is presumed valid at this stage */ -static ZSTD_CCtx_params ZSTD_assignParamsToCCtxParams( - const ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params) +/** + * Sets cctxParams' cParams and fParams from params, but otherwise leaves them alone. + * @param param Validated zstd parameters. + */ +static void ZSTD_CCtxParams_setZstdParams( + ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params) { - ZSTD_CCtx_params ret = *cctxParams; assert(!ZSTD_checkCParams(params->cParams)); - ret.cParams = params->cParams; - ret.fParams = params->fParams; - ret.compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */ - return ret; + cctxParams->cParams = params->cParams; + cctxParams->fParams = params->fParams; + /* Should not matter, as all cParams are presumed properly defined. + * But, set it for tracing anyway. + */ + cctxParams->compressionLevel = ZSTD_NO_CLEVEL; } ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param) @@ -468,6 +549,21 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param) bounds.upperBound = 1; return bounds; + case ZSTD_c_splitBlocks: + bounds.lowerBound = 0; + bounds.upperBound = 1; + return bounds; + + case ZSTD_c_useRowMatchFinder: + bounds.lowerBound = (int)ZSTD_urm_auto; + bounds.upperBound = (int)ZSTD_urm_enableRowMatchFinder; + return bounds; + + case ZSTD_c_deterministicRefPrefix: + bounds.lowerBound = 0; + bounds.upperBound = 1; + return bounds; + default: bounds.error = ERROR(parameter_unsupported); return bounds; @@ -529,6 +625,9 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param) case ZSTD_c_stableOutBuffer: case ZSTD_c_blockDelimiters: case ZSTD_c_validateSequences: + case ZSTD_c_splitBlocks: + case ZSTD_c_useRowMatchFinder: + case ZSTD_c_deterministicRefPrefix: default: return 0; } @@ -581,6 +680,9 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value) case ZSTD_c_stableOutBuffer: case ZSTD_c_blockDelimiters: case ZSTD_c_validateSequences: + case ZSTD_c_splitBlocks: + case ZSTD_c_useRowMatchFinder: + case ZSTD_c_deterministicRefPrefix: break; default: RETURN_ERROR(parameter_unsupported, "unknown parameter"); @@ -792,17 +894,32 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams, CCtxParams->validateSequences = value; return CCtxParams->validateSequences; + case ZSTD_c_splitBlocks: + BOUNDCHECK(ZSTD_c_splitBlocks, value); + CCtxParams->splitBlocks = value; + return CCtxParams->splitBlocks; + + case ZSTD_c_useRowMatchFinder: + BOUNDCHECK(ZSTD_c_useRowMatchFinder, value); + CCtxParams->useRowMatchFinder = (ZSTD_useRowMatchFinderMode_e)value; + return CCtxParams->useRowMatchFinder; + + case ZSTD_c_deterministicRefPrefix: + BOUNDCHECK(ZSTD_c_deterministicRefPrefix, value); + CCtxParams->deterministicRefPrefix = !!value; + return CCtxParams->deterministicRefPrefix; + default: RETURN_ERROR(parameter_unsupported, "unknown parameter"); } } -size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value) +size_t ZSTD_CCtx_getParameter(ZSTD_CCtx const* cctx, ZSTD_cParameter param, int* value) { return ZSTD_CCtxParams_getParameter(&cctx->requestedParams, param, value); } size_t ZSTD_CCtxParams_getParameter( - ZSTD_CCtx_params* CCtxParams, ZSTD_cParameter param, int* value) + ZSTD_CCtx_params const* CCtxParams, ZSTD_cParameter param, int* value) { switch(param) { @@ -915,6 +1032,15 @@ size_t ZSTD_CCtxParams_getParameter( case ZSTD_c_validateSequences : *value = (int)CCtxParams->validateSequences; break; + case ZSTD_c_splitBlocks : + *value = (int)CCtxParams->splitBlocks; + break; + case ZSTD_c_useRowMatchFinder : + *value = (int)CCtxParams->useRowMatchFinder; + break; + case ZSTD_c_deterministicRefPrefix: + *value = (int)CCtxParams->deterministicRefPrefix; + break; default: RETURN_ERROR(parameter_unsupported, "unknown parameter"); } return 0; @@ -1188,15 +1314,26 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar, const U64 maxWindowResize = 1ULL << (ZSTD_WINDOWLOG_MAX-1); assert(ZSTD_checkCParams(cPar)==0); - if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN) - srcSize = minSrcSize; - switch (mode) { - case ZSTD_cpm_noAttachDict: case ZSTD_cpm_unknown: + case ZSTD_cpm_noAttachDict: + /* If we don't know the source size, don't make any + * assumptions about it. We will already have selected + * smaller parameters if a dictionary is in use. + */ + break; case ZSTD_cpm_createCDict: + /* Assume a small source size when creating a dictionary + * with an unkown source size. + */ + if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN) + srcSize = minSrcSize; break; case ZSTD_cpm_attachDict: + /* Dictionary has its own dedicated parameters which have + * already been selected. We are selecting parameters + * for only the source. + */ dictSize = 0; break; default: @@ -1213,7 +1350,8 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar, ZSTD_highbit32(tSize-1) + 1; if (cPar.windowLog > srcLog) cPar.windowLog = srcLog; } - { U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize); + if (srcSize != ZSTD_CONTENTSIZE_UNKNOWN) { + U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize); U32 const cycleLog = ZSTD_cycleLog(cPar.chainLog, cPar.strategy); if (cPar.hashLog > dictAndWindowLog+1) cPar.hashLog = dictAndWindowLog+1; if (cycleLog > dictAndWindowLog) @@ -1269,9 +1407,14 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams( static size_t ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams, + const ZSTD_useRowMatchFinderMode_e useRowMatchFinder, + const U32 enableDedicatedDictSearch, const U32 forCCtx) { - size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog); + /* chain table size should be 0 for fast or row-hash strategies */ + size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder, enableDedicatedDictSearch && !forCCtx) + ? ((size_t)1 << cParams->chainLog) + : 0; size_t const hSize = ((size_t)1) << cParams->hashLog; U32 const hashLog3 = (forCCtx && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0; size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0; @@ -1281,24 +1424,34 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams, + hSize * sizeof(U32) + h3Size * sizeof(U32); size_t const optPotentialSpace = - ZSTD_cwksp_alloc_size((MaxML+1) * sizeof(U32)) - + ZSTD_cwksp_alloc_size((MaxLL+1) * sizeof(U32)) - + ZSTD_cwksp_alloc_size((MaxOff+1) * sizeof(U32)) - + ZSTD_cwksp_alloc_size((1<<Litbits) * sizeof(U32)) - + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t)) - + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t)); + ZSTD_cwksp_aligned_alloc_size((MaxML+1) * sizeof(U32)) + + ZSTD_cwksp_aligned_alloc_size((MaxLL+1) * sizeof(U32)) + + ZSTD_cwksp_aligned_alloc_size((MaxOff+1) * sizeof(U32)) + + ZSTD_cwksp_aligned_alloc_size((1<<Litbits) * sizeof(U32)) + + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t)) + + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t)); + size_t const lazyAdditionalSpace = ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder) + ? ZSTD_cwksp_aligned_alloc_size(hSize*sizeof(U16)) + : 0; size_t const optSpace = (forCCtx && (cParams->strategy >= ZSTD_btopt)) ? optPotentialSpace : 0; + size_t const slackSpace = ZSTD_cwksp_slack_space_required(); + + /* tables are guaranteed to be sized in multiples of 64 bytes (or 16 uint32_t) */ + ZSTD_STATIC_ASSERT(ZSTD_HASHLOG_MIN >= 4 && ZSTD_WINDOWLOG_MIN >= 4 && ZSTD_CHAINLOG_MIN >= 4); + assert(useRowMatchFinder != ZSTD_urm_auto); + DEBUGLOG(4, "chainSize: %u - hSize: %u - h3Size: %u", (U32)chainSize, (U32)hSize, (U32)h3Size); - return tableSpace + optSpace; + return tableSpace + optSpace + slackSpace + lazyAdditionalSpace; } static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal( const ZSTD_compressionParameters* cParams, const ldmParams_t* ldmParams, const int isStatic, + const ZSTD_useRowMatchFinderMode_e useRowMatchFinder, const size_t buffInSize, const size_t buffOutSize, const U64 pledgedSrcSize) @@ -1308,16 +1461,16 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal( U32 const divider = (cParams->minMatch==3) ? 3 : 4; size_t const maxNbSeq = blockSize / divider; size_t const tokenSpace = ZSTD_cwksp_alloc_size(WILDCOPY_OVERLENGTH + blockSize) - + ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(seqDef)) + + ZSTD_cwksp_aligned_alloc_size(maxNbSeq * sizeof(seqDef)) + 3 * ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(BYTE)); size_t const entropySpace = ZSTD_cwksp_alloc_size(ENTROPY_WORKSPACE_SIZE); size_t const blockStateSpace = 2 * ZSTD_cwksp_alloc_size(sizeof(ZSTD_compressedBlockState_t)); - size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, /* forCCtx */ 1); + size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 0, /* forCCtx */ 1); size_t const ldmSpace = ZSTD_ldm_getTableSize(*ldmParams); size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(*ldmParams, blockSize); size_t const ldmSeqSpace = ldmParams->enableLdm ? - ZSTD_cwksp_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0; + ZSTD_cwksp_aligned_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0; size_t const bufferSpace = ZSTD_cwksp_alloc_size(buffInSize) @@ -1343,25 +1496,45 @@ size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params) { ZSTD_compressionParameters const cParams = ZSTD_getCParamsFromCCtxParams(params, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict); + ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder, + &cParams); RETURN_ERROR_IF(params->nbWorkers > 0, GENERIC, "Estimate CCtx size is supported for single-threaded compression only."); /* estimateCCtxSize is for one-shot compression. So no buffers should * be needed. However, we still allocate two 0-sized buffers, which can * take space under ASAN. */ return ZSTD_estimateCCtxSize_usingCCtxParams_internal( - &cParams, ¶ms->ldmParams, 1, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN); + &cParams, ¶ms->ldmParams, 1, useRowMatchFinder, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN); } size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams) { - ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams); - return ZSTD_estimateCCtxSize_usingCCtxParams(¶ms); + ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams); + if (ZSTD_rowMatchFinderSupported(cParams.strategy)) { + /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */ + size_t noRowCCtxSize; + size_t rowCCtxSize; + initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder; + noRowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams); + initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder; + rowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams); + return MAX(noRowCCtxSize, rowCCtxSize); + } else { + return ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams); + } } static size_t ZSTD_estimateCCtxSize_internal(int compressionLevel) { - ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict); - return ZSTD_estimateCCtxSize_usingCParams(cParams); + int tier = 0; + size_t largestSize = 0; + static const unsigned long long srcSizeTiers[4] = {16 KB, 128 KB, 256 KB, ZSTD_CONTENTSIZE_UNKNOWN}; + for (; tier < 4; ++tier) { + /* Choose the set of cParams for a given level across all srcSizes that give the largest cctxSize */ + ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, srcSizeTiers[tier], 0, ZSTD_cpm_noAttachDict); + largestSize = MAX(ZSTD_estimateCCtxSize_usingCParams(cParams), largestSize); + } + return largestSize; } size_t ZSTD_estimateCCtxSize(int compressionLevel) @@ -1369,6 +1542,7 @@ size_t ZSTD_estimateCCtxSize(int compressionLevel) int level; size_t memBudget = 0; for (level=MIN(compressionLevel, 1); level<=compressionLevel; level++) { + /* Ensure monotonically increasing memory usage as compression level increases */ size_t const newMB = ZSTD_estimateCCtxSize_internal(level); if (newMB > memBudget) memBudget = newMB; } @@ -1387,17 +1561,29 @@ size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params) size_t const outBuffSize = (params->outBufferMode == ZSTD_bm_buffered) ? ZSTD_compressBound(blockSize) + 1 : 0; + ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder, ¶ms->cParams); return ZSTD_estimateCCtxSize_usingCCtxParams_internal( - &cParams, ¶ms->ldmParams, 1, inBuffSize, outBuffSize, + &cParams, ¶ms->ldmParams, 1, useRowMatchFinder, inBuffSize, outBuffSize, ZSTD_CONTENTSIZE_UNKNOWN); } } size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams) { - ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams); - return ZSTD_estimateCStreamSize_usingCCtxParams(¶ms); + ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams); + if (ZSTD_rowMatchFinderSupported(cParams.strategy)) { + /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */ + size_t noRowCCtxSize; + size_t rowCCtxSize; + initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder; + noRowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams); + initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder; + rowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams); + return MAX(noRowCCtxSize, rowCCtxSize); + } else { + return ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams); + } } static size_t ZSTD_estimateCStreamSize_internal(int compressionLevel) @@ -1522,20 +1708,27 @@ typedef enum { ZSTD_resetTarget_CCtx } ZSTD_resetTarget_e; + static size_t ZSTD_reset_matchState(ZSTD_matchState_t* ms, ZSTD_cwksp* ws, const ZSTD_compressionParameters* cParams, + const ZSTD_useRowMatchFinderMode_e useRowMatchFinder, const ZSTD_compResetPolicy_e crp, const ZSTD_indexResetPolicy_e forceResetIndex, const ZSTD_resetTarget_e forWho) { - size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog); + /* disable chain table allocation for fast or row-based strategies */ + size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder, + ms->dedicatedDictSearch && (forWho == ZSTD_resetTarget_CDict)) + ? ((size_t)1 << cParams->chainLog) + : 0; size_t const hSize = ((size_t)1) << cParams->hashLog; U32 const hashLog3 = ((forWho == ZSTD_resetTarget_CCtx) && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0; size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0; DEBUGLOG(4, "reset indices : %u", forceResetIndex == ZSTDirp_reset); + assert(useRowMatchFinder != ZSTD_urm_auto); if (forceResetIndex == ZSTDirp_reset) { ZSTD_window_init(&ms->window); ZSTD_cwksp_mark_tables_dirty(ws); @@ -1574,11 +1767,23 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms, ms->opt.priceTable = (ZSTD_optimal_t*)ZSTD_cwksp_reserve_aligned(ws, (ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t)); } + if (ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder)) { + { /* Row match finder needs an additional table of hashes ("tags") */ + size_t const tagTableSize = hSize*sizeof(U16); + ms->tagTable = (U16*)ZSTD_cwksp_reserve_aligned(ws, tagTableSize); + if (ms->tagTable) ZSTD_memset(ms->tagTable, 0, tagTableSize); + } + { /* Switch to 32-entry rows if searchLog is 5 (or more) */ + U32 const rowLog = cParams->searchLog < 5 ? 4 : 5; + assert(cParams->hashLog > rowLog); + ms->rowHashLog = cParams->hashLog - rowLog; + } + } + ms->cParams = *cParams; RETURN_ERROR_IF(ZSTD_cwksp_reserve_failed(ws), memory_allocation, "failed a workspace allocation in ZSTD_reset_matchState"); - return 0; } @@ -1595,62 +1800,85 @@ static int ZSTD_indexTooCloseToMax(ZSTD_window_t w) return (size_t)(w.nextSrc - w.base) > (ZSTD_CURRENT_MAX - ZSTD_INDEXOVERFLOW_MARGIN); } +/** ZSTD_dictTooBig(): + * When dictionaries are larger than ZSTD_CHUNKSIZE_MAX they can't be loaded in + * one go generically. So we ensure that in that case we reset the tables to zero, + * so that we can load as much of the dictionary as possible. + */ +static int ZSTD_dictTooBig(size_t const loadedDictSize) +{ + return loadedDictSize > ZSTD_CHUNKSIZE_MAX; +} + /*! ZSTD_resetCCtx_internal() : - note : `params` are assumed fully validated at this stage */ + * @param loadedDictSize The size of the dictionary to be loaded + * into the context, if any. If no dictionary is used, or the + * dictionary is being attached / copied, then pass 0. + * note : `params` are assumed fully validated at this stage. + */ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, - ZSTD_CCtx_params params, + ZSTD_CCtx_params const* params, U64 const pledgedSrcSize, + size_t const loadedDictSize, ZSTD_compResetPolicy_e const crp, ZSTD_buffered_policy_e const zbuff) { ZSTD_cwksp* const ws = &zc->workspace; - DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u", - (U32)pledgedSrcSize, params.cParams.windowLog); - assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams))); + DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u, useRowMatchFinder=%d", + (U32)pledgedSrcSize, params->cParams.windowLog, (int)params->useRowMatchFinder); + assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams))); zc->isFirstBlock = 1; - if (params.ldmParams.enableLdm) { + /* Set applied params early so we can modify them for LDM, + * and point params at the applied params. + */ + zc->appliedParams = *params; + params = &zc->appliedParams; + + assert(params->useRowMatchFinder != ZSTD_urm_auto); + if (params->ldmParams.enableLdm) { /* Adjust long distance matching parameters */ - ZSTD_ldm_adjustParameters(¶ms.ldmParams, ¶ms.cParams); - assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog); - assert(params.ldmParams.hashRateLog < 32); - zc->ldmState.hashPower = ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength); + ZSTD_ldm_adjustParameters(&zc->appliedParams.ldmParams, ¶ms->cParams); + assert(params->ldmParams.hashLog >= params->ldmParams.bucketSizeLog); + assert(params->ldmParams.hashRateLog < 32); } - { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize)); + { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params->cParams.windowLog), pledgedSrcSize)); size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize); - U32 const divider = (params.cParams.minMatch==3) ? 3 : 4; + U32 const divider = (params->cParams.minMatch==3) ? 3 : 4; size_t const maxNbSeq = blockSize / divider; - size_t const buffOutSize = (zbuff == ZSTDb_buffered && params.outBufferMode == ZSTD_bm_buffered) + size_t const buffOutSize = (zbuff == ZSTDb_buffered && params->outBufferMode == ZSTD_bm_buffered) ? ZSTD_compressBound(blockSize) + 1 : 0; - size_t const buffInSize = (zbuff == ZSTDb_buffered && params.inBufferMode == ZSTD_bm_buffered) + size_t const buffInSize = (zbuff == ZSTDb_buffered && params->inBufferMode == ZSTD_bm_buffered) ? windowSize + blockSize : 0; - size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params.ldmParams, blockSize); + size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params->ldmParams, blockSize); int const indexTooClose = ZSTD_indexTooCloseToMax(zc->blockState.matchState.window); + int const dictTooBig = ZSTD_dictTooBig(loadedDictSize); ZSTD_indexResetPolicy_e needsIndexReset = - (!indexTooClose && zc->initialized) ? ZSTDirp_continue : ZSTDirp_reset; + (indexTooClose || dictTooBig || !zc->initialized) ? ZSTDirp_reset : ZSTDirp_continue; size_t const neededSpace = ZSTD_estimateCCtxSize_usingCCtxParams_internal( - ¶ms.cParams, ¶ms.ldmParams, zc->staticSize != 0, + ¶ms->cParams, ¶ms->ldmParams, zc->staticSize != 0, params->useRowMatchFinder, buffInSize, buffOutSize, pledgedSrcSize); + int resizeWorkspace; + FORWARD_IF_ERROR(neededSpace, "cctx size estimate failed!"); if (!zc->staticSize) ZSTD_cwksp_bump_oversized_duration(ws, 0); - /* Check if workspace is large enough, alloc a new one if needed */ - { + { /* Check if workspace is large enough, alloc a new one if needed */ int const workspaceTooSmall = ZSTD_cwksp_sizeof(ws) < neededSpace; int const workspaceWasteful = ZSTD_cwksp_check_wasteful(ws, neededSpace); - + resizeWorkspace = workspaceTooSmall || workspaceWasteful; DEBUGLOG(4, "Need %zu B workspace", neededSpace); DEBUGLOG(4, "windowSize: %zu - blockSize: %zu", windowSize, blockSize); - if (workspaceTooSmall || workspaceWasteful) { + if (resizeWorkspace) { DEBUGLOG(4, "Resize workspaceSize from %zuKB to %zuKB", ZSTD_cwksp_sizeof(ws) >> 10, neededSpace >> 10); @@ -1678,8 +1906,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, ZSTD_cwksp_clear(ws); /* init params */ - zc->appliedParams = params; - zc->blockState.matchState.cParams = params.cParams; + zc->blockState.matchState.cParams = params->cParams; zc->pledgedSrcSizePlusOne = pledgedSrcSize+1; zc->consumedSrcSize = 0; zc->producedCSize = 0; @@ -1692,6 +1919,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, XXH64_reset(&zc->xxhState, 0); zc->stage = ZSTDcs_init; zc->dictID = 0; + zc->dictContentSize = 0; ZSTD_reset_compressedBlockState(zc->blockState.prevCBlock); @@ -1709,13 +1937,13 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, zc->outBuff = (char*)ZSTD_cwksp_reserve_buffer(ws, buffOutSize); /* ldm bucketOffsets table */ - if (params.ldmParams.enableLdm) { + if (params->ldmParams.enableLdm) { /* TODO: avoid memset? */ - size_t const ldmBucketSize = - ((size_t)1) << (params.ldmParams.hashLog - - params.ldmParams.bucketSizeLog); - zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, ldmBucketSize); - ZSTD_memset(zc->ldmState.bucketOffsets, 0, ldmBucketSize); + size_t const numBuckets = + ((size_t)1) << (params->ldmParams.hashLog - + params->ldmParams.bucketSizeLog); + zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, numBuckets); + ZSTD_memset(zc->ldmState.bucketOffsets, 0, numBuckets); } /* sequences storage */ @@ -1729,32 +1957,28 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, FORWARD_IF_ERROR(ZSTD_reset_matchState( &zc->blockState.matchState, ws, - ¶ms.cParams, + ¶ms->cParams, + params->useRowMatchFinder, crp, needsIndexReset, ZSTD_resetTarget_CCtx), ""); /* ldm hash table */ - if (params.ldmParams.enableLdm) { + if (params->ldmParams.enableLdm) { /* TODO: avoid memset? */ - size_t const ldmHSize = ((size_t)1) << params.ldmParams.hashLog; + size_t const ldmHSize = ((size_t)1) << params->ldmParams.hashLog; zc->ldmState.hashTable = (ldmEntry_t*)ZSTD_cwksp_reserve_aligned(ws, ldmHSize * sizeof(ldmEntry_t)); ZSTD_memset(zc->ldmState.hashTable, 0, ldmHSize * sizeof(ldmEntry_t)); zc->ldmSequences = (rawSeq*)ZSTD_cwksp_reserve_aligned(ws, maxNbLdmSeq * sizeof(rawSeq)); zc->maxNbLdmSequences = maxNbLdmSeq; ZSTD_window_init(&zc->ldmState.window); - ZSTD_window_clear(&zc->ldmState.window); zc->ldmState.loadedDictEnd = 0; } - /* Due to alignment, when reusing a workspace, we can actually consume - * up to 3 extra bytes for alignment. See the comments in zstd_cwksp.h - */ - assert(ZSTD_cwksp_used(ws) >= neededSpace && - ZSTD_cwksp_used(ws) <= neededSpace + 3); - + assert(ZSTD_cwksp_estimated_space_within_bounds(ws, neededSpace, resizeWorkspace)); DEBUGLOG(3, "wksp: finished allocating, %zd bytes remain available", ZSTD_cwksp_available_space(ws)); + zc->initialized = 1; return 0; @@ -1810,6 +2034,8 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx, U64 pledgedSrcSize, ZSTD_buffered_policy_e zbuff) { + DEBUGLOG(4, "ZSTD_resetCCtx_byAttachingCDict() pledgedSrcSize=%llu", + (unsigned long long)pledgedSrcSize); { ZSTD_compressionParameters adjusted_cdict_cParams = cdict->matchState.cParams; unsigned const windowLog = params.cParams.windowLog; @@ -1825,7 +2051,9 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx, params.cParams = ZSTD_adjustCParams_internal(adjusted_cdict_cParams, pledgedSrcSize, cdict->dictContentSize, ZSTD_cpm_attachDict); params.cParams.windowLog = windowLog; - FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize, + params.useRowMatchFinder = cdict->useRowMatchFinder; /* cdict overrides */ + FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, ¶ms, pledgedSrcSize, + /* loadedDictSize */ 0, ZSTDcrp_makeClean, zbuff), ""); assert(cctx->appliedParams.cParams.strategy == adjusted_cdict_cParams.strategy); } @@ -1852,6 +2080,7 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx, } } cctx->dictID = cdict->dictID; + cctx->dictContentSize = cdict->dictContentSize; /* copy block state */ ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState)); @@ -1868,15 +2097,17 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx, const ZSTD_compressionParameters *cdict_cParams = &cdict->matchState.cParams; assert(!cdict->matchState.dedicatedDictSearch); - - DEBUGLOG(4, "copying dictionary into context"); + DEBUGLOG(4, "ZSTD_resetCCtx_byCopyingCDict() pledgedSrcSize=%llu", + (unsigned long long)pledgedSrcSize); { unsigned const windowLog = params.cParams.windowLog; assert(windowLog != 0); /* Copy only compression parameters related to tables. */ params.cParams = *cdict_cParams; params.cParams.windowLog = windowLog; - FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize, + params.useRowMatchFinder = cdict->useRowMatchFinder; + FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, ¶ms, pledgedSrcSize, + /* loadedDictSize */ 0, ZSTDcrp_leaveDirty, zbuff), ""); assert(cctx->appliedParams.cParams.strategy == cdict_cParams->strategy); assert(cctx->appliedParams.cParams.hashLog == cdict_cParams->hashLog); @@ -1884,17 +2115,30 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx, } ZSTD_cwksp_mark_tables_dirty(&cctx->workspace); + assert(params.useRowMatchFinder != ZSTD_urm_auto); /* copy tables */ - { size_t const chainSize = (cdict_cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cdict_cParams->chainLog); + { size_t const chainSize = ZSTD_allocateChainTable(cdict_cParams->strategy, cdict->useRowMatchFinder, 0 /* DDS guaranteed disabled */) + ? ((size_t)1 << cdict_cParams->chainLog) + : 0; size_t const hSize = (size_t)1 << cdict_cParams->hashLog; ZSTD_memcpy(cctx->blockState.matchState.hashTable, cdict->matchState.hashTable, hSize * sizeof(U32)); - ZSTD_memcpy(cctx->blockState.matchState.chainTable, + /* Do not copy cdict's chainTable if cctx has parameters such that it would not use chainTable */ + if (ZSTD_allocateChainTable(cctx->appliedParams.cParams.strategy, cctx->appliedParams.useRowMatchFinder, 0 /* forDDSDict */)) { + ZSTD_memcpy(cctx->blockState.matchState.chainTable, cdict->matchState.chainTable, chainSize * sizeof(U32)); + } + /* copy tag table */ + if (ZSTD_rowMatchFinderUsed(cdict_cParams->strategy, cdict->useRowMatchFinder)) { + size_t const tagTableSize = hSize*sizeof(U16); + ZSTD_memcpy(cctx->blockState.matchState.tagTable, + cdict->matchState.tagTable, + tagTableSize); + } } /* Zero the hashTable3, since the cdict never fills it */ @@ -1915,6 +2159,7 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx, } cctx->dictID = cdict->dictID; + cctx->dictContentSize = cdict->dictContentSize; /* copy block state */ ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState)); @@ -1957,16 +2202,18 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx, U64 pledgedSrcSize, ZSTD_buffered_policy_e zbuff) { - DEBUGLOG(5, "ZSTD_copyCCtx_internal"); RETURN_ERROR_IF(srcCCtx->stage!=ZSTDcs_init, stage_wrong, "Can't copy a ctx that's not in init stage."); - + DEBUGLOG(5, "ZSTD_copyCCtx_internal"); ZSTD_memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem)); { ZSTD_CCtx_params params = dstCCtx->requestedParams; /* Copy only compression parameters related to tables. */ params.cParams = srcCCtx->appliedParams.cParams; + assert(srcCCtx->appliedParams.useRowMatchFinder != ZSTD_urm_auto); + params.useRowMatchFinder = srcCCtx->appliedParams.useRowMatchFinder; params.fParams = fParams; - ZSTD_resetCCtx_internal(dstCCtx, params, pledgedSrcSize, + ZSTD_resetCCtx_internal(dstCCtx, ¶ms, pledgedSrcSize, + /* loadedDictSize */ 0, ZSTDcrp_leaveDirty, zbuff); assert(dstCCtx->appliedParams.cParams.windowLog == srcCCtx->appliedParams.cParams.windowLog); assert(dstCCtx->appliedParams.cParams.strategy == srcCCtx->appliedParams.cParams.strategy); @@ -1978,7 +2225,11 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx, ZSTD_cwksp_mark_tables_dirty(&dstCCtx->workspace); /* copy tables */ - { size_t const chainSize = (srcCCtx->appliedParams.cParams.strategy == ZSTD_fast) ? 0 : ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog); + { size_t const chainSize = ZSTD_allocateChainTable(srcCCtx->appliedParams.cParams.strategy, + srcCCtx->appliedParams.useRowMatchFinder, + 0 /* forDDSDict */) + ? ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog) + : 0; size_t const hSize = (size_t)1 << srcCCtx->appliedParams.cParams.hashLog; int const h3log = srcCCtx->blockState.matchState.hashLog3; size_t const h3Size = h3log ? ((size_t)1 << h3log) : 0; @@ -2005,6 +2256,7 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx, dstMatchState->loadedDictEnd= srcMatchState->loadedDictEnd; } dstCCtx->dictID = srcCCtx->dictID; + dstCCtx->dictContentSize = srcCCtx->dictContentSize; /* copy block state */ ZSTD_memcpy(dstCCtx->blockState.prevCBlock, srcCCtx->blockState.prevCBlock, sizeof(*srcCCtx->blockState.prevCBlock)); @@ -2091,7 +2343,7 @@ static void ZSTD_reduceIndex (ZSTD_matchState_t* ms, ZSTD_CCtx_params const* par ZSTD_reduceTable(ms->hashTable, hSize, reducerValue); } - if (params->cParams.strategy != ZSTD_fast) { + if (ZSTD_allocateChainTable(params->cParams.strategy, params->useRowMatchFinder, (U32)ms->dedicatedDictSearch)) { U32 const chainSize = (U32)1 << params->cParams.chainLog; if (params->cParams.strategy == ZSTD_btlazy2) ZSTD_reduceTable_btlazy2(ms->chainTable, chainSize, reducerValue); @@ -2128,9 +2380,9 @@ void ZSTD_seqToCodes(const seqStore_t* seqStorePtr) ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offset); mlCodeTable[u] = (BYTE)ZSTD_MLcode(mlv); } - if (seqStorePtr->longLengthID==1) + if (seqStorePtr->longLengthType==ZSTD_llt_literalLength) llCodeTable[seqStorePtr->longLengthPos] = MaxLL; - if (seqStorePtr->longLengthID==2) + if (seqStorePtr->longLengthType==ZSTD_llt_matchLength) mlCodeTable[seqStorePtr->longLengthPos] = MaxML; } @@ -2144,10 +2396,158 @@ static int ZSTD_useTargetCBlockSize(const ZSTD_CCtx_params* cctxParams) return (cctxParams->targetCBlockSize != 0); } -/* ZSTD_entropyCompressSequences_internal(): - * actually compresses both literals and sequences */ +/* ZSTD_blockSplitterEnabled(): + * Returns if block splitting param is being used + * If used, compression will do best effort to split a block in order to improve compression ratio. + * Returns 1 if true, 0 otherwise. */ +static int ZSTD_blockSplitterEnabled(ZSTD_CCtx_params* cctxParams) +{ + DEBUGLOG(5, "ZSTD_blockSplitterEnabled(splitBlocks=%d)", cctxParams->splitBlocks); + return (cctxParams->splitBlocks != 0); +} + +/* Type returned by ZSTD_buildSequencesStatistics containing finalized symbol encoding types + * and size of the sequences statistics + */ +typedef struct { + U32 LLtype; + U32 Offtype; + U32 MLtype; + size_t size; + size_t lastCountSize; /* Accounts for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */ +} ZSTD_symbolEncodingTypeStats_t; + +/* ZSTD_buildSequencesStatistics(): + * Returns a ZSTD_symbolEncodingTypeStats_t, or a zstd error code in the `size` field. + * Modifies `nextEntropy` to have the appropriate values as a side effect. + * nbSeq must be greater than 0. + * + * entropyWkspSize must be of size at least ENTROPY_WORKSPACE_SIZE - (MaxSeq + 1)*sizeof(U32) + */ +static ZSTD_symbolEncodingTypeStats_t +ZSTD_buildSequencesStatistics(seqStore_t* seqStorePtr, size_t nbSeq, + const ZSTD_fseCTables_t* prevEntropy, ZSTD_fseCTables_t* nextEntropy, + BYTE* dst, const BYTE* const dstEnd, + ZSTD_strategy strategy, unsigned* countWorkspace, + void* entropyWorkspace, size_t entropyWkspSize) { + BYTE* const ostart = dst; + const BYTE* const oend = dstEnd; + BYTE* op = ostart; + FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable; + FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable; + FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable; + const BYTE* const ofCodeTable = seqStorePtr->ofCode; + const BYTE* const llCodeTable = seqStorePtr->llCode; + const BYTE* const mlCodeTable = seqStorePtr->mlCode; + ZSTD_symbolEncodingTypeStats_t stats; + + stats.lastCountSize = 0; + /* convert length/distances into codes */ + ZSTD_seqToCodes(seqStorePtr); + assert(op <= oend); + assert(nbSeq != 0); /* ZSTD_selectEncodingType() divides by nbSeq */ + /* build CTable for Literal Lengths */ + { unsigned max = MaxLL; + size_t const mostFrequent = HIST_countFast_wksp(countWorkspace, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ + DEBUGLOG(5, "Building LL table"); + nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode; + stats.LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode, + countWorkspace, max, mostFrequent, nbSeq, + LLFSELog, prevEntropy->litlengthCTable, + LL_defaultNorm, LL_defaultNormLog, + ZSTD_defaultAllowed, strategy); + assert(set_basic < set_compressed && set_rle < set_compressed); + assert(!(stats.LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ + { size_t const countSize = ZSTD_buildCTable( + op, (size_t)(oend - op), + CTable_LitLength, LLFSELog, (symbolEncodingType_e)stats.LLtype, + countWorkspace, max, llCodeTable, nbSeq, + LL_defaultNorm, LL_defaultNormLog, MaxLL, + prevEntropy->litlengthCTable, + sizeof(prevEntropy->litlengthCTable), + entropyWorkspace, entropyWkspSize); + if (ZSTD_isError(countSize)) { + DEBUGLOG(3, "ZSTD_buildCTable for LitLens failed"); + stats.size = countSize; + return stats; + } + if (stats.LLtype == set_compressed) + stats.lastCountSize = countSize; + op += countSize; + assert(op <= oend); + } } + /* build CTable for Offsets */ + { unsigned max = MaxOff; + size_t const mostFrequent = HIST_countFast_wksp( + countWorkspace, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ + /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */ + ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed; + DEBUGLOG(5, "Building OF table"); + nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode; + stats.Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode, + countWorkspace, max, mostFrequent, nbSeq, + OffFSELog, prevEntropy->offcodeCTable, + OF_defaultNorm, OF_defaultNormLog, + defaultPolicy, strategy); + assert(!(stats.Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */ + { size_t const countSize = ZSTD_buildCTable( + op, (size_t)(oend - op), + CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)stats.Offtype, + countWorkspace, max, ofCodeTable, nbSeq, + OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, + prevEntropy->offcodeCTable, + sizeof(prevEntropy->offcodeCTable), + entropyWorkspace, entropyWkspSize); + if (ZSTD_isError(countSize)) { + DEBUGLOG(3, "ZSTD_buildCTable for Offsets failed"); + stats.size = countSize; + return stats; + } + if (stats.Offtype == set_compressed) + stats.lastCountSize = countSize; + op += countSize; + assert(op <= oend); + } } + /* build CTable for MatchLengths */ + { unsigned max = MaxML; + size_t const mostFrequent = HIST_countFast_wksp( + countWorkspace, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ + DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op)); + nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode; + stats.MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode, + countWorkspace, max, mostFrequent, nbSeq, + MLFSELog, prevEntropy->matchlengthCTable, + ML_defaultNorm, ML_defaultNormLog, + ZSTD_defaultAllowed, strategy); + assert(!(stats.MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ + { size_t const countSize = ZSTD_buildCTable( + op, (size_t)(oend - op), + CTable_MatchLength, MLFSELog, (symbolEncodingType_e)stats.MLtype, + countWorkspace, max, mlCodeTable, nbSeq, + ML_defaultNorm, ML_defaultNormLog, MaxML, + prevEntropy->matchlengthCTable, + sizeof(prevEntropy->matchlengthCTable), + entropyWorkspace, entropyWkspSize); + if (ZSTD_isError(countSize)) { + DEBUGLOG(3, "ZSTD_buildCTable for MatchLengths failed"); + stats.size = countSize; + return stats; + } + if (stats.MLtype == set_compressed) + stats.lastCountSize = countSize; + op += countSize; + assert(op <= oend); + } } + stats.size = (size_t)(op-ostart); + return stats; +} + +/* ZSTD_entropyCompressSeqStore_internal(): + * compresses both literals and sequences + * Returns compressed size of block, or a zstd error. + */ MEM_STATIC size_t -ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr, +ZSTD_entropyCompressSeqStore_internal(seqStore_t* seqStorePtr, const ZSTD_entropyCTables_t* prevEntropy, ZSTD_entropyCTables_t* nextEntropy, const ZSTD_CCtx_params* cctxParams, @@ -2161,22 +2561,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr, FSE_CTable* CTable_LitLength = nextEntropy->fse.litlengthCTable; FSE_CTable* CTable_OffsetBits = nextEntropy->fse.offcodeCTable; FSE_CTable* CTable_MatchLength = nextEntropy->fse.matchlengthCTable; - U32 LLtype, Offtype, MLtype; /* compressed, raw or rle */ const seqDef* const sequences = seqStorePtr->sequencesStart; + const size_t nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart; const BYTE* const ofCodeTable = seqStorePtr->ofCode; const BYTE* const llCodeTable = seqStorePtr->llCode; const BYTE* const mlCodeTable = seqStorePtr->mlCode; BYTE* const ostart = (BYTE*)dst; BYTE* const oend = ostart + dstCapacity; BYTE* op = ostart; - size_t const nbSeq = (size_t)(seqStorePtr->sequences - seqStorePtr->sequencesStart); - BYTE* seqHead; - BYTE* lastNCount = NULL; + size_t lastCountSize; entropyWorkspace = count + (MaxSeq + 1); entropyWkspSize -= (MaxSeq + 1) * sizeof(*count); - DEBUGLOG(4, "ZSTD_entropyCompressSequences_internal (nbSeq=%zu)", nbSeq); + DEBUGLOG(4, "ZSTD_entropyCompressSeqStore_internal (nbSeq=%zu)", nbSeq); ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog))); assert(entropyWkspSize >= HUF_WORKSPACE_SIZE); @@ -2216,95 +2614,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr, ZSTD_memcpy(&nextEntropy->fse, &prevEntropy->fse, sizeof(prevEntropy->fse)); return (size_t)(op - ostart); } - - /* seqHead : flags for FSE encoding type */ - seqHead = op++; - assert(op <= oend); - - /* convert length/distances into codes */ - ZSTD_seqToCodes(seqStorePtr); - /* build CTable for Literal Lengths */ - { unsigned max = MaxLL; - size_t const mostFrequent = HIST_countFast_wksp(count, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ - DEBUGLOG(5, "Building LL table"); - nextEntropy->fse.litlength_repeatMode = prevEntropy->fse.litlength_repeatMode; - LLtype = ZSTD_selectEncodingType(&nextEntropy->fse.litlength_repeatMode, - count, max, mostFrequent, nbSeq, - LLFSELog, prevEntropy->fse.litlengthCTable, - LL_defaultNorm, LL_defaultNormLog, - ZSTD_defaultAllowed, strategy); - assert(set_basic < set_compressed && set_rle < set_compressed); - assert(!(LLtype < set_compressed && nextEntropy->fse.litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable( - op, (size_t)(oend - op), - CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype, - count, max, llCodeTable, nbSeq, - LL_defaultNorm, LL_defaultNormLog, MaxLL, - prevEntropy->fse.litlengthCTable, - sizeof(prevEntropy->fse.litlengthCTable), - entropyWorkspace, entropyWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed"); - if (LLtype == set_compressed) - lastNCount = op; - op += countSize; - assert(op <= oend); - } } - /* build CTable for Offsets */ - { unsigned max = MaxOff; - size_t const mostFrequent = HIST_countFast_wksp( - count, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ - /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */ - ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed; - DEBUGLOG(5, "Building OF table"); - nextEntropy->fse.offcode_repeatMode = prevEntropy->fse.offcode_repeatMode; - Offtype = ZSTD_selectEncodingType(&nextEntropy->fse.offcode_repeatMode, - count, max, mostFrequent, nbSeq, - OffFSELog, prevEntropy->fse.offcodeCTable, - OF_defaultNorm, OF_defaultNormLog, - defaultPolicy, strategy); - assert(!(Offtype < set_compressed && nextEntropy->fse.offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable( - op, (size_t)(oend - op), - CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype, - count, max, ofCodeTable, nbSeq, - OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, - prevEntropy->fse.offcodeCTable, - sizeof(prevEntropy->fse.offcodeCTable), - entropyWorkspace, entropyWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed"); - if (Offtype == set_compressed) - lastNCount = op; - op += countSize; - assert(op <= oend); - } } - /* build CTable for MatchLengths */ - { unsigned max = MaxML; - size_t const mostFrequent = HIST_countFast_wksp( - count, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */ - DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op)); - nextEntropy->fse.matchlength_repeatMode = prevEntropy->fse.matchlength_repeatMode; - MLtype = ZSTD_selectEncodingType(&nextEntropy->fse.matchlength_repeatMode, - count, max, mostFrequent, nbSeq, - MLFSELog, prevEntropy->fse.matchlengthCTable, - ML_defaultNorm, ML_defaultNormLog, - ZSTD_defaultAllowed, strategy); - assert(!(MLtype < set_compressed && nextEntropy->fse.matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable( - op, (size_t)(oend - op), - CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype, - count, max, mlCodeTable, nbSeq, - ML_defaultNorm, ML_defaultNormLog, MaxML, - prevEntropy->fse.matchlengthCTable, - sizeof(prevEntropy->fse.matchlengthCTable), - entropyWorkspace, entropyWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed"); - if (MLtype == set_compressed) - lastNCount = op; - op += countSize; - assert(op <= oend); - } } - - *seqHead = (BYTE)((LLtype<<6) + (Offtype<<4) + (MLtype<<2)); + { + ZSTD_symbolEncodingTypeStats_t stats; + BYTE* seqHead = op++; + /* build stats for sequences */ + stats = ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq, + &prevEntropy->fse, &nextEntropy->fse, + op, oend, + strategy, count, + entropyWorkspace, entropyWkspSize); + FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!"); + *seqHead = (BYTE)((stats.LLtype<<6) + (stats.Offtype<<4) + (stats.MLtype<<2)); + lastCountSize = stats.lastCountSize; + op += stats.size; + } { size_t const bitstreamSize = ZSTD_encodeSequences( op, (size_t)(oend - op), @@ -2324,9 +2647,9 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr, * In this exceedingly rare case, we will simply emit an uncompressed * block, since it isn't worth optimizing. */ - if (lastNCount && (op - lastNCount) < 4) { - /* NCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */ - assert(op - lastNCount == 3); + if (lastCountSize && (lastCountSize + bitstreamSize) < 4) { + /* lastCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */ + assert(lastCountSize + bitstreamSize == 3); DEBUGLOG(5, "Avoiding bug in zstd decoder in versions <= 1.3.4 by " "emitting an uncompressed block."); return 0; @@ -2338,7 +2661,7 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr, } MEM_STATIC size_t -ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr, +ZSTD_entropyCompressSeqStore(seqStore_t* seqStorePtr, const ZSTD_entropyCTables_t* prevEntropy, ZSTD_entropyCTables_t* nextEntropy, const ZSTD_CCtx_params* cctxParams, @@ -2347,7 +2670,7 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr, void* entropyWorkspace, size_t entropyWkspSize, int bmi2) { - size_t const cSize = ZSTD_entropyCompressSequences_internal( + size_t const cSize = ZSTD_entropyCompressSeqStore_internal( seqStorePtr, prevEntropy, nextEntropy, cctxParams, dst, dstCapacity, entropyWorkspace, entropyWkspSize, bmi2); @@ -2357,20 +2680,20 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr, */ if ((cSize == ERROR(dstSize_tooSmall)) & (srcSize <= dstCapacity)) return 0; /* block not compressed */ - FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSequences_internal failed"); + FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSeqStore_internal failed"); /* Check compressibility */ { size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, cctxParams->cParams.strategy); if (cSize >= maxCSize) return 0; /* block not compressed */ } - DEBUGLOG(4, "ZSTD_entropyCompressSequences() cSize: %zu\n", cSize); + DEBUGLOG(4, "ZSTD_entropyCompressSeqStore() cSize: %zu", cSize); return cSize; } /* ZSTD_selectBlockCompressor() : * Not static, but internal use only (used by long distance matcher) * assumption : strat is a valid strategy */ -ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode) +ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e useRowMatchFinder, ZSTD_dictMode_e dictMode) { static const ZSTD_blockCompressor blockCompressor[4][ZSTD_STRATEGY_MAX+1] = { { ZSTD_compressBlock_fast /* default for 0 */, @@ -2418,7 +2741,28 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMo ZSTD_STATIC_ASSERT((unsigned)ZSTD_fast == 1); assert(ZSTD_cParam_withinBounds(ZSTD_c_strategy, strat)); - selectedCompressor = blockCompressor[(int)dictMode][(int)strat]; + DEBUGLOG(4, "Selected block compressor: dictMode=%d strat=%d rowMatchfinder=%d", (int)dictMode, (int)strat, (int)useRowMatchFinder); + if (ZSTD_rowMatchFinderUsed(strat, useRowMatchFinder)) { + static const ZSTD_blockCompressor rowBasedBlockCompressors[4][3] = { + { ZSTD_compressBlock_greedy_row, + ZSTD_compressBlock_lazy_row, + ZSTD_compressBlock_lazy2_row }, + { ZSTD_compressBlock_greedy_extDict_row, + ZSTD_compressBlock_lazy_extDict_row, + ZSTD_compressBlock_lazy2_extDict_row }, + { ZSTD_compressBlock_greedy_dictMatchState_row, + ZSTD_compressBlock_lazy_dictMatchState_row, + ZSTD_compressBlock_lazy2_dictMatchState_row }, + { ZSTD_compressBlock_greedy_dedicatedDictSearch_row, + ZSTD_compressBlock_lazy_dedicatedDictSearch_row, + ZSTD_compressBlock_lazy2_dedicatedDictSearch_row } + }; + DEBUGLOG(4, "Selecting a row-based matchfinder"); + assert(useRowMatchFinder != ZSTD_urm_auto); + selectedCompressor = rowBasedBlockCompressors[(int)dictMode][(int)strat - (int)ZSTD_greedy]; + } else { + selectedCompressor = blockCompressor[(int)dictMode][(int)strat]; + } assert(selectedCompressor != NULL); return selectedCompressor; } @@ -2434,7 +2778,7 @@ void ZSTD_resetSeqStore(seqStore_t* ssPtr) { ssPtr->lit = ssPtr->litStart; ssPtr->sequences = ssPtr->sequencesStart; - ssPtr->longLengthID = 0; + ssPtr->longLengthType = ZSTD_llt_none; } typedef enum { ZSTDbss_compress, ZSTDbss_noCompress } ZSTD_buildSeqStore_e; @@ -2487,6 +2831,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize) ZSTD_ldm_blockCompress(&zc->externSeqStore, ms, &zc->seqStore, zc->blockState.nextCBlock->rep, + zc->appliedParams.useRowMatchFinder, src, srcSize); assert(zc->externSeqStore.pos <= zc->externSeqStore.size); } else if (zc->appliedParams.ldmParams.enableLdm) { @@ -2503,10 +2848,13 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize) ZSTD_ldm_blockCompress(&ldmSeqStore, ms, &zc->seqStore, zc->blockState.nextCBlock->rep, + zc->appliedParams.useRowMatchFinder, src, srcSize); assert(ldmSeqStore.pos == ldmSeqStore.size); } else { /* not long range mode */ - ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy, dictMode); + ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy, + zc->appliedParams.useRowMatchFinder, + dictMode); ms->ldmSeqStore = NULL; lastLLSize = blockCompressor(ms, &zc->seqStore, zc->blockState.nextCBlock->rep, src, srcSize); } @@ -2540,9 +2888,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc) outSeqs[i].rep = 0; if (i == seqStore->longLengthPos) { - if (seqStore->longLengthID == 1) { + if (seqStore->longLengthType == ZSTD_llt_literalLength) { outSeqs[i].litLength += 0x10000; - } else if (seqStore->longLengthID == 2) { + } else if (seqStore->longLengthType == ZSTD_llt_matchLength) { outSeqs[i].matchLength += 0x10000; } } @@ -2653,11 +3001,713 @@ static int ZSTD_maybeRLE(seqStore_t const* seqStore) return nbSeqs < 4 && nbLits < 10; } -static void ZSTD_confirmRepcodesAndEntropyTables(ZSTD_CCtx* zc) +static void ZSTD_blockState_confirmRepcodesAndEntropyTables(ZSTD_blockState_t* const bs) { - ZSTD_compressedBlockState_t* const tmp = zc->blockState.prevCBlock; - zc->blockState.prevCBlock = zc->blockState.nextCBlock; - zc->blockState.nextCBlock = tmp; + ZSTD_compressedBlockState_t* const tmp = bs->prevCBlock; + bs->prevCBlock = bs->nextCBlock; + bs->nextCBlock = tmp; +} + +/* Writes the block header */ +static void writeBlockHeader(void* op, size_t cSize, size_t blockSize, U32 lastBlock) { + U32 const cBlockHeader = cSize == 1 ? + lastBlock + (((U32)bt_rle)<<1) + (U32)(blockSize << 3) : + lastBlock + (((U32)bt_compressed)<<1) + (U32)(cSize << 3); + MEM_writeLE24(op, cBlockHeader); + DEBUGLOG(3, "writeBlockHeader: cSize: %zu blockSize: %zu lastBlock: %u", cSize, blockSize, lastBlock); +} + +/** ZSTD_buildBlockEntropyStats_literals() : + * Builds entropy for the literals. + * Stores literals block type (raw, rle, compressed, repeat) and + * huffman description table to hufMetadata. + * Requires ENTROPY_WORKSPACE_SIZE workspace + * @return : size of huffman description table or error code */ +static size_t ZSTD_buildBlockEntropyStats_literals(void* const src, size_t srcSize, + const ZSTD_hufCTables_t* prevHuf, + ZSTD_hufCTables_t* nextHuf, + ZSTD_hufCTablesMetadata_t* hufMetadata, + const int disableLiteralsCompression, + void* workspace, size_t wkspSize) +{ + BYTE* const wkspStart = (BYTE*)workspace; + BYTE* const wkspEnd = wkspStart + wkspSize; + BYTE* const countWkspStart = wkspStart; + unsigned* const countWksp = (unsigned*)workspace; + const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned); + BYTE* const nodeWksp = countWkspStart + countWkspSize; + const size_t nodeWkspSize = wkspEnd-nodeWksp; + unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX; + unsigned huffLog = HUF_TABLELOG_DEFAULT; + HUF_repeat repeat = prevHuf->repeatMode; + DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_literals (srcSize=%zu)", srcSize); + + /* Prepare nextEntropy assuming reusing the existing table */ + ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + + if (disableLiteralsCompression) { + DEBUGLOG(5, "set_basic - disabled"); + hufMetadata->hType = set_basic; + return 0; + } + + /* small ? don't even attempt compression (speed opt) */ +#ifndef COMPRESS_LITERALS_SIZE_MIN +#define COMPRESS_LITERALS_SIZE_MIN 63 +#endif + { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN; + if (srcSize <= minLitSize) { + DEBUGLOG(5, "set_basic - too small"); + hufMetadata->hType = set_basic; + return 0; + } + } + + /* Scan input and build symbol stats */ + { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize); + FORWARD_IF_ERROR(largest, "HIST_count_wksp failed"); + if (largest == srcSize) { + DEBUGLOG(5, "set_rle"); + hufMetadata->hType = set_rle; + return 0; + } + if (largest <= (srcSize >> 7)+4) { + DEBUGLOG(5, "set_basic - no gain"); + hufMetadata->hType = set_basic; + return 0; + } + } + + /* Validate the previous Huffman table */ + if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) { + repeat = HUF_repeat_none; + } + + /* Build Huffman Tree */ + ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable)); + huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue); + { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp, + maxSymbolValue, huffLog, + nodeWksp, nodeWkspSize); + FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp"); + huffLog = (U32)maxBits; + { /* Build and write the CTable */ + size_t const newCSize = HUF_estimateCompressedSize( + (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue); + size_t const hSize = HUF_writeCTable_wksp( + hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer), + (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog, + nodeWksp, nodeWkspSize); + /* Check against repeating the previous CTable */ + if (repeat != HUF_repeat_none) { + size_t const oldCSize = HUF_estimateCompressedSize( + (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue); + if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) { + DEBUGLOG(5, "set_repeat - smaller"); + ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + hufMetadata->hType = set_repeat; + return 0; + } + } + if (newCSize + hSize >= srcSize) { + DEBUGLOG(5, "set_basic - no gains"); + ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + hufMetadata->hType = set_basic; + return 0; + } + DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize); + hufMetadata->hType = set_compressed; + nextHuf->repeatMode = HUF_repeat_check; + return hSize; + } + } +} + + +/* ZSTD_buildDummySequencesStatistics(): + * Returns a ZSTD_symbolEncodingTypeStats_t with all encoding types as set_basic, + * and updates nextEntropy to the appropriate repeatMode. + */ +static ZSTD_symbolEncodingTypeStats_t +ZSTD_buildDummySequencesStatistics(ZSTD_fseCTables_t* nextEntropy) { + ZSTD_symbolEncodingTypeStats_t stats = {set_basic, set_basic, set_basic, 0, 0}; + nextEntropy->litlength_repeatMode = FSE_repeat_none; + nextEntropy->offcode_repeatMode = FSE_repeat_none; + nextEntropy->matchlength_repeatMode = FSE_repeat_none; + return stats; +} + +/** ZSTD_buildBlockEntropyStats_sequences() : + * Builds entropy for the sequences. + * Stores symbol compression modes and fse table to fseMetadata. + * Requires ENTROPY_WORKSPACE_SIZE wksp. + * @return : size of fse tables or error code */ +static size_t ZSTD_buildBlockEntropyStats_sequences(seqStore_t* seqStorePtr, + const ZSTD_fseCTables_t* prevEntropy, + ZSTD_fseCTables_t* nextEntropy, + const ZSTD_CCtx_params* cctxParams, + ZSTD_fseCTablesMetadata_t* fseMetadata, + void* workspace, size_t wkspSize) +{ + ZSTD_strategy const strategy = cctxParams->cParams.strategy; + size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart; + BYTE* const ostart = fseMetadata->fseTablesBuffer; + BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer); + BYTE* op = ostart; + unsigned* countWorkspace = (unsigned*)workspace; + unsigned* entropyWorkspace = countWorkspace + (MaxSeq + 1); + size_t entropyWorkspaceSize = wkspSize - (MaxSeq + 1) * sizeof(*countWorkspace); + ZSTD_symbolEncodingTypeStats_t stats; + + DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_sequences (nbSeq=%zu)", nbSeq); + stats = nbSeq != 0 ? ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq, + prevEntropy, nextEntropy, op, oend, + strategy, countWorkspace, + entropyWorkspace, entropyWorkspaceSize) + : ZSTD_buildDummySequencesStatistics(nextEntropy); + FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!"); + fseMetadata->llType = (symbolEncodingType_e) stats.LLtype; + fseMetadata->ofType = (symbolEncodingType_e) stats.Offtype; + fseMetadata->mlType = (symbolEncodingType_e) stats.MLtype; + fseMetadata->lastCountSize = stats.lastCountSize; + return stats.size; +} + + +/** ZSTD_buildBlockEntropyStats() : + * Builds entropy for the block. + * Requires workspace size ENTROPY_WORKSPACE_SIZE + * + * @return : 0 on success or error code + */ +size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr, + const ZSTD_entropyCTables_t* prevEntropy, + ZSTD_entropyCTables_t* nextEntropy, + const ZSTD_CCtx_params* cctxParams, + ZSTD_entropyCTablesMetadata_t* entropyMetadata, + void* workspace, size_t wkspSize) +{ + size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart; + entropyMetadata->hufMetadata.hufDesSize = + ZSTD_buildBlockEntropyStats_literals(seqStorePtr->litStart, litSize, + &prevEntropy->huf, &nextEntropy->huf, + &entropyMetadata->hufMetadata, + ZSTD_disableLiteralsCompression(cctxParams), + workspace, wkspSize); + FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildBlockEntropyStats_literals failed"); + entropyMetadata->fseMetadata.fseTablesSize = + ZSTD_buildBlockEntropyStats_sequences(seqStorePtr, + &prevEntropy->fse, &nextEntropy->fse, + cctxParams, + &entropyMetadata->fseMetadata, + workspace, wkspSize); + FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildBlockEntropyStats_sequences failed"); + return 0; +} + +/* Returns the size estimate for the literals section (header + content) of a block */ +static size_t ZSTD_estimateBlockSize_literal(const BYTE* literals, size_t litSize, + const ZSTD_hufCTables_t* huf, + const ZSTD_hufCTablesMetadata_t* hufMetadata, + void* workspace, size_t wkspSize, + int writeEntropy) +{ + unsigned* const countWksp = (unsigned*)workspace; + unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX; + size_t literalSectionHeaderSize = 3 + (litSize >= 1 KB) + (litSize >= 16 KB); + U32 singleStream = litSize < 256; + + if (hufMetadata->hType == set_basic) return litSize; + else if (hufMetadata->hType == set_rle) return 1; + else if (hufMetadata->hType == set_compressed || hufMetadata->hType == set_repeat) { + size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)literals, litSize, workspace, wkspSize); + if (ZSTD_isError(largest)) return litSize; + { size_t cLitSizeEstimate = HUF_estimateCompressedSize((const HUF_CElt*)huf->CTable, countWksp, maxSymbolValue); + if (writeEntropy) cLitSizeEstimate += hufMetadata->hufDesSize; + if (!singleStream) cLitSizeEstimate += 6; /* multi-stream huffman uses 6-byte jump table */ + return cLitSizeEstimate + literalSectionHeaderSize; + } } + assert(0); /* impossible */ + return 0; +} + +/* Returns the size estimate for the FSE-compressed symbols (of, ml, ll) of a block */ +static size_t ZSTD_estimateBlockSize_symbolType(symbolEncodingType_e type, + const BYTE* codeTable, size_t nbSeq, unsigned maxCode, + const FSE_CTable* fseCTable, + const U32* additionalBits, + short const* defaultNorm, U32 defaultNormLog, U32 defaultMax, + void* workspace, size_t wkspSize) +{ + unsigned* const countWksp = (unsigned*)workspace; + const BYTE* ctp = codeTable; + const BYTE* const ctStart = ctp; + const BYTE* const ctEnd = ctStart + nbSeq; + size_t cSymbolTypeSizeEstimateInBits = 0; + unsigned max = maxCode; + + HIST_countFast_wksp(countWksp, &max, codeTable, nbSeq, workspace, wkspSize); /* can't fail */ + if (type == set_basic) { + /* We selected this encoding type, so it must be valid. */ + assert(max <= defaultMax); + (void)defaultMax; + cSymbolTypeSizeEstimateInBits = ZSTD_crossEntropyCost(defaultNorm, defaultNormLog, countWksp, max); + } else if (type == set_rle) { + cSymbolTypeSizeEstimateInBits = 0; + } else if (type == set_compressed || type == set_repeat) { + cSymbolTypeSizeEstimateInBits = ZSTD_fseBitCost(fseCTable, countWksp, max); + } + if (ZSTD_isError(cSymbolTypeSizeEstimateInBits)) { + return nbSeq * 10; + } + while (ctp < ctEnd) { + if (additionalBits) cSymbolTypeSizeEstimateInBits += additionalBits[*ctp]; + else cSymbolTypeSizeEstimateInBits += *ctp; /* for offset, offset code is also the number of additional bits */ + ctp++; + } + return cSymbolTypeSizeEstimateInBits >> 3; +} + +/* Returns the size estimate for the sequences section (header + content) of a block */ +static size_t ZSTD_estimateBlockSize_sequences(const BYTE* ofCodeTable, + const BYTE* llCodeTable, + const BYTE* mlCodeTable, + size_t nbSeq, + const ZSTD_fseCTables_t* fseTables, + const ZSTD_fseCTablesMetadata_t* fseMetadata, + void* workspace, size_t wkspSize, + int writeEntropy) +{ + size_t sequencesSectionHeaderSize = 1 /* seqHead */ + 1 /* min seqSize size */ + (nbSeq >= 128) + (nbSeq >= LONGNBSEQ); + size_t cSeqSizeEstimate = 0; + cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, nbSeq, MaxOff, + fseTables->offcodeCTable, NULL, + OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, + workspace, wkspSize); + cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->llType, llCodeTable, nbSeq, MaxLL, + fseTables->litlengthCTable, LL_bits, + LL_defaultNorm, LL_defaultNormLog, MaxLL, + workspace, wkspSize); + cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->mlType, mlCodeTable, nbSeq, MaxML, + fseTables->matchlengthCTable, ML_bits, + ML_defaultNorm, ML_defaultNormLog, MaxML, + workspace, wkspSize); + if (writeEntropy) cSeqSizeEstimate += fseMetadata->fseTablesSize; + return cSeqSizeEstimate + sequencesSectionHeaderSize; +} + +/* Returns the size estimate for a given stream of literals, of, ll, ml */ +static size_t ZSTD_estimateBlockSize(const BYTE* literals, size_t litSize, + const BYTE* ofCodeTable, + const BYTE* llCodeTable, + const BYTE* mlCodeTable, + size_t nbSeq, + const ZSTD_entropyCTables_t* entropy, + const ZSTD_entropyCTablesMetadata_t* entropyMetadata, + void* workspace, size_t wkspSize, + int writeLitEntropy, int writeSeqEntropy) { + size_t const literalsSize = ZSTD_estimateBlockSize_literal(literals, litSize, + &entropy->huf, &entropyMetadata->hufMetadata, + workspace, wkspSize, writeLitEntropy); + size_t const seqSize = ZSTD_estimateBlockSize_sequences(ofCodeTable, llCodeTable, mlCodeTable, + nbSeq, &entropy->fse, &entropyMetadata->fseMetadata, + workspace, wkspSize, writeSeqEntropy); + return seqSize + literalsSize + ZSTD_blockHeaderSize; +} + +/* Builds entropy statistics and uses them for blocksize estimation. + * + * Returns the estimated compressed size of the seqStore, or a zstd error. + */ +static size_t ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(seqStore_t* seqStore, const ZSTD_CCtx* zc) { + ZSTD_entropyCTablesMetadata_t entropyMetadata; + FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(seqStore, + &zc->blockState.prevCBlock->entropy, + &zc->blockState.nextCBlock->entropy, + &zc->appliedParams, + &entropyMetadata, + zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */), ""); + return ZSTD_estimateBlockSize(seqStore->litStart, (size_t)(seqStore->lit - seqStore->litStart), + seqStore->ofCode, seqStore->llCode, seqStore->mlCode, + (size_t)(seqStore->sequences - seqStore->sequencesStart), + &zc->blockState.nextCBlock->entropy, &entropyMetadata, zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE, + (int)(entropyMetadata.hufMetadata.hType == set_compressed), 1); +} + +/* Returns literals bytes represented in a seqStore */ +static size_t ZSTD_countSeqStoreLiteralsBytes(const seqStore_t* const seqStore) { + size_t literalsBytes = 0; + size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart; + size_t i; + for (i = 0; i < nbSeqs; ++i) { + seqDef seq = seqStore->sequencesStart[i]; + literalsBytes += seq.litLength; + if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_literalLength) { + literalsBytes += 0x10000; + } + } + return literalsBytes; +} + +/* Returns match bytes represented in a seqStore */ +static size_t ZSTD_countSeqStoreMatchBytes(const seqStore_t* const seqStore) { + size_t matchBytes = 0; + size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart; + size_t i; + for (i = 0; i < nbSeqs; ++i) { + seqDef seq = seqStore->sequencesStart[i]; + matchBytes += seq.matchLength + MINMATCH; + if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_matchLength) { + matchBytes += 0x10000; + } + } + return matchBytes; +} + +/* Derives the seqStore that is a chunk of the originalSeqStore from [startIdx, endIdx). + * Stores the result in resultSeqStore. + */ +static void ZSTD_deriveSeqStoreChunk(seqStore_t* resultSeqStore, + const seqStore_t* originalSeqStore, + size_t startIdx, size_t endIdx) { + BYTE* const litEnd = originalSeqStore->lit; + size_t literalsBytes; + size_t literalsBytesPreceding = 0; + + *resultSeqStore = *originalSeqStore; + if (startIdx > 0) { + resultSeqStore->sequences = originalSeqStore->sequencesStart + startIdx; + literalsBytesPreceding = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore); + } + + /* Move longLengthPos into the correct position if necessary */ + if (originalSeqStore->longLengthType != ZSTD_llt_none) { + if (originalSeqStore->longLengthPos < startIdx || originalSeqStore->longLengthPos > endIdx) { + resultSeqStore->longLengthType = ZSTD_llt_none; + } else { + resultSeqStore->longLengthPos -= (U32)startIdx; + } + } + resultSeqStore->sequencesStart = originalSeqStore->sequencesStart + startIdx; + resultSeqStore->sequences = originalSeqStore->sequencesStart + endIdx; + literalsBytes = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore); + resultSeqStore->litStart += literalsBytesPreceding; + if (endIdx == (size_t)(originalSeqStore->sequences - originalSeqStore->sequencesStart)) { + /* This accounts for possible last literals if the derived chunk reaches the end of the block */ + resultSeqStore->lit = litEnd; + } else { + resultSeqStore->lit = resultSeqStore->litStart+literalsBytes; + } + resultSeqStore->llCode += startIdx; + resultSeqStore->mlCode += startIdx; + resultSeqStore->ofCode += startIdx; +} + +/** + * Returns the raw offset represented by the combination of offCode, ll0, and repcode history. + * offCode must be an offCode representing a repcode, therefore in the range of [0, 2]. + */ +static U32 ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32 offCode, const U32 ll0) { + U32 const adjustedOffCode = offCode + ll0; + assert(offCode < ZSTD_REP_NUM); + if (adjustedOffCode == ZSTD_REP_NUM) { + /* litlength == 0 and offCode == 2 implies selection of first repcode - 1 */ + assert(rep[0] > 0); + return rep[0] - 1; + } + return rep[adjustedOffCode]; +} + +/** + * ZSTD_seqStore_resolveOffCodes() reconciles any possible divergences in offset history that may arise + * due to emission of RLE/raw blocks that disturb the offset history, and replaces any repcodes within + * the seqStore that may be invalid. + * + * dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in + * accordance with the seqStore. + */ +static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_t* const cRepcodes, + seqStore_t* const seqStore, U32 const nbSeq) { + U32 idx = 0; + for (; idx < nbSeq; ++idx) { + seqDef* const seq = seqStore->sequencesStart + idx; + U32 const ll0 = (seq->litLength == 0); + U32 offCode = seq->offset - 1; + assert(seq->offset > 0); + if (offCode <= ZSTD_REP_MOVE) { + U32 const dRawOffset = ZSTD_resolveRepcodeToRawOffset(dRepcodes->rep, offCode, ll0); + U32 const cRawOffset = ZSTD_resolveRepcodeToRawOffset(cRepcodes->rep, offCode, ll0); + /* Adjust simulated decompression repcode history if we come across a mismatch. Replace + * the repcode with the offset it actually references, determined by the compression + * repcode history. + */ + if (dRawOffset != cRawOffset) { + seq->offset = cRawOffset + ZSTD_REP_NUM; + } + } + /* Compression repcode history is always updated with values directly from the unmodified seqStore. + * Decompression repcode history may use modified seq->offset value taken from compression repcode history. + */ + *dRepcodes = ZSTD_updateRep(dRepcodes->rep, seq->offset - 1, ll0); + *cRepcodes = ZSTD_updateRep(cRepcodes->rep, offCode, ll0); + } +} + +/* ZSTD_compressSeqStore_singleBlock(): + * Compresses a seqStore into a block with a block header, into the buffer dst. + * + * Returns the total size of that block (including header) or a ZSTD error code. + */ +static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const seqStore, + repcodes_t* const dRep, repcodes_t* const cRep, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + U32 lastBlock, U32 isPartition) { + const U32 rleMaxLength = 25; + BYTE* op = (BYTE*)dst; + const BYTE* ip = (const BYTE*)src; + size_t cSize; + size_t cSeqsSize; + + /* In case of an RLE or raw block, the simulated decompression repcode history must be reset */ + repcodes_t const dRepOriginal = *dRep; + if (isPartition) + ZSTD_seqStore_resolveOffCodes(dRep, cRep, seqStore, (U32)(seqStore->sequences - seqStore->sequencesStart)); + + cSeqsSize = ZSTD_entropyCompressSeqStore(seqStore, + &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy, + &zc->appliedParams, + op + ZSTD_blockHeaderSize, dstCapacity - ZSTD_blockHeaderSize, + srcSize, + zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */, + zc->bmi2); + FORWARD_IF_ERROR(cSeqsSize, "ZSTD_entropyCompressSeqStore failed!"); + + if (!zc->isFirstBlock && + cSeqsSize < rleMaxLength && + ZSTD_isRLE((BYTE const*)src, srcSize)) { + /* We don't want to emit our first block as a RLE even if it qualifies because + * doing so will cause the decoder (cli only) to throw a "should consume all input error." + * This is only an issue for zstd <= v1.4.3 + */ + cSeqsSize = 1; + } + + if (zc->seqCollector.collectSequences) { + ZSTD_copyBlockSequences(zc); + ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState); + return 0; + } + + if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) + zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; + + if (cSeqsSize == 0) { + cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock); + FORWARD_IF_ERROR(cSize, "Nocompress block failed"); + DEBUGLOG(4, "Writing out nocompress block, size: %zu", cSize); + *dRep = dRepOriginal; /* reset simulated decompression repcode history */ + } else if (cSeqsSize == 1) { + cSize = ZSTD_rleCompressBlock(op, dstCapacity, *ip, srcSize, lastBlock); + FORWARD_IF_ERROR(cSize, "RLE compress block failed"); + DEBUGLOG(4, "Writing out RLE block, size: %zu", cSize); + *dRep = dRepOriginal; /* reset simulated decompression repcode history */ + } else { + ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState); + writeBlockHeader(op, cSeqsSize, srcSize, lastBlock); + cSize = ZSTD_blockHeaderSize + cSeqsSize; + DEBUGLOG(4, "Writing out compressed block, size: %zu", cSize); + } + return cSize; +} + +/* Struct to keep track of where we are in our recursive calls. */ +typedef struct { + U32* splitLocations; /* Array of split indices */ + size_t idx; /* The current index within splitLocations being worked on */ +} seqStoreSplits; + +#define MIN_SEQUENCES_BLOCK_SPLITTING 300 +#define MAX_NB_SPLITS 196 + +/* Helper function to perform the recursive search for block splits. + * Estimates the cost of seqStore prior to split, and estimates the cost of splitting the sequences in half. + * If advantageous to split, then we recurse down the two sub-blocks. If not, or if an error occurred in estimation, then + * we do not recurse. + * + * Note: The recursion depth is capped by a heuristic minimum number of sequences, defined by MIN_SEQUENCES_BLOCK_SPLITTING. + * In theory, this means the absolute largest recursion depth is 10 == log2(maxNbSeqInBlock/MIN_SEQUENCES_BLOCK_SPLITTING). + * In practice, recursion depth usually doesn't go beyond 4. + * + * Furthermore, the number of splits is capped by MAX_NB_SPLITS. At MAX_NB_SPLITS == 196 with the current existing blockSize + * maximum of 128 KB, this value is actually impossible to reach. + */ +static void ZSTD_deriveBlockSplitsHelper(seqStoreSplits* splits, size_t startIdx, size_t endIdx, + const ZSTD_CCtx* zc, const seqStore_t* origSeqStore) { + seqStore_t fullSeqStoreChunk; + seqStore_t firstHalfSeqStore; + seqStore_t secondHalfSeqStore; + size_t estimatedOriginalSize; + size_t estimatedFirstHalfSize; + size_t estimatedSecondHalfSize; + size_t midIdx = (startIdx + endIdx)/2; + + if (endIdx - startIdx < MIN_SEQUENCES_BLOCK_SPLITTING || splits->idx >= MAX_NB_SPLITS) { + return; + } + ZSTD_deriveSeqStoreChunk(&fullSeqStoreChunk, origSeqStore, startIdx, endIdx); + ZSTD_deriveSeqStoreChunk(&firstHalfSeqStore, origSeqStore, startIdx, midIdx); + ZSTD_deriveSeqStoreChunk(&secondHalfSeqStore, origSeqStore, midIdx, endIdx); + estimatedOriginalSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&fullSeqStoreChunk, zc); + estimatedFirstHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&firstHalfSeqStore, zc); + estimatedSecondHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&secondHalfSeqStore, zc); + DEBUGLOG(5, "Estimated original block size: %zu -- First half split: %zu -- Second half split: %zu", + estimatedOriginalSize, estimatedFirstHalfSize, estimatedSecondHalfSize); + if (ZSTD_isError(estimatedOriginalSize) || ZSTD_isError(estimatedFirstHalfSize) || ZSTD_isError(estimatedSecondHalfSize)) { + return; + } + if (estimatedFirstHalfSize + estimatedSecondHalfSize < estimatedOriginalSize) { + ZSTD_deriveBlockSplitsHelper(splits, startIdx, midIdx, zc, origSeqStore); + splits->splitLocations[splits->idx] = (U32)midIdx; + splits->idx++; + ZSTD_deriveBlockSplitsHelper(splits, midIdx, endIdx, zc, origSeqStore); + } +} + +/* Base recursive function. Populates a table with intra-block partition indices that can improve compression ratio. + * + * Returns the number of splits made (which equals the size of the partition table - 1). + */ +static size_t ZSTD_deriveBlockSplits(ZSTD_CCtx* zc, U32 partitions[], U32 nbSeq) { + seqStoreSplits splits = {partitions, 0}; + if (nbSeq <= 4) { + DEBUGLOG(4, "ZSTD_deriveBlockSplits: Too few sequences to split"); + /* Refuse to try and split anything with less than 4 sequences */ + return 0; + } + ZSTD_deriveBlockSplitsHelper(&splits, 0, nbSeq, zc, &zc->seqStore); + splits.splitLocations[splits.idx] = nbSeq; + DEBUGLOG(5, "ZSTD_deriveBlockSplits: final nb partitions: %zu", splits.idx+1); + return splits.idx; +} + +/* ZSTD_compressBlock_splitBlock(): + * Attempts to split a given block into multiple blocks to improve compression ratio. + * + * Returns combined size of all blocks (which includes headers), or a ZSTD error code. + */ +static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, size_t dstCapacity, + const void* src, size_t blockSize, U32 lastBlock, U32 nbSeq) { + size_t cSize = 0; + const BYTE* ip = (const BYTE*)src; + BYTE* op = (BYTE*)dst; + U32 partitions[MAX_NB_SPLITS]; + size_t i = 0; + size_t srcBytesTotal = 0; + size_t numSplits = ZSTD_deriveBlockSplits(zc, partitions, nbSeq); + seqStore_t nextSeqStore; + seqStore_t currSeqStore; + + /* If a block is split and some partitions are emitted as RLE/uncompressed, then repcode history + * may become invalid. In order to reconcile potentially invalid repcodes, we keep track of two + * separate repcode histories that simulate repcode history on compression and decompression side, + * and use the histories to determine whether we must replace a particular repcode with its raw offset. + * + * 1) cRep gets updated for each partition, regardless of whether the block was emitted as uncompressed + * or RLE. This allows us to retrieve the offset value that an invalid repcode references within + * a nocompress/RLE block. + * 2) dRep gets updated only for compressed partitions, and when a repcode gets replaced, will use + * the replacement offset value rather than the original repcode to update the repcode history. + * dRep also will be the final repcode history sent to the next block. + * + * See ZSTD_seqStore_resolveOffCodes() for more details. + */ + repcodes_t dRep; + repcodes_t cRep; + ZSTD_memcpy(dRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t)); + ZSTD_memcpy(cRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t)); + + DEBUGLOG(4, "ZSTD_compressBlock_splitBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)", + (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, + (unsigned)zc->blockState.matchState.nextToUpdate); + + if (numSplits == 0) { + size_t cSizeSingleBlock = ZSTD_compressSeqStore_singleBlock(zc, &zc->seqStore, + &dRep, &cRep, + op, dstCapacity, + ip, blockSize, + lastBlock, 0 /* isPartition */); + FORWARD_IF_ERROR(cSizeSingleBlock, "Compressing single block from splitBlock_internal() failed!"); + DEBUGLOG(5, "ZSTD_compressBlock_splitBlock_internal: No splits"); + assert(cSizeSingleBlock <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize); + return cSizeSingleBlock; + } + + ZSTD_deriveSeqStoreChunk(&currSeqStore, &zc->seqStore, 0, partitions[0]); + for (i = 0; i <= numSplits; ++i) { + size_t srcBytes; + size_t cSizeChunk; + U32 const lastPartition = (i == numSplits); + U32 lastBlockEntireSrc = 0; + + srcBytes = ZSTD_countSeqStoreLiteralsBytes(&currSeqStore) + ZSTD_countSeqStoreMatchBytes(&currSeqStore); + srcBytesTotal += srcBytes; + if (lastPartition) { + /* This is the final partition, need to account for possible last literals */ + srcBytes += blockSize - srcBytesTotal; + lastBlockEntireSrc = lastBlock; + } else { + ZSTD_deriveSeqStoreChunk(&nextSeqStore, &zc->seqStore, partitions[i], partitions[i+1]); + } + + cSizeChunk = ZSTD_compressSeqStore_singleBlock(zc, &currSeqStore, + &dRep, &cRep, + op, dstCapacity, + ip, srcBytes, + lastBlockEntireSrc, 1 /* isPartition */); + DEBUGLOG(5, "Estimated size: %zu actual size: %zu", ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&currSeqStore, zc), cSizeChunk); + FORWARD_IF_ERROR(cSizeChunk, "Compressing chunk failed!"); + + ip += srcBytes; + op += cSizeChunk; + dstCapacity -= cSizeChunk; + cSize += cSizeChunk; + currSeqStore = nextSeqStore; + assert(cSizeChunk <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize); + } + /* cRep and dRep may have diverged during the compression. If so, we use the dRep repcodes + * for the next block. + */ + ZSTD_memcpy(zc->blockState.prevCBlock->rep, dRep.rep, sizeof(repcodes_t)); + return cSize; +} + +static size_t ZSTD_compressBlock_splitBlock(ZSTD_CCtx* zc, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, U32 lastBlock) { + const BYTE* ip = (const BYTE*)src; + BYTE* op = (BYTE*)dst; + U32 nbSeq; + size_t cSize; + DEBUGLOG(4, "ZSTD_compressBlock_splitBlock"); + + { const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize); + FORWARD_IF_ERROR(bss, "ZSTD_buildSeqStore failed"); + if (bss == ZSTDbss_noCompress) { + if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) + zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; + cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock); + FORWARD_IF_ERROR(cSize, "ZSTD_noCompressBlock failed"); + DEBUGLOG(4, "ZSTD_compressBlock_splitBlock: Nocompress block"); + return cSize; + } + nbSeq = (U32)(zc->seqStore.sequences - zc->seqStore.sequencesStart); + } + + assert(zc->appliedParams.splitBlocks == 1); + cSize = ZSTD_compressBlock_splitBlock_internal(zc, dst, dstCapacity, src, srcSize, lastBlock, nbSeq); + FORWARD_IF_ERROR(cSize, "Splitting blocks failed!"); + return cSize; } static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, @@ -2683,12 +3733,12 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, if (zc->seqCollector.collectSequences) { ZSTD_copyBlockSequences(zc); - ZSTD_confirmRepcodesAndEntropyTables(zc); + ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState); return 0; } /* encode sequences and literals */ - cSize = ZSTD_entropyCompressSequences(&zc->seqStore, + cSize = ZSTD_entropyCompressSeqStore(&zc->seqStore, &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy, &zc->appliedParams, dst, dstCapacity, @@ -2717,7 +3767,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, out: if (!ZSTD_isError(cSize) && cSize > 1) { - ZSTD_confirmRepcodesAndEntropyTables(zc); + ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState); } /* We check that dictionaries have offset codes available for the first * block. After the first block, the offcode table might not have large @@ -2770,7 +3820,7 @@ static size_t ZSTD_compressBlock_targetCBlockSize_body(ZSTD_CCtx* zc, size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, zc->appliedParams.cParams.strategy); FORWARD_IF_ERROR(cSize, "ZSTD_compressSuperBlock failed"); if (cSize != 0 && cSize < maxCSize + ZSTD_blockHeaderSize) { - ZSTD_confirmRepcodesAndEntropyTables(zc); + ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState); return cSize; } } @@ -2810,9 +3860,9 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms, void const* ip, void const* iend) { - if (ZSTD_window_needOverflowCorrection(ms->window, iend)) { - U32 const maxDist = (U32)1 << params->cParams.windowLog; - U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy); + U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy); + U32 const maxDist = (U32)1 << params->cParams.windowLog; + if (ZSTD_window_needOverflowCorrection(ms->window, cycleLog, maxDist, ms->loadedDictEnd, ip, iend)) { U32 const correction = ZSTD_window_correctOverflow(&ms->window, cycleLog, maxDist, ip); ZSTD_STATIC_ASSERT(ZSTD_CHAINLOG_MAX <= 30); ZSTD_STATIC_ASSERT(ZSTD_WINDOWLOG_MAX_32 <= 30); @@ -2835,7 +3885,7 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms, * Frame is supposed already started (header already produced) * @return : compressed size, or an error code */ -static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx, +static size_t ZSTD_compress_frameChunk(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, U32 lastFrameChunk) @@ -2875,6 +3925,10 @@ static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx, FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_targetCBlockSize failed"); assert(cSize > 0); assert(cSize <= blockSize + ZSTD_blockHeaderSize); + } else if (ZSTD_blockSplitterEnabled(&cctx->appliedParams)) { + cSize = ZSTD_compressBlock_splitBlock(cctx, op, dstCapacity, ip, blockSize, lastBlock); + FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_splitBlock failed"); + assert(cSize > 0 || cctx->seqCollector.collectSequences == 1); } else { cSize = ZSTD_compressBlock_internal(cctx, op+ZSTD_blockHeaderSize, dstCapacity-ZSTD_blockHeaderSize, @@ -2954,6 +4008,26 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity, return pos; } +/* ZSTD_writeSkippableFrame_advanced() : + * Writes out a skippable frame with the specified magic number variant (16 are supported), + * from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15, and the desired source data. + * + * Returns the total number of bytes written, or a ZSTD error code. + */ +size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, + const void* src, size_t srcSize, unsigned magicVariant) { + BYTE* op = (BYTE*)dst; + RETURN_ERROR_IF(dstCapacity < srcSize + ZSTD_SKIPPABLEHEADERSIZE /* Skippable frame overhead */, + dstSize_tooSmall, "Not enough room for skippable frame"); + RETURN_ERROR_IF(srcSize > (unsigned)0xFFFFFFFF, srcSize_wrong, "Src size too large for skippable frame"); + RETURN_ERROR_IF(magicVariant > 15, parameter_outOfBound, "Skippable frame magic number variant not supported"); + + MEM_writeLE32(op, (U32)(ZSTD_MAGIC_SKIPPABLE_START + magicVariant)); + MEM_writeLE32(op+4, (U32)srcSize); + ZSTD_memcpy(op+8, src, srcSize); + return srcSize + ZSTD_SKIPPABLEHEADERSIZE; +} + /* ZSTD_writeLastEmptyBlock() : * output an empty Block with end-of-frame mark to complete a frame * @return : size of data written into `dst` (== ZSTD_blockHeaderSize (defined in zstd_internal.h)) @@ -3010,11 +4084,12 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx, if (!srcSize) return fhSize; /* do not generate an empty block if no input */ - if (!ZSTD_window_update(&ms->window, src, srcSize)) { + if (!ZSTD_window_update(&ms->window, src, srcSize, ms->forceNonContiguous)) { + ms->forceNonContiguous = 0; ms->nextToUpdate = ms->window.dictLimit; } if (cctx->appliedParams.ldmParams.enableLdm) { - ZSTD_window_update(&cctx->ldmState.window, src, srcSize); + ZSTD_window_update(&cctx->ldmState.window, src, srcSize, /* forceNonContiguous */ 0); } if (!frame) { @@ -3082,63 +4157,86 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms, { const BYTE* ip = (const BYTE*) src; const BYTE* const iend = ip + srcSize; + int const loadLdmDict = params->ldmParams.enableLdm && ls != NULL; + + /* Assert that we the ms params match the params we're being given */ + ZSTD_assertEqualCParams(params->cParams, ms->cParams); - ZSTD_window_update(&ms->window, src, srcSize); + if (srcSize > ZSTD_CHUNKSIZE_MAX) { + /* Allow the dictionary to set indices up to exactly ZSTD_CURRENT_MAX. + * Dictionaries right at the edge will immediately trigger overflow + * correction, but I don't want to insert extra constraints here. + */ + U32 const maxDictSize = ZSTD_CURRENT_MAX - 1; + /* We must have cleared our windows when our source is this large. */ + assert(ZSTD_window_isEmpty(ms->window)); + if (loadLdmDict) + assert(ZSTD_window_isEmpty(ls->window)); + /* If the dictionary is too large, only load the suffix of the dictionary. */ + if (srcSize > maxDictSize) { + ip = iend - maxDictSize; + src = ip; + srcSize = maxDictSize; + } + } + + DEBUGLOG(4, "ZSTD_loadDictionaryContent(): useRowMatchFinder=%d", (int)params->useRowMatchFinder); + ZSTD_window_update(&ms->window, src, srcSize, /* forceNonContiguous */ 0); ms->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ms->window.base); + ms->forceNonContiguous = params->deterministicRefPrefix; - if (params->ldmParams.enableLdm && ls != NULL) { - ZSTD_window_update(&ls->window, src, srcSize); + if (loadLdmDict) { + ZSTD_window_update(&ls->window, src, srcSize, /* forceNonContiguous */ 0); ls->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ls->window.base); } - /* Assert that we the ms params match the params we're being given */ - ZSTD_assertEqualCParams(params->cParams, ms->cParams); - if (srcSize <= HASH_READ_SIZE) return 0; - while (iend - ip > HASH_READ_SIZE) { - size_t const remaining = (size_t)(iend - ip); - size_t const chunk = MIN(remaining, ZSTD_CHUNKSIZE_MAX); - const BYTE* const ichunk = ip + chunk; + ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, iend); - ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, ichunk); + if (loadLdmDict) + ZSTD_ldm_fillHashTable(ls, ip, iend, ¶ms->ldmParams); - if (params->ldmParams.enableLdm && ls != NULL) - ZSTD_ldm_fillHashTable(ls, (const BYTE*)src, (const BYTE*)src + srcSize, ¶ms->ldmParams); - - switch(params->cParams.strategy) - { - case ZSTD_fast: - ZSTD_fillHashTable(ms, ichunk, dtlm); - break; - case ZSTD_dfast: - ZSTD_fillDoubleHashTable(ms, ichunk, dtlm); - break; + switch(params->cParams.strategy) + { + case ZSTD_fast: + ZSTD_fillHashTable(ms, iend, dtlm); + break; + case ZSTD_dfast: + ZSTD_fillDoubleHashTable(ms, iend, dtlm); + break; - case ZSTD_greedy: - case ZSTD_lazy: - case ZSTD_lazy2: - if (chunk >= HASH_READ_SIZE && ms->dedicatedDictSearch) { - assert(chunk == remaining); /* must load everything in one go */ - ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, ichunk-HASH_READ_SIZE); - } else if (chunk >= HASH_READ_SIZE) { - ZSTD_insertAndFindFirstIndex(ms, ichunk-HASH_READ_SIZE); + case ZSTD_greedy: + case ZSTD_lazy: + case ZSTD_lazy2: + assert(srcSize >= HASH_READ_SIZE); + if (ms->dedicatedDictSearch) { + assert(ms->chainTable != NULL); + ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, iend-HASH_READ_SIZE); + } else { + assert(params->useRowMatchFinder != ZSTD_urm_auto); + if (params->useRowMatchFinder == ZSTD_urm_enableRowMatchFinder) { + size_t const tagTableSize = ((size_t)1 << params->cParams.hashLog) * sizeof(U16); + ZSTD_memset(ms->tagTable, 0, tagTableSize); + ZSTD_row_update(ms, iend-HASH_READ_SIZE); + DEBUGLOG(4, "Using row-based hash table for lazy dict"); + } else { + ZSTD_insertAndFindFirstIndex(ms, iend-HASH_READ_SIZE); + DEBUGLOG(4, "Using chain-based hash table for lazy dict"); } - break; - - case ZSTD_btlazy2: /* we want the dictionary table fully sorted */ - case ZSTD_btopt: - case ZSTD_btultra: - case ZSTD_btultra2: - if (chunk >= HASH_READ_SIZE) - ZSTD_updateTree(ms, ichunk-HASH_READ_SIZE, ichunk); - break; - - default: - assert(0); /* not possible : not a valid strategy id */ } + break; + + case ZSTD_btlazy2: /* we want the dictionary table fully sorted */ + case ZSTD_btopt: + case ZSTD_btultra: + case ZSTD_btultra2: + assert(srcSize >= HASH_READ_SIZE); + ZSTD_updateTree(ms, iend-HASH_READ_SIZE, iend); + break; - ip = ichunk; + default: + assert(0); /* not possible : not a valid strategy id */ } ms->nextToUpdate = (U32)(iend - ms->window.base); @@ -3277,7 +4375,6 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_compressedBlockState_t* bs, const BYTE* const dictEnd = dictPtr + dictSize; size_t dictID; size_t eSize; - ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog))); assert(dictSize >= 8); assert(MEM_readLE32(dictPtr) == ZSTD_MAGIC_DICTIONARY); @@ -3348,6 +4445,10 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params, U64 pledgedSrcSize, ZSTD_buffered_policy_e zbuff) { + size_t const dictContentSize = cdict ? cdict->dictContentSize : dictSize; +#if ZSTD_TRACE + cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0; +#endif DEBUGLOG(4, "ZSTD_compressBegin_internal: wlog=%u", params->cParams.windowLog); /* params are supposed to be fully validated at this point */ assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams))); @@ -3362,7 +4463,8 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx, return ZSTD_resetCCtx_usingCDict(cctx, cdict, params, pledgedSrcSize, zbuff); } - FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, *params, pledgedSrcSize, + FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize, + dictContentSize, ZSTDcrp_makeClean, zbuff) , ""); { size_t const dictID = cdict ? ZSTD_compress_insertDictionary( @@ -3377,6 +4479,7 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx, FORWARD_IF_ERROR(dictID, "ZSTD_compress_insertDictionary failed"); assert(dictID <= UINT_MAX); cctx->dictID = (U32)dictID; + cctx->dictContentSize = dictContentSize; } return 0; } @@ -3405,8 +4508,8 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize) { - ZSTD_CCtx_params const cctxParams = - ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, ¶ms); + ZSTD_CCtx_params cctxParams; + ZSTD_CCtxParams_init_internal(&cctxParams, ¶ms, ZSTD_NO_CLEVEL); return ZSTD_compressBegin_advanced_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL /*cdict*/, @@ -3415,9 +4518,11 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel) { - ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict); - ZSTD_CCtx_params const cctxParams = - ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, ¶ms); + ZSTD_CCtx_params cctxParams; + { + ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict); + ZSTD_CCtxParams_init_internal(&cctxParams, ¶ms, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : compressionLevel); + } DEBUGLOG(4, "ZSTD_compressBegin_usingDict (dictSize=%u)", (unsigned)dictSize); return ZSTD_compressBegin_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL, &cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, ZSTDb_not_buffered); @@ -3471,6 +4576,30 @@ static size_t ZSTD_writeEpilogue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity) return op-ostart; } +void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize) +{ +#if ZSTD_TRACE + if (cctx->traceCtx && ZSTD_trace_compress_end != NULL) { + int const streaming = cctx->inBuffSize > 0 || cctx->outBuffSize > 0 || cctx->appliedParams.nbWorkers > 0; + ZSTD_Trace trace; + ZSTD_memset(&trace, 0, sizeof(trace)); + trace.version = ZSTD_VERSION_NUMBER; + trace.streaming = streaming; + trace.dictionaryID = cctx->dictID; + trace.dictionarySize = cctx->dictContentSize; + trace.uncompressedSize = cctx->consumedSrcSize; + trace.compressedSize = cctx->producedCSize + extraCSize; + trace.params = &cctx->appliedParams; + trace.cctx = cctx; + ZSTD_trace_compress_end(cctx->traceCtx, &trace); + } + cctx->traceCtx = 0; +#else + (void)cctx; + (void)extraCSize; +#endif +} + size_t ZSTD_compressEnd (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize) @@ -3493,25 +4622,10 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx, (unsigned)cctx->pledgedSrcSizePlusOne-1, (unsigned)cctx->consumedSrcSize); } + ZSTD_CCtx_trace(cctx, endResult); return cSize + endResult; } -static size_t ZSTD_compress_internal (ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize, - const ZSTD_parameters* params) -{ - ZSTD_CCtx_params const cctxParams = - ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, params); - DEBUGLOG(4, "ZSTD_compress_internal"); - return ZSTD_compress_advanced_internal(cctx, - dst, dstCapacity, - src, srcSize, - dict, dictSize, - &cctxParams); -} - size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, @@ -3520,11 +4634,12 @@ size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx, { DEBUGLOG(4, "ZSTD_compress_advanced"); FORWARD_IF_ERROR(ZSTD_checkCParams(params.cParams), ""); - return ZSTD_compress_internal(cctx, - dst, dstCapacity, - src, srcSize, - dict, dictSize, - ¶ms); + ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, ¶ms, ZSTD_NO_CLEVEL); + return ZSTD_compress_advanced_internal(cctx, + dst, dstCapacity, + src, srcSize, + dict, dictSize, + &cctx->simpleApiParams); } /* Internal */ @@ -3548,11 +4663,13 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel) { - ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict); - ZSTD_CCtx_params cctxParams = ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, ¶ms); + { + ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict); + assert(params.fParams.contentSizeFlag == 1); + ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, ¶ms, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT: compressionLevel); + } DEBUGLOG(4, "ZSTD_compress_usingDict (srcSize=%u)", (unsigned)srcSize); - assert(params.fParams.contentSizeFlag == 1); - return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctxParams); + return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctx->simpleApiParams); } size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, @@ -3596,7 +4713,10 @@ size_t ZSTD_estimateCDictSize_advanced( DEBUGLOG(5, "sizeof(ZSTD_CDict) : %u", (unsigned)sizeof(ZSTD_CDict)); return ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict)) + ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE) - + ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0) + /* enableDedicatedDictSearch == 1 ensures that CDict estimation will not be too small + * in case we are using DDS with row-hash. */ + + ZSTD_sizeof_matchState(&cParams, ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams), + /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0) + (dictLoadMethod == ZSTD_dlm_byRef ? 0 : ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void *)))); } @@ -3627,9 +4747,6 @@ static size_t ZSTD_initCDict_internal( assert(!ZSTD_checkCParams(params.cParams)); cdict->matchState.cParams = params.cParams; cdict->matchState.dedicatedDictSearch = params.enableDedicatedDictSearch; - if (cdict->matchState.dedicatedDictSearch && dictSize > ZSTD_CHUNKSIZE_MAX) { - cdict->matchState.dedicatedDictSearch = 0; - } if ((dictLoadMethod == ZSTD_dlm_byRef) || (!dictBuffer) || (!dictSize)) { cdict->dictContent = dictBuffer; } else { @@ -3650,6 +4767,7 @@ static size_t ZSTD_initCDict_internal( &cdict->matchState, &cdict->workspace, ¶ms.cParams, + params.useRowMatchFinder, ZSTDcrp_makeClean, ZSTDirp_reset, ZSTD_resetTarget_CDict), ""); @@ -3673,14 +4791,17 @@ static size_t ZSTD_initCDict_internal( static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_compressionParameters cParams, ZSTD_customMem customMem) + ZSTD_compressionParameters cParams, + ZSTD_useRowMatchFinderMode_e useRowMatchFinder, + U32 enableDedicatedDictSearch, + ZSTD_customMem customMem) { if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL; { size_t const workspaceSize = ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict)) + ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE) + - ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0) + + ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, enableDedicatedDictSearch, /* forCCtx */ 0) + (dictLoadMethod == ZSTD_dlm_byRef ? 0 : ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*)))); void* const workspace = ZSTD_customMalloc(workspaceSize, customMem); @@ -3698,8 +4819,8 @@ static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize, assert(cdict != NULL); ZSTD_cwksp_move(&cdict->workspace, &ws); cdict->customMem = customMem; - cdict->compressionLevel = 0; /* signals advanced API usage */ - + cdict->compressionLevel = ZSTD_NO_CLEVEL; /* signals advanced API usage */ + cdict->useRowMatchFinder = useRowMatchFinder; return cdict; } } @@ -3751,10 +4872,13 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( &cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict); } + DEBUGLOG(3, "ZSTD_createCDict_advanced2: DDS: %u", cctxParams.enableDedicatedDictSearch); cctxParams.cParams = cParams; + cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams); cdict = ZSTD_createCDict_advanced_internal(dictSize, dictLoadMethod, cctxParams.cParams, + cctxParams.useRowMatchFinder, cctxParams.enableDedicatedDictSearch, customMem); if (ZSTD_isError( ZSTD_initCDict_internal(cdict, @@ -3823,7 +4947,9 @@ const ZSTD_CDict* ZSTD_initStaticCDict( ZSTD_dictContentType_e dictContentType, ZSTD_compressionParameters cParams) { - size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0); + ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams); + /* enableDedicatedDictSearch == 1 ensures matchstate is not too small in case this CDict will be used for DDS + row hash */ + size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0); size_t const neededSize = ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict)) + (dictLoadMethod == ZSTD_dlm_byRef ? 0 : ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*)))) @@ -3848,6 +4974,8 @@ const ZSTD_CDict* ZSTD_initStaticCDict( ZSTD_CCtxParams_init(¶ms, 0); params.cParams = cParams; + params.useRowMatchFinder = useRowMatchFinder; + cdict->useRowMatchFinder = useRowMatchFinder; if (ZSTD_isError( ZSTD_initCDict_internal(cdict, dict, dictSize, @@ -3874,62 +5002,88 @@ unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict) return cdict->dictID; } - -/* ZSTD_compressBegin_usingCDict_advanced() : - * cdict must be != NULL */ -size_t ZSTD_compressBegin_usingCDict_advanced( +/* ZSTD_compressBegin_usingCDict_internal() : + * Implementation of various ZSTD_compressBegin_usingCDict* functions. + */ +static size_t ZSTD_compressBegin_usingCDict_internal( ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize) { - DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_advanced"); + ZSTD_CCtx_params cctxParams; + DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_internal"); RETURN_ERROR_IF(cdict==NULL, dictionary_wrong, "NULL pointer!"); - { ZSTD_CCtx_params params = cctx->requestedParams; + /* Initialize the cctxParams from the cdict */ + { + ZSTD_parameters params; + params.fParams = fParams; params.cParams = ( pledgedSrcSize < ZSTD_USE_CDICT_PARAMS_SRCSIZE_CUTOFF || pledgedSrcSize < cdict->dictContentSize * ZSTD_USE_CDICT_PARAMS_DICTSIZE_MULTIPLIER || pledgedSrcSize == ZSTD_CONTENTSIZE_UNKNOWN - || cdict->compressionLevel == 0 ) - && (params.attachDictPref != ZSTD_dictForceLoad) ? + || cdict->compressionLevel == 0 ) ? ZSTD_getCParamsFromCDict(cdict) : ZSTD_getCParams(cdict->compressionLevel, pledgedSrcSize, cdict->dictContentSize); - /* Increase window log to fit the entire dictionary and source if the - * source size is known. Limit the increase to 19, which is the - * window log for compression level 1 with the largest source size. - */ - if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) { - U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19); - U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1; - params.cParams.windowLog = MAX(params.cParams.windowLog, limitedSrcLog); - } - params.fParams = fParams; - return ZSTD_compressBegin_internal(cctx, - NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast, - cdict, - ¶ms, pledgedSrcSize, - ZSTDb_not_buffered); + ZSTD_CCtxParams_init_internal(&cctxParams, ¶ms, cdict->compressionLevel); + } + /* Increase window log to fit the entire dictionary and source if the + * source size is known. Limit the increase to 19, which is the + * window log for compression level 1 with the largest source size. + */ + if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) { + U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19); + U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1; + cctxParams.cParams.windowLog = MAX(cctxParams.cParams.windowLog, limitedSrcLog); } + return ZSTD_compressBegin_internal(cctx, + NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast, + cdict, + &cctxParams, pledgedSrcSize, + ZSTDb_not_buffered); +} + + +/* ZSTD_compressBegin_usingCDict_advanced() : + * This function is DEPRECATED. + * cdict must be != NULL */ +size_t ZSTD_compressBegin_usingCDict_advanced( + ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, + ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize) +{ + return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, pledgedSrcSize); } /* ZSTD_compressBegin_usingCDict() : - * pledgedSrcSize=0 means "unknown" - * if pledgedSrcSize>0, it will enable contentSizeFlag */ + * cdict must be != NULL */ size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict) { ZSTD_frameParameters const fParams = { 0 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ }; - DEBUGLOG(4, "ZSTD_compressBegin_usingCDict : dictIDFlag == %u", !fParams.noDictIDFlag); - return ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN); + return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN); } -size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, +/*! ZSTD_compress_usingCDict_internal(): + * Implementation of various ZSTD_compress_usingCDict* functions. + */ +static size_t ZSTD_compress_usingCDict_internal(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, const ZSTD_CDict* cdict, ZSTD_frameParameters fParams) { - FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */ + FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */ return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize); } +/*! ZSTD_compress_usingCDict_advanced(): + * This function is DEPRECATED. + */ +size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict, ZSTD_frameParameters fParams) +{ + return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams); +} + /*! ZSTD_compress_usingCDict() : * Compression using a digested Dictionary. * Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times. @@ -3941,7 +5095,7 @@ size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict) { ZSTD_frameParameters const fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ }; - return ZSTD_compress_usingCDict_advanced(cctx, dst, dstCapacity, src, srcSize, cdict, fParams); + return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams); } @@ -4071,7 +5225,7 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, FORWARD_IF_ERROR( ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only) , ""); FORWARD_IF_ERROR( ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize) , ""); FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , ""); - zcs->requestedParams = ZSTD_assignParamsToCCtxParams(&zcs->requestedParams, ¶ms); + ZSTD_CCtxParams_setZstdParams(&zcs->requestedParams, ¶ms); FORWARD_IF_ERROR( ZSTD_CCtx_loadDictionary(zcs, dict, dictSize) , ""); return 0; } @@ -4351,8 +5505,13 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx, FORWARD_IF_ERROR( ZSTD_initLocalDict(cctx) , ""); /* Init the local dict if present. */ ZSTD_memset(&cctx->prefixDict, 0, sizeof(cctx->prefixDict)); /* single usage */ assert(prefixDict.dict==NULL || cctx->cdict==NULL); /* only one can be set */ - if (cctx->cdict) - params.compressionLevel = cctx->cdict->compressionLevel; /* let cdict take priority in terms of compression level */ + if (cctx->cdict && !cctx->localDict.cdict) { + /* Let the cdict's compression level take priority over the requested params. + * But do not take the cdict's compression level if the "cdict" is actually a localDict + * generated from ZSTD_initLocalDict(). + */ + params.compressionLevel = cctx->cdict->compressionLevel; + } DEBUGLOG(4, "ZSTD_compressStream2 : transparent init stage"); if (endOp == ZSTD_e_end) cctx->pledgedSrcSizePlusOne = inSize + 1; /* auto-fix pledgedSrcSize */ { @@ -4371,11 +5530,21 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx, params.ldmParams.enableLdm = 1; } + if (ZSTD_CParams_useBlockSplitter(¶ms.cParams)) { + DEBUGLOG(4, "Block splitter enabled by default (window size >= 128K, strategy >= btopt)"); + params.splitBlocks = 1; + } + + params.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params.useRowMatchFinder, ¶ms.cParams); + #ifdef ZSTD_MULTITHREAD if ((cctx->pledgedSrcSizePlusOne-1) <= ZSTDMT_JOBSIZE_MIN) { params.nbWorkers = 0; /* do not invoke multi-threading when src size is too small */ } if (params.nbWorkers > 0) { +#if ZSTD_TRACE + cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0; +#endif /* mt context creation */ if (cctx->mtctx == NULL) { DEBUGLOG(4, "ZSTD_compressStream2: creating new mtctx for nbWorkers=%u", @@ -4389,6 +5558,10 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx, cctx->mtctx, prefixDict.dict, prefixDict.dictSize, prefixDict.dictContentType, cctx->cdict, params, cctx->pledgedSrcSizePlusOne-1) , ""); + cctx->dictID = cctx->cdict ? cctx->cdict->dictID : 0; + cctx->dictContentSize = cctx->cdict ? cctx->cdict->dictContentSize : prefixDict.dictSize; + cctx->consumedSrcSize = 0; + cctx->producedCSize = 0; cctx->streamStage = zcss_load; cctx->appliedParams = params; } else @@ -4450,8 +5623,12 @@ size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, size_t const ipos = input->pos; size_t const opos = output->pos; flushMin = ZSTDMT_compressStream_generic(cctx->mtctx, output, input, endOp); + cctx->consumedSrcSize += (U64)(input->pos - ipos); + cctx->producedCSize += (U64)(output->pos - opos); if ( ZSTD_isError(flushMin) || (endOp == ZSTD_e_end && flushMin == 0) ) { /* compression completed */ + if (flushMin == 0) + ZSTD_CCtx_trace(cctx, 0); ZSTD_CCtx_reset(cctx, ZSTD_reset_session_only); } FORWARD_IF_ERROR(flushMin, "ZSTDMT_compressStream_generic failed"); @@ -4834,7 +6011,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx, continue; } - compressedSeqsSize = ZSTD_entropyCompressSequences(&cctx->seqStore, + compressedSeqsSize = ZSTD_entropyCompressSeqStore(&cctx->seqStore, &cctx->blockState.prevCBlock->entropy, &cctx->blockState.nextCBlock->entropy, &cctx->appliedParams, op + ZSTD_blockHeaderSize /* Leave space for block header */, dstCapacity - ZSTD_blockHeaderSize, @@ -4866,7 +6043,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx, } else { U32 cBlockHeader; /* Error checking and repcodes update */ - ZSTD_confirmRepcodesAndEntropyTables(cctx); + ZSTD_blockState_confirmRepcodesAndEntropyTables(&cctx->blockState); if (cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; @@ -4967,6 +6144,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output) #define ZSTD_MAX_CLEVEL 22 int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; } int ZSTD_minCLevel(void) { return (int)-ZSTD_TARGETLENGTH_MAX; } +int ZSTD_defaultCLevel(void) { return ZSTD_CLEVEL_DEFAULT; } static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = { { /* "default" - for any srcSize > 256 KB */ @@ -5099,7 +6277,10 @@ static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams(int const static int ZSTD_dedicatedDictSearch_isSupported( ZSTD_compressionParameters const* cParams) { - return (cParams->strategy >= ZSTD_greedy) && (cParams->strategy <= ZSTD_lazy2); + return (cParams->strategy >= ZSTD_greedy) + && (cParams->strategy <= ZSTD_lazy2) + && (cParams->hashLog > cParams->chainLog) + && (cParams->chainLog <= 24); } /** @@ -5117,6 +6298,9 @@ static void ZSTD_dedicatedDictSearch_revertCParams( case ZSTD_lazy: case ZSTD_lazy2: cParams->hashLog -= ZSTD_LAZY_DDSS_BUCKET_LOG; + if (cParams->hashLog < ZSTD_HASHLOG_MIN) { + cParams->hashLog = ZSTD_HASHLOG_MIN; + } break; case ZSTD_btlazy2: case ZSTD_btopt: @@ -5165,6 +6349,7 @@ static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel, else row = compressionLevel; { ZSTD_compressionParameters cp = ZSTD_defaultCParameters[tableID][row]; + DEBUGLOG(5, "ZSTD_getCParams_internal selected tableID: %u row: %u strat: %u", tableID, row, (U32)cp.strategy); /* acceleration factor */ if (compressionLevel < 0) { int const clampedCompressionLevel = MAX(ZSTD_minCLevel(), compressionLevel); diff --git a/thirdparty/zstd/compress/zstd_compress_internal.h b/thirdparty/zstd/compress/zstd_compress_internal.h index c04998b8b1..3b04fd09f6 100644 --- a/thirdparty/zstd/compress/zstd_compress_internal.h +++ b/thirdparty/zstd/compress/zstd_compress_internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -81,6 +81,53 @@ typedef struct { ZSTD_fseCTables_t fse; } ZSTD_entropyCTables_t; +/*********************************************** +* Entropy buffer statistics structs and funcs * +***********************************************/ +/** ZSTD_hufCTablesMetadata_t : + * Stores Literals Block Type for a super-block in hType, and + * huffman tree description in hufDesBuffer. + * hufDesSize refers to the size of huffman tree description in bytes. + * This metadata is populated in ZSTD_buildBlockEntropyStats_literals() */ +typedef struct { + symbolEncodingType_e hType; + BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE]; + size_t hufDesSize; +} ZSTD_hufCTablesMetadata_t; + +/** ZSTD_fseCTablesMetadata_t : + * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and + * fse tables in fseTablesBuffer. + * fseTablesSize refers to the size of fse tables in bytes. + * This metadata is populated in ZSTD_buildBlockEntropyStats_sequences() */ +typedef struct { + symbolEncodingType_e llType; + symbolEncodingType_e ofType; + symbolEncodingType_e mlType; + BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE]; + size_t fseTablesSize; + size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */ +} ZSTD_fseCTablesMetadata_t; + +typedef struct { + ZSTD_hufCTablesMetadata_t hufMetadata; + ZSTD_fseCTablesMetadata_t fseMetadata; +} ZSTD_entropyCTablesMetadata_t; + +/** ZSTD_buildBlockEntropyStats() : + * Builds entropy for the block. + * @return : 0 on success or error code */ +size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr, + const ZSTD_entropyCTables_t* prevEntropy, + ZSTD_entropyCTables_t* nextEntropy, + const ZSTD_CCtx_params* cctxParams, + ZSTD_entropyCTablesMetadata_t* entropyMetadata, + void* workspace, size_t wkspSize); + +/********************************* +* Compression internals structs * +*********************************/ + typedef struct { U32 off; /* Offset code (offset + ZSTD_REP_MOVE) for the match */ U32 len; /* Raw length of match */ @@ -141,14 +188,21 @@ typedef struct { } ZSTD_compressedBlockState_t; typedef struct { - BYTE const* nextSrc; /* next block here to continue on current prefix */ - BYTE const* base; /* All regular indexes relative to this position */ - BYTE const* dictBase; /* extDict indexes relative to this position */ - U32 dictLimit; /* below that point, need extDict */ - U32 lowLimit; /* below that point, no more valid data */ + BYTE const* nextSrc; /* next block here to continue on current prefix */ + BYTE const* base; /* All regular indexes relative to this position */ + BYTE const* dictBase; /* extDict indexes relative to this position */ + U32 dictLimit; /* below that point, need extDict */ + U32 lowLimit; /* below that point, no more valid data */ + U32 nbOverflowCorrections; /* Number of times overflow correction has run since + * ZSTD_window_init(). Useful for debugging coredumps + * and for ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY. + */ } ZSTD_window_t; typedef struct ZSTD_matchState_t ZSTD_matchState_t; + +#define ZSTD_ROW_HASH_CACHE_SIZE 8 /* Size of prefetching hash cache for row-based matchfinder */ + struct ZSTD_matchState_t { ZSTD_window_t window; /* State for window round buffer management */ U32 loadedDictEnd; /* index of end of dictionary, within context's referential. @@ -160,9 +214,17 @@ struct ZSTD_matchState_t { */ U32 nextToUpdate; /* index from which to continue table update */ U32 hashLog3; /* dispatch table for matches of len==3 : larger == faster, more memory */ + + U32 rowHashLog; /* For row-based matchfinder: Hashlog based on nb of rows in the hashTable.*/ + U16* tagTable; /* For row-based matchFinder: A row-based table containing the hashes and head index. */ + U32 hashCache[ZSTD_ROW_HASH_CACHE_SIZE]; /* For row-based matchFinder: a cache of hashes to improve speed */ + U32* hashTable; U32* hashTable3; U32* chainTable; + + U32 forceNonContiguous; /* Non-zero if we should force non-contiguous load for the next window update. */ + int dedicatedDictSearch; /* Indicates whether this matchState is using the * dedicated dictionary search structure. */ @@ -184,12 +246,21 @@ typedef struct { } ldmEntry_t; typedef struct { + BYTE const* split; + U32 hash; + U32 checksum; + ldmEntry_t* bucket; +} ldmMatchCandidate_t; + +#define LDM_BATCH_SIZE 64 + +typedef struct { ZSTD_window_t window; /* State for the window round buffer management */ ldmEntry_t* hashTable; U32 loadedDictEnd; BYTE* bucketOffsets; /* Next position in bucket to insert entry */ - U64 hashPower; /* Used to compute the rolling hash. - * Depends on ldmParams.minMatchLength */ + size_t splitIndices[LDM_BATCH_SIZE]; + ldmMatchCandidate_t matchCandidates[LDM_BATCH_SIZE]; } ldmState_t; typedef struct { @@ -246,6 +317,15 @@ struct ZSTD_CCtx_params_s { ZSTD_sequenceFormat_e blockDelimiters; int validateSequences; + /* Block splitting */ + int splitBlocks; + + /* Param for deciding whether to use row-based matchfinder */ + ZSTD_useRowMatchFinderMode_e useRowMatchFinder; + + /* Always load a dictionary in ext-dict mode (not prefix mode)? */ + int deterministicRefPrefix; + /* Internal use, for createCCtxParams() and freeCCtxParams() only */ ZSTD_customMem customMem; }; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */ @@ -269,7 +349,9 @@ struct ZSTD_CCtx_s { int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */ ZSTD_CCtx_params requestedParams; ZSTD_CCtx_params appliedParams; + ZSTD_CCtx_params simpleApiParams; /* Param storage used by the simple API - not sticky. Must only be used in top-level simple API functions for storage. */ U32 dictID; + size_t dictContentSize; ZSTD_cwksp workspace; /* manages buffer for dynamic allocations */ size_t blockSize; @@ -321,6 +403,11 @@ struct ZSTD_CCtx_s { #ifdef ZSTD_MULTITHREAD ZSTDMT_CCtx* mtctx; #endif + + /* Tracing */ +#if ZSTD_TRACE + ZSTD_TraceCtx traceCtx; +#endif }; typedef enum { ZSTD_dtlm_fast, ZSTD_dtlm_full } ZSTD_dictTableLoadMethod_e; @@ -355,7 +442,7 @@ typedef enum { typedef size_t (*ZSTD_blockCompressor) ( ZSTD_matchState_t* bs, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); -ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode); +ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e rowMatchfinderMode, ZSTD_dictMode_e dictMode); MEM_STATIC U32 ZSTD_LLcode(U32 litLength) @@ -532,8 +619,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera /* literal Length */ if (litLength>0xFFFF) { - assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */ - seqStorePtr->longLengthID = 1; + assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */ + seqStorePtr->longLengthType = ZSTD_llt_literalLength; seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart); } seqStorePtr->sequences[0].litLength = (U16)litLength; @@ -543,8 +630,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera /* match Length */ if (mlBase>0xFFFF) { - assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */ - seqStorePtr->longLengthID = 2; + assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */ + seqStorePtr->longLengthType = ZSTD_llt_matchLength; seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart); } seqStorePtr->sequences[0].matchLength = (U16)mlBase; @@ -795,6 +882,13 @@ MEM_STATIC void ZSTD_window_clear(ZSTD_window_t* window) window->dictLimit = end; } +MEM_STATIC U32 ZSTD_window_isEmpty(ZSTD_window_t const window) +{ + return window.dictLimit == 1 && + window.lowLimit == 1 && + (window.nextSrc - window.base) == 1; +} + /** * ZSTD_window_hasExtDict(): * Returns non-zero if the window has a non-empty extDict. @@ -818,15 +912,69 @@ MEM_STATIC ZSTD_dictMode_e ZSTD_matchState_dictMode(const ZSTD_matchState_t *ms) ZSTD_noDict; } +/* Defining this macro to non-zero tells zstd to run the overflow correction + * code much more frequently. This is very inefficient, and should only be + * used for tests and fuzzers. + */ +#ifndef ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY +# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 1 +# else +# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 0 +# endif +#endif + +/** + * ZSTD_window_canOverflowCorrect(): + * Returns non-zero if the indices are large enough for overflow correction + * to work correctly without impacting compression ratio. + */ +MEM_STATIC U32 ZSTD_window_canOverflowCorrect(ZSTD_window_t const window, + U32 cycleLog, + U32 maxDist, + U32 loadedDictEnd, + void const* src) +{ + U32 const cycleSize = 1u << cycleLog; + U32 const curr = (U32)((BYTE const*)src - window.base); + U32 const minIndexToOverflowCorrect = cycleSize + MAX(maxDist, cycleSize); + + /* Adjust the min index to backoff the overflow correction frequency, + * so we don't waste too much CPU in overflow correction. If this + * computation overflows we don't really care, we just need to make + * sure it is at least minIndexToOverflowCorrect. + */ + U32 const adjustment = window.nbOverflowCorrections + 1; + U32 const adjustedIndex = MAX(minIndexToOverflowCorrect * adjustment, + minIndexToOverflowCorrect); + U32 const indexLargeEnough = curr > adjustedIndex; + + /* Only overflow correct early if the dictionary is invalidated already, + * so we don't hurt compression ratio. + */ + U32 const dictionaryInvalidated = curr > maxDist + loadedDictEnd; + + return indexLargeEnough && dictionaryInvalidated; +} + /** * ZSTD_window_needOverflowCorrection(): * Returns non-zero if the indices are getting too large and need overflow * protection. */ MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window, + U32 cycleLog, + U32 maxDist, + U32 loadedDictEnd, + void const* src, void const* srcEnd) { U32 const curr = (U32)((BYTE const*)srcEnd - window.base); + if (ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) { + if (ZSTD_window_canOverflowCorrect(window, cycleLog, maxDist, loadedDictEnd, src)) { + return 1; + } + } return curr > ZSTD_CURRENT_MAX; } @@ -838,7 +986,6 @@ MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window, * * The least significant cycleLog bits of the indices must remain the same, * which may be 0. Every index up to maxDist in the past must be valid. - * NOTE: (maxDist & cycleMask) must be zero. */ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog, U32 maxDist, void const* src) @@ -862,17 +1009,25 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog, * 3. (cctx->lowLimit + 1<<windowLog) < 1<<32: * windowLog <= 31 ==> 3<<29 + 1<<windowLog < 7<<29 < 1<<32. */ - U32 const cycleMask = (1U << cycleLog) - 1; + U32 const cycleSize = 1u << cycleLog; + U32 const cycleMask = cycleSize - 1; U32 const curr = (U32)((BYTE const*)src - window->base); U32 const currentCycle0 = curr & cycleMask; /* Exclude zero so that newCurrent - maxDist >= 1. */ - U32 const currentCycle1 = currentCycle0 == 0 ? (1U << cycleLog) : currentCycle0; - U32 const newCurrent = currentCycle1 + maxDist; + U32 const currentCycle1 = currentCycle0 == 0 ? cycleSize : currentCycle0; + U32 const newCurrent = currentCycle1 + MAX(maxDist, cycleSize); U32 const correction = curr - newCurrent; - assert((maxDist & cycleMask) == 0); + /* maxDist must be a power of two so that: + * (newCurrent & cycleMask) == (curr & cycleMask) + * This is required to not corrupt the chains / binary tree. + */ + assert((maxDist & (maxDist - 1)) == 0); + assert((curr & cycleMask) == (newCurrent & cycleMask)); assert(curr > newCurrent); - /* Loose bound, should be around 1<<29 (see above) */ - assert(correction > 1<<28); + if (!ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) { + /* Loose bound, should be around 1<<29 (see above) */ + assert(correction > 1<<28); + } window->base += correction; window->dictBase += correction; @@ -888,6 +1043,8 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog, assert(window->lowLimit <= newCurrent); assert(window->dictLimit <= newCurrent); + ++window->nbOverflowCorrections; + DEBUGLOG(4, "Correction of 0x%x bytes to lowLimit=0x%x", correction, window->lowLimit); return correction; @@ -997,6 +1154,7 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) { window->dictLimit = 1; /* start from 1, so that 1st position is valid */ window->lowLimit = 1; /* it ensures first and later CCtx usages compress the same */ window->nextSrc = window->base + 1; /* see issue #1241 */ + window->nbOverflowCorrections = 0; } /** @@ -1007,7 +1165,8 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) { * Returns non-zero if the segment is contiguous. */ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window, - void const* src, size_t srcSize) + void const* src, size_t srcSize, + int forceNonContiguous) { BYTE const* const ip = (BYTE const*)src; U32 contiguous = 1; @@ -1017,7 +1176,7 @@ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window, assert(window->base != NULL); assert(window->dictBase != NULL); /* Check if blocks follow each other */ - if (src != window->nextSrc) { + if (src != window->nextSrc || forceNonContiguous) { /* not contiguous */ size_t const distanceFromBase = (size_t)(window->nextSrc - window->base); DEBUGLOG(5, "Non contiguous blocks, new segment starts at %u", window->dictLimit); @@ -1200,4 +1359,9 @@ size_t ZSTD_referenceExternalSequences(ZSTD_CCtx* cctx, rawSeq* seq, size_t nbSe * condition for correct operation : hashLog > 1 */ U32 ZSTD_cycleLog(U32 hashLog, ZSTD_strategy strat); +/** ZSTD_CCtx_trace() : + * Trace the end of a compression call. + */ +void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize); + #endif /* ZSTD_COMPRESS_H */ diff --git a/thirdparty/zstd/compress/zstd_compress_literals.c b/thirdparty/zstd/compress/zstd_compress_literals.c index 6dd1c1447a..008337bb1b 100644 --- a/thirdparty/zstd/compress/zstd_compress_literals.c +++ b/thirdparty/zstd/compress/zstd_compress_literals.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -15,7 +15,7 @@ size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize) { - BYTE* const ostart = (BYTE* const)dst; + BYTE* const ostart = (BYTE*)dst; U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); RETURN_ERROR_IF(srcSize + flSize > dstCapacity, dstSize_tooSmall, ""); @@ -42,7 +42,7 @@ size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize) { - BYTE* const ostart = (BYTE* const)dst; + BYTE* const ostart = (BYTE*)dst; U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); (void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */ @@ -117,7 +117,7 @@ size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf, } } - if ((cLitSize==0) | (cLitSize >= srcSize - minGain) | ERR_isError(cLitSize)) { + if ((cLitSize==0) || (cLitSize >= srcSize - minGain) || ERR_isError(cLitSize)) { ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); } diff --git a/thirdparty/zstd/compress/zstd_compress_literals.h b/thirdparty/zstd/compress/zstd_compress_literals.h index 8b08705743..9904c0cd30 100644 --- a/thirdparty/zstd/compress/zstd_compress_literals.h +++ b/thirdparty/zstd/compress/zstd_compress_literals.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.c b/thirdparty/zstd/compress/zstd_compress_sequences.c index be30c08c6b..611eabdcbb 100644 --- a/thirdparty/zstd/compress/zstd_compress_sequences.c +++ b/thirdparty/zstd/compress/zstd_compress_sequences.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -85,6 +85,8 @@ static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t { unsigned cost = 0; unsigned s; + + assert(total > 0); for (s = 0; s <= max; ++s) { unsigned norm = (unsigned)((256 * count[s]) / total); if (count[s] != 0 && norm == 0) @@ -232,6 +234,11 @@ ZSTD_selectEncodingType( return set_compressed; } +typedef struct { + S16 norm[MaxSeq + 1]; + U32 wksp[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(MaxSeq, MaxFSELog)]; +} ZSTD_BuildCTableWksp; + size_t ZSTD_buildCTable(void* dst, size_t dstCapacity, FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type, @@ -258,7 +265,7 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity, FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, defaultNorm, defaultMax, defaultNormLog, entropyWorkspace, entropyWorkspaceSize), ""); /* note : could be pre-calculated */ return 0; case set_compressed: { - S16 norm[MaxSeq + 1]; + ZSTD_BuildCTableWksp* wksp = (ZSTD_BuildCTableWksp*)entropyWorkspace; size_t nbSeq_1 = nbSeq; const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); if (count[codeTable[nbSeq-1]] > 1) { @@ -266,11 +273,12 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity, nbSeq_1--; } assert(nbSeq_1 > 1); - assert(entropyWorkspaceSize >= FSE_BUILD_CTABLE_WORKSPACE_SIZE(MaxSeq, MaxFSELog)); - FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), ""); - { size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */ + assert(entropyWorkspaceSize >= sizeof(ZSTD_BuildCTableWksp)); + (void)entropyWorkspaceSize; + FORWARD_IF_ERROR(FSE_normalizeCount(wksp->norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), ""); + { size_t const NCountSize = FSE_writeNCount(op, oend - op, wksp->norm, max, tableLog); /* overflow protected */ FORWARD_IF_ERROR(NCountSize, "FSE_writeNCount failed"); - FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, norm, max, tableLog, entropyWorkspace, entropyWorkspaceSize), ""); + FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, wksp->norm, max, tableLog, wksp->wksp, sizeof(wksp->wksp)), ""); return NCountSize; } } diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.h b/thirdparty/zstd/compress/zstd_compress_sequences.h index 68c6f9a5ac..7991364c2f 100644 --- a/thirdparty/zstd/compress/zstd_compress_sequences.h +++ b/thirdparty/zstd/compress/zstd_compress_sequences.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.c b/thirdparty/zstd/compress/zstd_compress_superblock.c index e23e619eef..e4e45069bc 100644 --- a/thirdparty/zstd/compress/zstd_compress_superblock.c +++ b/thirdparty/zstd/compress/zstd_compress_superblock.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -15,288 +15,10 @@ #include "../common/zstd_internal.h" /* ZSTD_getSequenceLength */ #include "hist.h" /* HIST_countFast_wksp */ -#include "zstd_compress_internal.h" +#include "zstd_compress_internal.h" /* ZSTD_[huf|fse|entropy]CTablesMetadata_t */ #include "zstd_compress_sequences.h" #include "zstd_compress_literals.h" -/*-************************************* -* Superblock entropy buffer structs -***************************************/ -/** ZSTD_hufCTablesMetadata_t : - * Stores Literals Block Type for a super-block in hType, and - * huffman tree description in hufDesBuffer. - * hufDesSize refers to the size of huffman tree description in bytes. - * This metadata is populated in ZSTD_buildSuperBlockEntropy_literal() */ -typedef struct { - symbolEncodingType_e hType; - BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE]; - size_t hufDesSize; -} ZSTD_hufCTablesMetadata_t; - -/** ZSTD_fseCTablesMetadata_t : - * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and - * fse tables in fseTablesBuffer. - * fseTablesSize refers to the size of fse tables in bytes. - * This metadata is populated in ZSTD_buildSuperBlockEntropy_sequences() */ -typedef struct { - symbolEncodingType_e llType; - symbolEncodingType_e ofType; - symbolEncodingType_e mlType; - BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE]; - size_t fseTablesSize; - size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_compressSubBlock_sequences() */ -} ZSTD_fseCTablesMetadata_t; - -typedef struct { - ZSTD_hufCTablesMetadata_t hufMetadata; - ZSTD_fseCTablesMetadata_t fseMetadata; -} ZSTD_entropyCTablesMetadata_t; - - -/** ZSTD_buildSuperBlockEntropy_literal() : - * Builds entropy for the super-block literals. - * Stores literals block type (raw, rle, compressed, repeat) and - * huffman description table to hufMetadata. - * @return : size of huffman description table or error code */ -static size_t ZSTD_buildSuperBlockEntropy_literal(void* const src, size_t srcSize, - const ZSTD_hufCTables_t* prevHuf, - ZSTD_hufCTables_t* nextHuf, - ZSTD_hufCTablesMetadata_t* hufMetadata, - const int disableLiteralsCompression, - void* workspace, size_t wkspSize) -{ - BYTE* const wkspStart = (BYTE*)workspace; - BYTE* const wkspEnd = wkspStart + wkspSize; - BYTE* const countWkspStart = wkspStart; - unsigned* const countWksp = (unsigned*)workspace; - const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned); - BYTE* const nodeWksp = countWkspStart + countWkspSize; - const size_t nodeWkspSize = wkspEnd-nodeWksp; - unsigned maxSymbolValue = 255; - unsigned huffLog = HUF_TABLELOG_DEFAULT; - HUF_repeat repeat = prevHuf->repeatMode; - - DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_literal (srcSize=%zu)", srcSize); - - /* Prepare nextEntropy assuming reusing the existing table */ - ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - - if (disableLiteralsCompression) { - DEBUGLOG(5, "set_basic - disabled"); - hufMetadata->hType = set_basic; - return 0; - } - - /* small ? don't even attempt compression (speed opt) */ -# define COMPRESS_LITERALS_SIZE_MIN 63 - { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN; - if (srcSize <= minLitSize) { - DEBUGLOG(5, "set_basic - too small"); - hufMetadata->hType = set_basic; - return 0; - } - } - - /* Scan input and build symbol stats */ - { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize); - FORWARD_IF_ERROR(largest, "HIST_count_wksp failed"); - if (largest == srcSize) { - DEBUGLOG(5, "set_rle"); - hufMetadata->hType = set_rle; - return 0; - } - if (largest <= (srcSize >> 7)+4) { - DEBUGLOG(5, "set_basic - no gain"); - hufMetadata->hType = set_basic; - return 0; - } - } - - /* Validate the previous Huffman table */ - if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) { - repeat = HUF_repeat_none; - } - - /* Build Huffman Tree */ - ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable)); - huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue); - { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp, - maxSymbolValue, huffLog, - nodeWksp, nodeWkspSize); - FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp"); - huffLog = (U32)maxBits; - { /* Build and write the CTable */ - size_t const newCSize = HUF_estimateCompressedSize( - (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue); - size_t const hSize = HUF_writeCTable( - hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer), - (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog); - /* Check against repeating the previous CTable */ - if (repeat != HUF_repeat_none) { - size_t const oldCSize = HUF_estimateCompressedSize( - (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue); - if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) { - DEBUGLOG(5, "set_repeat - smaller"); - ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - hufMetadata->hType = set_repeat; - return 0; - } - } - if (newCSize + hSize >= srcSize) { - DEBUGLOG(5, "set_basic - no gains"); - ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - hufMetadata->hType = set_basic; - return 0; - } - DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize); - hufMetadata->hType = set_compressed; - nextHuf->repeatMode = HUF_repeat_check; - return hSize; - } - } -} - -/** ZSTD_buildSuperBlockEntropy_sequences() : - * Builds entropy for the super-block sequences. - * Stores symbol compression modes and fse table to fseMetadata. - * @return : size of fse tables or error code */ -static size_t ZSTD_buildSuperBlockEntropy_sequences(seqStore_t* seqStorePtr, - const ZSTD_fseCTables_t* prevEntropy, - ZSTD_fseCTables_t* nextEntropy, - const ZSTD_CCtx_params* cctxParams, - ZSTD_fseCTablesMetadata_t* fseMetadata, - void* workspace, size_t wkspSize) -{ - BYTE* const wkspStart = (BYTE*)workspace; - BYTE* const wkspEnd = wkspStart + wkspSize; - BYTE* const countWkspStart = wkspStart; - unsigned* const countWksp = (unsigned*)workspace; - const size_t countWkspSize = (MaxSeq + 1) * sizeof(unsigned); - BYTE* const cTableWksp = countWkspStart + countWkspSize; - const size_t cTableWkspSize = wkspEnd-cTableWksp; - ZSTD_strategy const strategy = cctxParams->cParams.strategy; - FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable; - FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable; - FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable; - const BYTE* const ofCodeTable = seqStorePtr->ofCode; - const BYTE* const llCodeTable = seqStorePtr->llCode; - const BYTE* const mlCodeTable = seqStorePtr->mlCode; - size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart; - BYTE* const ostart = fseMetadata->fseTablesBuffer; - BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer); - BYTE* op = ostart; - - assert(cTableWkspSize >= (1 << MaxFSELog) * sizeof(FSE_FUNCTION_TYPE)); - DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_sequences (nbSeq=%zu)", nbSeq); - ZSTD_memset(workspace, 0, wkspSize); - - fseMetadata->lastCountSize = 0; - /* convert length/distances into codes */ - ZSTD_seqToCodes(seqStorePtr); - /* build CTable for Literal Lengths */ - { U32 LLtype; - unsigned max = MaxLL; - size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, llCodeTable, nbSeq, workspace, wkspSize); /* can't fail */ - DEBUGLOG(5, "Building LL table"); - nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode; - LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode, - countWksp, max, mostFrequent, nbSeq, - LLFSELog, prevEntropy->litlengthCTable, - LL_defaultNorm, LL_defaultNormLog, - ZSTD_defaultAllowed, strategy); - assert(set_basic < set_compressed && set_rle < set_compressed); - assert(!(LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype, - countWksp, max, llCodeTable, nbSeq, LL_defaultNorm, LL_defaultNormLog, MaxLL, - prevEntropy->litlengthCTable, sizeof(prevEntropy->litlengthCTable), - cTableWksp, cTableWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed"); - if (LLtype == set_compressed) - fseMetadata->lastCountSize = countSize; - op += countSize; - fseMetadata->llType = (symbolEncodingType_e) LLtype; - } } - /* build CTable for Offsets */ - { U32 Offtype; - unsigned max = MaxOff; - size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, ofCodeTable, nbSeq, workspace, wkspSize); /* can't fail */ - /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */ - ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed; - DEBUGLOG(5, "Building OF table"); - nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode; - Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode, - countWksp, max, mostFrequent, nbSeq, - OffFSELog, prevEntropy->offcodeCTable, - OF_defaultNorm, OF_defaultNormLog, - defaultPolicy, strategy); - assert(!(Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype, - countWksp, max, ofCodeTable, nbSeq, OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, - prevEntropy->offcodeCTable, sizeof(prevEntropy->offcodeCTable), - cTableWksp, cTableWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed"); - if (Offtype == set_compressed) - fseMetadata->lastCountSize = countSize; - op += countSize; - fseMetadata->ofType = (symbolEncodingType_e) Offtype; - } } - /* build CTable for MatchLengths */ - { U32 MLtype; - unsigned max = MaxML; - size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, mlCodeTable, nbSeq, workspace, wkspSize); /* can't fail */ - DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op)); - nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode; - MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode, - countWksp, max, mostFrequent, nbSeq, - MLFSELog, prevEntropy->matchlengthCTable, - ML_defaultNorm, ML_defaultNormLog, - ZSTD_defaultAllowed, strategy); - assert(!(MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype, - countWksp, max, mlCodeTable, nbSeq, ML_defaultNorm, ML_defaultNormLog, MaxML, - prevEntropy->matchlengthCTable, sizeof(prevEntropy->matchlengthCTable), - cTableWksp, cTableWkspSize); - FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed"); - if (MLtype == set_compressed) - fseMetadata->lastCountSize = countSize; - op += countSize; - fseMetadata->mlType = (symbolEncodingType_e) MLtype; - } } - assert((size_t) (op-ostart) <= sizeof(fseMetadata->fseTablesBuffer)); - return op-ostart; -} - - -/** ZSTD_buildSuperBlockEntropy() : - * Builds entropy for the super-block. - * @return : 0 on success or error code */ -static size_t -ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr, - const ZSTD_entropyCTables_t* prevEntropy, - ZSTD_entropyCTables_t* nextEntropy, - const ZSTD_CCtx_params* cctxParams, - ZSTD_entropyCTablesMetadata_t* entropyMetadata, - void* workspace, size_t wkspSize) -{ - size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart; - DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy"); - entropyMetadata->hufMetadata.hufDesSize = - ZSTD_buildSuperBlockEntropy_literal(seqStorePtr->litStart, litSize, - &prevEntropy->huf, &nextEntropy->huf, - &entropyMetadata->hufMetadata, - ZSTD_disableLiteralsCompression(cctxParams), - workspace, wkspSize); - FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildSuperBlockEntropy_literal failed"); - entropyMetadata->fseMetadata.fseTablesSize = - ZSTD_buildSuperBlockEntropy_sequences(seqStorePtr, - &prevEntropy->fse, &nextEntropy->fse, - cctxParams, - &entropyMetadata->fseMetadata, - workspace, wkspSize); - FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildSuperBlockEntropy_sequences failed"); - return 0; -} - /** ZSTD_compressSubBlock_literal() : * Compresses literals section for a sub-block. * When we have to write the Huffman table we will sometimes choose a header @@ -304,7 +26,7 @@ ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr, * before we know the table size + compressed size, so we have a bound on the * table size. If we guessed incorrectly, we fall back to uncompressed literals. * - * We write the header when writeEntropy=1 and set entropyWrriten=1 when we succeeded + * We write the header when writeEntropy=1 and set entropyWritten=1 when we succeeded * in writing the header, otherwise it is set to 0. * * hufMetadata->hType has literals block type info. @@ -643,8 +365,9 @@ static size_t ZSTD_estimateSubBlockSize_sequences(const BYTE* ofCodeTable, void* workspace, size_t wkspSize, int writeEntropy) { - size_t sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */ + size_t const sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */ size_t cSeqSizeEstimate = 0; + if (nbSeq == 0) return sequencesSectionHeaderSize; cSeqSizeEstimate += ZSTD_estimateSubBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, MaxOff, nbSeq, fseTables->offcodeCTable, NULL, OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, @@ -830,7 +553,7 @@ size_t ZSTD_compressSuperBlock(ZSTD_CCtx* zc, unsigned lastBlock) { ZSTD_entropyCTablesMetadata_t entropyMetadata; - FORWARD_IF_ERROR(ZSTD_buildSuperBlockEntropy(&zc->seqStore, + FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(&zc->seqStore, &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy, &zc->appliedParams, diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.h b/thirdparty/zstd/compress/zstd_compress_superblock.h index 07f4cb1dc6..176f9b106f 100644 --- a/thirdparty/zstd/compress/zstd_compress_superblock.h +++ b/thirdparty/zstd/compress/zstd_compress_superblock.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_cwksp.h b/thirdparty/zstd/compress/zstd_cwksp.h index d65170b39c..2656d26ca2 100644 --- a/thirdparty/zstd/compress/zstd_cwksp.h +++ b/thirdparty/zstd/compress/zstd_cwksp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -35,6 +35,10 @@ extern "C" { #define ZSTD_CWKSP_ASAN_REDZONE_SIZE 128 #endif + +/* Set our tables and aligneds to align by 64 bytes */ +#define ZSTD_CWKSP_ALIGNMENT_BYTES 64 + /*-************************************* * Structures ***************************************/ @@ -117,10 +121,11 @@ typedef enum { * - Tables: these are any of several different datastructures (hash tables, * chain tables, binary trees) that all respect a common format: they are * uint32_t arrays, all of whose values are between 0 and (nextSrc - base). - * Their sizes depend on the cparams. + * Their sizes depend on the cparams. These tables are 64-byte aligned. * * - Aligned: these buffers are used for various purposes that require 4 byte - * alignment, but don't require any initialization before they're used. + * alignment, but don't require any initialization before they're used. These + * buffers are each aligned to 64 bytes. * * - Buffers: these buffers are used for various purposes that don't require * any alignment or initialization before they're used. This means they can @@ -133,8 +138,7 @@ typedef enum { * * 1. Objects * 2. Buffers - * 3. Aligned - * 4. Tables + * 3. Aligned/Tables * * Attempts to reserve objects of different types out of order will fail. */ @@ -187,6 +191,8 @@ MEM_STATIC size_t ZSTD_cwksp_align(size_t size, size_t const align) { * Since tables aren't currently redzoned, you don't need to call through this * to figure out how much space you need for the matchState tables. Everything * else is though. + * + * Do not use for sizing aligned buffers. Instead, use ZSTD_cwksp_aligned_alloc_size(). */ MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) { if (size == 0) @@ -198,30 +204,110 @@ MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) { #endif } -MEM_STATIC void ZSTD_cwksp_internal_advance_phase( +/** + * Returns an adjusted alloc size that is the nearest larger multiple of 64 bytes. + * Used to determine the number of bytes required for a given "aligned". + */ +MEM_STATIC size_t ZSTD_cwksp_aligned_alloc_size(size_t size) { + return ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(size, ZSTD_CWKSP_ALIGNMENT_BYTES)); +} + +/** + * Returns the amount of additional space the cwksp must allocate + * for internal purposes (currently only alignment). + */ +MEM_STATIC size_t ZSTD_cwksp_slack_space_required(void) { + /* For alignment, the wksp will always allocate an additional n_1=[1, 64] bytes + * to align the beginning of tables section, as well as another n_2=[0, 63] bytes + * to align the beginning of the aligned secion. + * + * n_1 + n_2 == 64 bytes if the cwksp is freshly allocated, due to tables and + * aligneds being sized in multiples of 64 bytes. + */ + size_t const slackSpace = ZSTD_CWKSP_ALIGNMENT_BYTES; + return slackSpace; +} + + +/** + * Return the number of additional bytes required to align a pointer to the given number of bytes. + * alignBytes must be a power of two. + */ +MEM_STATIC size_t ZSTD_cwksp_bytes_to_align_ptr(void* ptr, const size_t alignBytes) { + size_t const alignBytesMask = alignBytes - 1; + size_t const bytes = (alignBytes - ((size_t)ptr & (alignBytesMask))) & alignBytesMask; + assert((alignBytes & alignBytesMask) == 0); + assert(bytes != ZSTD_CWKSP_ALIGNMENT_BYTES); + return bytes; +} + +/** + * Internal function. Do not use directly. + * Reserves the given number of bytes within the aligned/buffer segment of the wksp, which + * counts from the end of the wksp. (as opposed to the object/table segment) + * + * Returns a pointer to the beginning of that space. + */ +MEM_STATIC void* ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp* ws, size_t const bytes) { + void* const alloc = (BYTE*)ws->allocStart - bytes; + void* const bottom = ws->tableEnd; + DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining", + alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes); + ZSTD_cwksp_assert_internal_consistency(ws); + assert(alloc >= bottom); + if (alloc < bottom) { + DEBUGLOG(4, "cwksp: alloc failed!"); + ws->allocFailed = 1; + return NULL; + } + if (alloc < ws->tableValidEnd) { + ws->tableValidEnd = alloc; + } + ws->allocStart = alloc; + return alloc; +} + +/** + * Moves the cwksp to the next phase, and does any necessary allocations. + * Returns a 0 on success, or zstd error + */ +MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase( ZSTD_cwksp* ws, ZSTD_cwksp_alloc_phase_e phase) { assert(phase >= ws->phase); if (phase > ws->phase) { + /* Going from allocating objects to allocating buffers */ if (ws->phase < ZSTD_cwksp_alloc_buffers && phase >= ZSTD_cwksp_alloc_buffers) { ws->tableValidEnd = ws->objectEnd; } + + /* Going from allocating buffers to allocating aligneds/tables */ if (ws->phase < ZSTD_cwksp_alloc_aligned && phase >= ZSTD_cwksp_alloc_aligned) { - /* If unaligned allocations down from a too-large top have left us - * unaligned, we need to realign our alloc ptr. Technically, this - * can consume space that is unaccounted for in the neededSpace - * calculation. However, I believe this can only happen when the - * workspace is too large, and specifically when it is too large - * by a larger margin than the space that will be consumed. */ - /* TODO: cleaner, compiler warning friendly way to do this??? */ - ws->allocStart = (BYTE*)ws->allocStart - ((size_t)ws->allocStart & (sizeof(U32)-1)); - if (ws->allocStart < ws->tableValidEnd) { - ws->tableValidEnd = ws->allocStart; + { /* Align the start of the "aligned" to 64 bytes. Use [1, 64] bytes. */ + size_t const bytesToAlign = + ZSTD_CWKSP_ALIGNMENT_BYTES - ZSTD_cwksp_bytes_to_align_ptr(ws->allocStart, ZSTD_CWKSP_ALIGNMENT_BYTES); + DEBUGLOG(5, "reserving aligned alignment addtl space: %zu", bytesToAlign); + ZSTD_STATIC_ASSERT((ZSTD_CWKSP_ALIGNMENT_BYTES & (ZSTD_CWKSP_ALIGNMENT_BYTES - 1)) == 0); /* power of 2 */ + RETURN_ERROR_IF(!ZSTD_cwksp_reserve_internal_buffer_space(ws, bytesToAlign), + memory_allocation, "aligned phase - alignment initial allocation failed!"); + } + { /* Align the start of the tables to 64 bytes. Use [0, 63] bytes */ + void* const alloc = ws->objectEnd; + size_t const bytesToAlign = ZSTD_cwksp_bytes_to_align_ptr(alloc, ZSTD_CWKSP_ALIGNMENT_BYTES); + void* const end = (BYTE*)alloc + bytesToAlign; + DEBUGLOG(5, "reserving table alignment addtl space: %zu", bytesToAlign); + RETURN_ERROR_IF(end > ws->workspaceEnd, memory_allocation, + "table phase - alignment initial allocation failed!"); + ws->objectEnd = end; + ws->tableEnd = end; + ws->tableValidEnd = end; } } ws->phase = phase; + ZSTD_cwksp_assert_internal_consistency(ws); } + return 0; } /** @@ -237,38 +323,25 @@ MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp* ws, const void* ptr) { MEM_STATIC void* ZSTD_cwksp_reserve_internal( ZSTD_cwksp* ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase) { void* alloc; - void* bottom = ws->tableEnd; - ZSTD_cwksp_internal_advance_phase(ws, phase); - alloc = (BYTE *)ws->allocStart - bytes; - - if (bytes == 0) + if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase)) || bytes == 0) { return NULL; + } #if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE) /* over-reserve space */ - alloc = (BYTE *)alloc - 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE; + bytes += 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE; #endif - DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining", - alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes); - ZSTD_cwksp_assert_internal_consistency(ws); - assert(alloc >= bottom); - if (alloc < bottom) { - DEBUGLOG(4, "cwksp: alloc failed!"); - ws->allocFailed = 1; - return NULL; - } - if (alloc < ws->tableValidEnd) { - ws->tableValidEnd = alloc; - } - ws->allocStart = alloc; + alloc = ZSTD_cwksp_reserve_internal_buffer_space(ws, bytes); #if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE) /* Move alloc so there's ZSTD_CWKSP_ASAN_REDZONE_SIZE unused space on * either size. */ - alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE; - if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) { - __asan_unpoison_memory_region(alloc, bytes); + if (alloc) { + alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE; + if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) { + __asan_unpoison_memory_region(alloc, bytes); + } } #endif @@ -283,28 +356,36 @@ MEM_STATIC BYTE* ZSTD_cwksp_reserve_buffer(ZSTD_cwksp* ws, size_t bytes) { } /** - * Reserves and returns memory sized on and aligned on sizeof(unsigned). + * Reserves and returns memory sized on and aligned on ZSTD_CWKSP_ALIGNMENT_BYTES (64 bytes). */ MEM_STATIC void* ZSTD_cwksp_reserve_aligned(ZSTD_cwksp* ws, size_t bytes) { - assert((bytes & (sizeof(U32)-1)) == 0); - return ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, sizeof(U32)), ZSTD_cwksp_alloc_aligned); + void* ptr = ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, ZSTD_CWKSP_ALIGNMENT_BYTES), + ZSTD_cwksp_alloc_aligned); + assert(((size_t)ptr & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0); + return ptr; } /** - * Aligned on sizeof(unsigned). These buffers have the special property that + * Aligned on 64 bytes. These buffers have the special property that * their values remain constrained, allowing us to re-use them without * memset()-ing them. */ MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) { const ZSTD_cwksp_alloc_phase_e phase = ZSTD_cwksp_alloc_aligned; - void* alloc = ws->tableEnd; - void* end = (BYTE *)alloc + bytes; - void* top = ws->allocStart; + void* alloc; + void* end; + void* top; + + if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase))) { + return NULL; + } + alloc = ws->tableEnd; + end = (BYTE *)alloc + bytes; + top = ws->allocStart; DEBUGLOG(5, "cwksp: reserving %p table %zd bytes, %zd bytes remaining", alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes); assert((bytes & (sizeof(U32)-1)) == 0); - ZSTD_cwksp_internal_advance_phase(ws, phase); ZSTD_cwksp_assert_internal_consistency(ws); assert(end <= top); if (end > top) { @@ -320,6 +401,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) { } #endif + assert((bytes & (ZSTD_CWKSP_ALIGNMENT_BYTES-1)) == 0); + assert(((size_t)alloc & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0); return alloc; } @@ -503,7 +586,7 @@ MEM_STATIC void ZSTD_cwksp_free(ZSTD_cwksp* ws, ZSTD_customMem customMem) { /** * Moves the management of a workspace from one cwksp to another. The src cwksp - * is left in an invalid state (src must be re-init()'ed before its used again). + * is left in an invalid state (src must be re-init()'ed before it's used again). */ MEM_STATIC void ZSTD_cwksp_move(ZSTD_cwksp* dst, ZSTD_cwksp* src) { *dst = *src; @@ -527,6 +610,24 @@ MEM_STATIC int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) { * Functions Checking Free Space ***************************************/ +/* ZSTD_alignmentSpaceWithinBounds() : + * Returns if the estimated space needed for a wksp is within an acceptable limit of the + * actual amount of space used. + */ +MEM_STATIC int ZSTD_cwksp_estimated_space_within_bounds(const ZSTD_cwksp* const ws, + size_t const estimatedSpace, int resizedWorkspace) { + if (resizedWorkspace) { + /* Resized/newly allocated wksp should have exact bounds */ + return ZSTD_cwksp_used(ws) == estimatedSpace; + } else { + /* Due to alignment, when reusing a workspace, we can actually consume 63 fewer or more bytes + * than estimatedSpace. See the comments in zstd_cwksp.h for details. + */ + return (ZSTD_cwksp_used(ws) >= estimatedSpace - 63) && (ZSTD_cwksp_used(ws) <= estimatedSpace + 63); + } +} + + MEM_STATIC size_t ZSTD_cwksp_available_space(ZSTD_cwksp* ws) { return (size_t)((BYTE*)ws->allocStart - (BYTE*)ws->tableEnd); } diff --git a/thirdparty/zstd/compress/zstd_double_fast.c b/thirdparty/zstd/compress/zstd_double_fast.c index ef12a524f7..d0d3a784dd 100644 --- a/thirdparty/zstd/compress/zstd_double_fast.c +++ b/thirdparty/zstd/compress/zstd_double_fast.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -409,7 +409,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic( hashSmall[hSmall] = hashLong[hLong] = curr; /* update hash table */ if ((((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow : ensure repIndex doesn't overlap dict + prefix */ - & (repIndex > dictStartIndex)) + & (offset_1 < curr+1 - dictStartIndex)) /* note: we are searching at curr+1 */ && (MEM_read32(repMatch) == MEM_read32(ip+1)) ) { const BYTE* repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend; mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4; @@ -477,7 +477,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic( U32 const repIndex2 = current2 - offset_2; const BYTE* repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2; if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) /* intentional overflow : ensure repIndex2 doesn't overlap dict + prefix */ - & (repIndex2 > dictStartIndex)) + & (offset_2 < current2 - dictStartIndex)) && (MEM_read32(repMatch2) == MEM_read32(ip)) ) { const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend; size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4; diff --git a/thirdparty/zstd/compress/zstd_double_fast.h b/thirdparty/zstd/compress/zstd_double_fast.h index 14d944d69b..e16b7b03a3 100644 --- a/thirdparty/zstd/compress/zstd_double_fast.h +++ b/thirdparty/zstd/compress/zstd_double_fast.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_fast.c b/thirdparty/zstd/compress/zstd_fast.c index db7ce83d0a..4edc04dccd 100644 --- a/thirdparty/zstd/compress/zstd_fast.c +++ b/thirdparty/zstd/compress/zstd_fast.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -242,7 +242,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic( assert(endIndex - prefixStartIndex <= maxDistance); (void)maxDistance; (void)endIndex; /* these variables are not used when assert() is disabled */ - /* ensure there will be no no underflow + /* ensure there will be no underflow * when translating a dict index into a local index */ assert(prefixStartIndex >= (U32)(dictEnd - dictBase)); @@ -416,9 +416,9 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( const BYTE* const repMatch = repBase + repIndex; hashTable[h] = curr; /* update hash table */ DEBUGLOG(7, "offset_1 = %u , curr = %u", offset_1, curr); - assert(offset_1 <= curr +1); /* check repIndex */ - if ( (((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > dictStartIndex)) + if ( ( ((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */ + & (offset_1 < curr+1 - dictStartIndex) ) /* note: we are searching at curr+1 */ && (MEM_read32(repMatch) == MEM_read32(ip+1)) ) { const BYTE* const repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend; size_t const rLength = ZSTD_count_2segments(ip+1 +4, repMatch +4, iend, repMatchEnd, prefixStart) + 4; @@ -453,7 +453,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( U32 const current2 = (U32)(ip-base); U32 const repIndex2 = current2 - offset_2; const BYTE* const repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2; - if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (repIndex2 > dictStartIndex)) /* intentional overflow */ + if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (offset_2 < curr - dictStartIndex)) /* intentional overflow */ && (MEM_read32(repMatch2) == MEM_read32(ip)) ) { const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend; size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4; diff --git a/thirdparty/zstd/compress/zstd_fast.h b/thirdparty/zstd/compress/zstd_fast.h index cf6aaa8e67..0d4a0c1090 100644 --- a/thirdparty/zstd/compress/zstd_fast.h +++ b/thirdparty/zstd/compress/zstd_fast.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_lazy.c b/thirdparty/zstd/compress/zstd_lazy.c index 49ec1b09ef..3d523e8472 100644 --- a/thirdparty/zstd/compress/zstd_lazy.c +++ b/thirdparty/zstd/compress/zstd_lazy.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -438,43 +438,9 @@ static size_t ZSTD_BtFindBestMatch_extDict_selectMLS ( } } - - -/* ********************************* -* Hash Chain +/*********************************** +* Dedicated dict search ***********************************/ -#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)] - -/* Update chains up to ip (excluded) - Assumption : always within prefix (i.e. not within extDict) */ -FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal( - ZSTD_matchState_t* ms, - const ZSTD_compressionParameters* const cParams, - const BYTE* ip, U32 const mls) -{ - U32* const hashTable = ms->hashTable; - const U32 hashLog = cParams->hashLog; - U32* const chainTable = ms->chainTable; - const U32 chainMask = (1 << cParams->chainLog) - 1; - const BYTE* const base = ms->window.base; - const U32 target = (U32)(ip - base); - U32 idx = ms->nextToUpdate; - - while(idx < target) { /* catch up */ - size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls); - NEXT_IN_CHAIN(idx, chainMask) = hashTable[h]; - hashTable[h] = idx; - idx++; - } - - ms->nextToUpdate = target; - return hashTable[ZSTD_hashPtr(ip, hashLog, mls)]; -} - -U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) { - const ZSTD_compressionParameters* const cParams = &ms->cParams; - return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch); -} void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip) { @@ -500,11 +466,10 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B U32* const tmpChainTable = hashTable + ((size_t)1 << hashLog); U32 const tmpChainSize = ((1 << ZSTD_LAZY_DDSS_BUCKET_LOG) - 1) << hashLog; U32 const tmpMinChain = tmpChainSize < target ? target - tmpChainSize : idx; - U32 hashIdx; assert(ms->cParams.chainLog <= 24); - assert(ms->cParams.hashLog >= ms->cParams.chainLog); + assert(ms->cParams.hashLog > ms->cParams.chainLog); assert(idx != 0); assert(tmpMinChain <= minChain); @@ -535,7 +500,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B if (count == cacheSize) { for (count = 0; count < chainLimit;) { if (i < minChain) { - if (!i || countBeyondMinChain++ > cacheSize) { + if (!i || ++countBeyondMinChain > cacheSize) { /* only allow pulling `cacheSize` number of entries * into the cache or chainTable beyond `minChain`, * to replace the entries pulled out of the @@ -591,6 +556,139 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B ms->nextToUpdate = target; } +/* Returns the longest match length found in the dedicated dict search structure. + * If none are longer than the argument ml, then ml will be returned. + */ +FORCE_INLINE_TEMPLATE +size_t ZSTD_dedicatedDictSearch_lazy_search(size_t* offsetPtr, size_t ml, U32 nbAttempts, + const ZSTD_matchState_t* const dms, + const BYTE* const ip, const BYTE* const iLimit, + const BYTE* const prefixStart, const U32 curr, + const U32 dictLimit, const size_t ddsIdx) { + const U32 ddsLowestIndex = dms->window.dictLimit; + const BYTE* const ddsBase = dms->window.base; + const BYTE* const ddsEnd = dms->window.nextSrc; + const U32 ddsSize = (U32)(ddsEnd - ddsBase); + const U32 ddsIndexDelta = dictLimit - ddsSize; + const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG); + const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1; + U32 ddsAttempt; + U32 matchIndex; + + for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) { + PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]); + } + + { + U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1]; + U32 const chainIndex = chainPackedPointer >> 8; + + PREFETCH_L1(&dms->chainTable[chainIndex]); + } + + for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) { + size_t currentMl=0; + const BYTE* match; + matchIndex = dms->hashTable[ddsIdx + ddsAttempt]; + match = ddsBase + matchIndex; + + if (!matchIndex) { + return ml; + } + + /* guaranteed by table construction */ + (void)ddsLowestIndex; + assert(matchIndex >= ddsLowestIndex); + assert(match+4 <= ddsEnd); + if (MEM_read32(match) == MEM_read32(ip)) { + /* assumption : matchIndex <= dictLimit-4 (by table construction) */ + currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4; + } + + /* save best solution */ + if (currentMl > ml) { + ml = currentMl; + *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE; + if (ip+currentMl == iLimit) { + /* best possible, avoids read overflow on next attempt */ + return ml; + } + } + } + + { + U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1]; + U32 chainIndex = chainPackedPointer >> 8; + U32 const chainLength = chainPackedPointer & 0xFF; + U32 const chainAttempts = nbAttempts - ddsAttempt; + U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts; + U32 chainAttempt; + + for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) { + PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]); + } + + for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) { + size_t currentMl=0; + const BYTE* match; + matchIndex = dms->chainTable[chainIndex]; + match = ddsBase + matchIndex; + + /* guaranteed by table construction */ + assert(matchIndex >= ddsLowestIndex); + assert(match+4 <= ddsEnd); + if (MEM_read32(match) == MEM_read32(ip)) { + /* assumption : matchIndex <= dictLimit-4 (by table construction) */ + currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4; + } + + /* save best solution */ + if (currentMl > ml) { + ml = currentMl; + *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE; + if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */ + } + } + } + return ml; +} + + +/* ********************************* +* Hash Chain +***********************************/ +#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)] + +/* Update chains up to ip (excluded) + Assumption : always within prefix (i.e. not within extDict) */ +FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal( + ZSTD_matchState_t* ms, + const ZSTD_compressionParameters* const cParams, + const BYTE* ip, U32 const mls) +{ + U32* const hashTable = ms->hashTable; + const U32 hashLog = cParams->hashLog; + U32* const chainTable = ms->chainTable; + const U32 chainMask = (1 << cParams->chainLog) - 1; + const BYTE* const base = ms->window.base; + const U32 target = (U32)(ip - base); + U32 idx = ms->nextToUpdate; + + while(idx < target) { /* catch up */ + size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls); + NEXT_IN_CHAIN(idx, chainMask) = hashTable[h]; + hashTable[h] = idx; + idx++; + } + + ms->nextToUpdate = target; + return hashTable[ZSTD_hashPtr(ip, hashLog, mls)]; +} + +U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) { + const ZSTD_compressionParameters* const cParams = &ms->cParams; + return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch); +} /* inlining is important to hardwire a hot branch (template emulation) */ FORCE_INLINE_TEMPLATE @@ -661,90 +759,8 @@ size_t ZSTD_HcFindBestMatch_generic ( } if (dictMode == ZSTD_dedicatedDictSearch) { - const U32 ddsLowestIndex = dms->window.dictLimit; - const BYTE* const ddsBase = dms->window.base; - const BYTE* const ddsEnd = dms->window.nextSrc; - const U32 ddsSize = (U32)(ddsEnd - ddsBase); - const U32 ddsIndexDelta = dictLimit - ddsSize; - const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG); - const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1; - U32 ddsAttempt; - - for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) { - PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]); - } - - { - U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1]; - U32 const chainIndex = chainPackedPointer >> 8; - - PREFETCH_L1(&dms->chainTable[chainIndex]); - } - - for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) { - size_t currentMl=0; - const BYTE* match; - matchIndex = dms->hashTable[ddsIdx + ddsAttempt]; - match = ddsBase + matchIndex; - - if (!matchIndex) { - return ml; - } - - /* guaranteed by table construction */ - (void)ddsLowestIndex; - assert(matchIndex >= ddsLowestIndex); - assert(match+4 <= ddsEnd); - if (MEM_read32(match) == MEM_read32(ip)) { - /* assumption : matchIndex <= dictLimit-4 (by table construction) */ - currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4; - } - - /* save best solution */ - if (currentMl > ml) { - ml = currentMl; - *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE; - if (ip+currentMl == iLimit) { - /* best possible, avoids read overflow on next attempt */ - return ml; - } - } - } - - { - U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1]; - U32 chainIndex = chainPackedPointer >> 8; - U32 const chainLength = chainPackedPointer & 0xFF; - U32 const chainAttempts = nbAttempts - ddsAttempt; - U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts; - U32 chainAttempt; - - for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) { - PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]); - } - - for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) { - size_t currentMl=0; - const BYTE* match; - matchIndex = dms->chainTable[chainIndex]; - match = ddsBase + matchIndex; - - /* guaranteed by table construction */ - assert(matchIndex >= ddsLowestIndex); - assert(match+4 <= ddsEnd); - if (MEM_read32(match) == MEM_read32(ip)) { - /* assumption : matchIndex <= dictLimit-4 (by table construction) */ - currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4; - } - - /* save best solution */ - if (currentMl > ml) { - ml = currentMl; - *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE; - if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */ - } - } - } + ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts, dms, + ip, iLimit, prefixStart, curr, dictLimit, ddsIdx); } else if (dictMode == ZSTD_dictMatchState) { const U32* const dmsChainTable = dms->chainTable; const U32 dmsChainSize = (1 << dms->cParams.chainLog); @@ -845,11 +861,657 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS ( } } +/* ********************************* +* (SIMD) Row-based matchfinder +***********************************/ +/* Constants for row-based hash */ +#define ZSTD_ROW_HASH_TAG_OFFSET 1 /* byte offset of hashes in the match state's tagTable from the beginning of a row */ +#define ZSTD_ROW_HASH_TAG_BITS 8 /* nb bits to use for the tag */ +#define ZSTD_ROW_HASH_TAG_MASK ((1u << ZSTD_ROW_HASH_TAG_BITS) - 1) + +#define ZSTD_ROW_HASH_CACHE_MASK (ZSTD_ROW_HASH_CACHE_SIZE - 1) + +typedef U32 ZSTD_VecMask; /* Clarifies when we are interacting with a U32 representing a mask of matches */ + +#if !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) /* SIMD SSE version */ + +#include <emmintrin.h> +typedef __m128i ZSTD_Vec128; + +/* Returns a 128-bit container with 128-bits from src */ +static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) { + return _mm_loadu_si128((ZSTD_Vec128 const*)src); +} + +/* Returns a ZSTD_Vec128 with the byte "val" packed 16 times */ +static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) { + return _mm_set1_epi8((char)val); +} + +/* Do byte-by-byte comparison result of x and y. Then collapse 128-bit resultant mask + * into a 32-bit mask that is the MSB of each byte. + * */ +static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) { + return (ZSTD_VecMask)_mm_movemask_epi8(_mm_cmpeq_epi8(x, y)); +} + +typedef struct { + __m128i fst; + __m128i snd; +} ZSTD_Vec256; + +static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) { + ZSTD_Vec256 v; + v.fst = ZSTD_Vec128_read(ptr); + v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1); + return v; +} + +static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) { + ZSTD_Vec256 v; + v.fst = ZSTD_Vec128_set8(val); + v.snd = ZSTD_Vec128_set8(val); + return v; +} + +static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) { + ZSTD_VecMask fstMask; + ZSTD_VecMask sndMask; + fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst); + sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd); + return fstMask | (sndMask << 16); +} + +#elif !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON) /* SIMD ARM NEON Version */ + +#include <arm_neon.h> +typedef uint8x16_t ZSTD_Vec128; + +static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) { + return vld1q_u8((const BYTE* const)src); +} + +static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) { + return vdupq_n_u8(val); +} + +/* Mimics '_mm_movemask_epi8()' from SSE */ +static U32 ZSTD_vmovmaskq_u8(ZSTD_Vec128 val) { + /* Shift out everything but the MSB bits in each byte */ + uint16x8_t highBits = vreinterpretq_u16_u8(vshrq_n_u8(val, 7)); + /* Merge the even lanes together with vsra (right shift and add) */ + uint32x4_t paired16 = vreinterpretq_u32_u16(vsraq_n_u16(highBits, highBits, 7)); + uint64x2_t paired32 = vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); + uint8x16_t paired64 = vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); + /* Extract the low 8 bits from each lane, merge */ + return vgetq_lane_u8(paired64, 0) | ((U32)vgetq_lane_u8(paired64, 8) << 8); +} + +static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) { + return (ZSTD_VecMask)ZSTD_vmovmaskq_u8(vceqq_u8(x, y)); +} + +typedef struct { + uint8x16_t fst; + uint8x16_t snd; +} ZSTD_Vec256; + +static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) { + ZSTD_Vec256 v; + v.fst = ZSTD_Vec128_read(ptr); + v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1); + return v; +} + +static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) { + ZSTD_Vec256 v; + v.fst = ZSTD_Vec128_set8(val); + v.snd = ZSTD_Vec128_set8(val); + return v; +} + +static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) { + ZSTD_VecMask fstMask; + ZSTD_VecMask sndMask; + fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst); + sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd); + return fstMask | (sndMask << 16); +} + +#else /* Scalar fallback version */ + +#define VEC128_NB_SIZE_T (16 / sizeof(size_t)) +typedef struct { + size_t vec[VEC128_NB_SIZE_T]; +} ZSTD_Vec128; + +static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) { + ZSTD_Vec128 ret; + ZSTD_memcpy(ret.vec, src, VEC128_NB_SIZE_T*sizeof(size_t)); + return ret; +} + +static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) { + ZSTD_Vec128 ret = { {0} }; + int startBit = sizeof(size_t) * 8 - 8; + for (;startBit >= 0; startBit -= 8) { + unsigned j = 0; + for (;j < VEC128_NB_SIZE_T; ++j) { + ret.vec[j] |= ((size_t)val << startBit); + } + } + return ret; +} + +/* Compare x to y, byte by byte, generating a "matches" bitfield */ +static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) { + ZSTD_VecMask res = 0; + unsigned i = 0; + unsigned l = 0; + for (; i < VEC128_NB_SIZE_T; ++i) { + const size_t cmp1 = x.vec[i]; + const size_t cmp2 = y.vec[i]; + unsigned j = 0; + for (; j < sizeof(size_t); ++j, ++l) { + if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) { + res |= ((U32)1 << (j+i*sizeof(size_t))); + } + } + } + return res; +} + +#define VEC256_NB_SIZE_T 2*VEC128_NB_SIZE_T +typedef struct { + size_t vec[VEC256_NB_SIZE_T]; +} ZSTD_Vec256; + +static ZSTD_Vec256 ZSTD_Vec256_read(const void* const src) { + ZSTD_Vec256 ret; + ZSTD_memcpy(ret.vec, src, VEC256_NB_SIZE_T*sizeof(size_t)); + return ret; +} + +static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) { + ZSTD_Vec256 ret = { {0} }; + int startBit = sizeof(size_t) * 8 - 8; + for (;startBit >= 0; startBit -= 8) { + unsigned j = 0; + for (;j < VEC256_NB_SIZE_T; ++j) { + ret.vec[j] |= ((size_t)val << startBit); + } + } + return ret; +} + +/* Compare x to y, byte by byte, generating a "matches" bitfield */ +static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) { + ZSTD_VecMask res = 0; + unsigned i = 0; + unsigned l = 0; + for (; i < VEC256_NB_SIZE_T; ++i) { + const size_t cmp1 = x.vec[i]; + const size_t cmp2 = y.vec[i]; + unsigned j = 0; + for (; j < sizeof(size_t); ++j, ++l) { + if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) { + res |= ((U32)1 << (j+i*sizeof(size_t))); + } + } + } + return res; +} + +#endif /* !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) */ + +/* ZSTD_VecMask_next(): + * Starting from the LSB, returns the idx of the next non-zero bit. + * Basically counting the nb of trailing zeroes. + */ +static U32 ZSTD_VecMask_next(ZSTD_VecMask val) { +# if defined(_MSC_VER) /* Visual */ + unsigned long r=0; + return _BitScanForward(&r, val) ? (U32)r : 0; +# elif defined(__GNUC__) && (__GNUC__ >= 3) + return (U32)__builtin_ctz(val); +# else + /* Software ctz version: http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup */ + static const U32 multiplyDeBruijnBitPosition[32] = + { + 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, + 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 + }; + return multiplyDeBruijnBitPosition[((U32)((v & -(int)v) * 0x077CB531U)) >> 27]; +# endif +} + +/* ZSTD_VecMask_rotateRight(): + * Rotates a bitfield to the right by "rotation" bits. + * If the rotation is greater than totalBits, the returned mask is 0. + */ +FORCE_INLINE_TEMPLATE ZSTD_VecMask +ZSTD_VecMask_rotateRight(ZSTD_VecMask mask, U32 const rotation, U32 const totalBits) { + if (rotation == 0) + return mask; + switch (totalBits) { + default: + assert(0); + case 16: + return (mask >> rotation) | (U16)(mask << (16 - rotation)); + case 32: + return (mask >> rotation) | (U32)(mask << (32 - rotation)); + } +} + +/* ZSTD_row_nextIndex(): + * Returns the next index to insert at within a tagTable row, and updates the "head" + * value to reflect the update. Essentially cycles backwards from [0, {entries per row}) + */ +FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextIndex(BYTE* const tagRow, U32 const rowMask) { + U32 const next = (*tagRow - 1) & rowMask; + *tagRow = (BYTE)next; + return next; +} + +/* ZSTD_isAligned(): + * Checks that a pointer is aligned to "align" bytes which must be a power of 2. + */ +MEM_STATIC int ZSTD_isAligned(void const* ptr, size_t align) { + assert((align & (align - 1)) == 0); + return (((size_t)ptr) & (align - 1)) == 0; +} + +/* ZSTD_row_prefetch(): + * Performs prefetching for the hashTable and tagTable at a given row. + */ +FORCE_INLINE_TEMPLATE void ZSTD_row_prefetch(U32 const* hashTable, U16 const* tagTable, U32 const relRow, U32 const rowLog) { + PREFETCH_L1(hashTable + relRow); + if (rowLog == 5) { + PREFETCH_L1(hashTable + relRow + 16); + } + PREFETCH_L1(tagTable + relRow); + assert(rowLog == 4 || rowLog == 5); + assert(ZSTD_isAligned(hashTable + relRow, 64)); /* prefetched hash row always 64-byte aligned */ + assert(ZSTD_isAligned(tagTable + relRow, (size_t)1 << rowLog)); /* prefetched tagRow sits on a multiple of 32 or 64 bytes */ +} + +/* ZSTD_row_fillHashCache(): + * Fill up the hash cache starting at idx, prefetching up to ZSTD_ROW_HASH_CACHE_SIZE entries, + * but not beyond iLimit. + */ +static void ZSTD_row_fillHashCache(ZSTD_matchState_t* ms, const BYTE* base, + U32 const rowLog, U32 const mls, + U32 idx, const BYTE* const iLimit) +{ + U32 const* const hashTable = ms->hashTable; + U16 const* const tagTable = ms->tagTable; + U32 const hashLog = ms->rowHashLog; + U32 const maxElemsToPrefetch = (base + idx) > iLimit ? 0 : (U32)(iLimit - (base + idx) + 1); + U32 const lim = idx + MIN(ZSTD_ROW_HASH_CACHE_SIZE, maxElemsToPrefetch); + + for (; idx < lim; ++idx) { + U32 const hash = (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls); + U32 const row = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog; + ZSTD_row_prefetch(hashTable, tagTable, row, rowLog); + ms->hashCache[idx & ZSTD_ROW_HASH_CACHE_MASK] = hash; + } + + DEBUGLOG(6, "ZSTD_row_fillHashCache(): [%u %u %u %u %u %u %u %u]", ms->hashCache[0], ms->hashCache[1], + ms->hashCache[2], ms->hashCache[3], ms->hashCache[4], + ms->hashCache[5], ms->hashCache[6], ms->hashCache[7]); +} + +/* ZSTD_row_nextCachedHash(): + * Returns the hash of base + idx, and replaces the hash in the hash cache with the byte at + * base + idx + ZSTD_ROW_HASH_CACHE_SIZE. Also prefetches the appropriate rows from hashTable and tagTable. + */ +FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextCachedHash(U32* cache, U32 const* hashTable, + U16 const* tagTable, BYTE const* base, + U32 idx, U32 const hashLog, + U32 const rowLog, U32 const mls) +{ + U32 const newHash = (U32)ZSTD_hashPtr(base+idx+ZSTD_ROW_HASH_CACHE_SIZE, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls); + U32 const row = (newHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog; + ZSTD_row_prefetch(hashTable, tagTable, row, rowLog); + { U32 const hash = cache[idx & ZSTD_ROW_HASH_CACHE_MASK]; + cache[idx & ZSTD_ROW_HASH_CACHE_MASK] = newHash; + return hash; + } +} + +/* ZSTD_row_update_internal(): + * Inserts the byte at ip into the appropriate position in the hash table. + * Determines the relative row, and the position within the {16, 32} entry row to insert at. + */ +FORCE_INLINE_TEMPLATE void ZSTD_row_update_internal(ZSTD_matchState_t* ms, const BYTE* ip, + U32 const mls, U32 const rowLog, + U32 const rowMask, U32 const useCache) +{ + U32* const hashTable = ms->hashTable; + U16* const tagTable = ms->tagTable; + U32 const hashLog = ms->rowHashLog; + const BYTE* const base = ms->window.base; + const U32 target = (U32)(ip - base); + U32 idx = ms->nextToUpdate; + + DEBUGLOG(6, "ZSTD_row_update_internal(): nextToUpdate=%u, current=%u", idx, target); + for (; idx < target; ++idx) { + U32 const hash = useCache ? ZSTD_row_nextCachedHash(ms->hashCache, hashTable, tagTable, base, idx, hashLog, rowLog, mls) + : (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls); + U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog; + U32* const row = hashTable + relRow; + BYTE* tagRow = (BYTE*)(tagTable + relRow); /* Though tagTable is laid out as a table of U16, each tag is only 1 byte. + Explicit cast allows us to get exact desired position within each row */ + U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask); + + assert(hash == ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls)); + ((BYTE*)tagRow)[pos + ZSTD_ROW_HASH_TAG_OFFSET] = hash & ZSTD_ROW_HASH_TAG_MASK; + row[pos] = idx; + } + ms->nextToUpdate = target; +} + +/* ZSTD_row_update(): + * External wrapper for ZSTD_row_update_internal(). Used for filling the hashtable during dictionary + * processing. + */ +void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) { + const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5; + const U32 rowMask = (1u << rowLog) - 1; + const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */); + + DEBUGLOG(5, "ZSTD_row_update(), rowLog=%u", rowLog); + ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 0 /* dont use cache */); +} + +/* Returns a ZSTD_VecMask (U32) that has the nth bit set to 1 if the newly-computed "tag" matches + * the hash at the nth position in a row of the tagTable. + */ +FORCE_INLINE_TEMPLATE +ZSTD_VecMask ZSTD_row_getMatchMask(const BYTE* const tagRow, const BYTE tag, const U32 head, const U32 rowEntries) { + ZSTD_VecMask matches = 0; + if (rowEntries == 16) { + ZSTD_Vec128 hashes = ZSTD_Vec128_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET); + ZSTD_Vec128 expandedTags = ZSTD_Vec128_set8(tag); + matches = ZSTD_Vec128_cmpMask8(hashes, expandedTags); + } else if (rowEntries == 32) { + ZSTD_Vec256 hashes = ZSTD_Vec256_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET); + ZSTD_Vec256 expandedTags = ZSTD_Vec256_set8(tag); + matches = ZSTD_Vec256_cmpMask8(hashes, expandedTags); + } else { + assert(0); + } + /* Each row is a circular buffer beginning at the value of "head". So we must rotate the "matches" bitfield + to match up with the actual layout of the entries within the hashTable */ + return ZSTD_VecMask_rotateRight(matches, head, rowEntries); +} + +/* The high-level approach of the SIMD row based match finder is as follows: + * - Figure out where to insert the new entry: + * - Generate a hash from a byte along with an additional 1-byte "short hash". The additional byte is our "tag" + * - The hashTable is effectively split into groups or "rows" of 16 or 32 entries of U32, and the hash determines + * which row to insert into. + * - Determine the correct position within the row to insert the entry into. Each row of 16 or 32 can + * be considered as a circular buffer with a "head" index that resides in the tagTable. + * - Also insert the "tag" into the equivalent row and position in the tagTable. + * - Note: The tagTable has 17 or 33 1-byte entries per row, due to 16 or 32 tags, and 1 "head" entry. + * The 17 or 33 entry rows are spaced out to occur every 32 or 64 bytes, respectively, + * for alignment/performance reasons, leaving some bytes unused. + * - Use SIMD to efficiently compare the tags in the tagTable to the 1-byte "short hash" and + * generate a bitfield that we can cycle through to check the collisions in the hash table. + * - Pick the longest match. + */ +FORCE_INLINE_TEMPLATE +size_t ZSTD_RowFindBestMatch_generic ( + ZSTD_matchState_t* ms, + const BYTE* const ip, const BYTE* const iLimit, + size_t* offsetPtr, + const U32 mls, const ZSTD_dictMode_e dictMode, + const U32 rowLog) +{ + U32* const hashTable = ms->hashTable; + U16* const tagTable = ms->tagTable; + U32* const hashCache = ms->hashCache; + const U32 hashLog = ms->rowHashLog; + const ZSTD_compressionParameters* const cParams = &ms->cParams; + const BYTE* const base = ms->window.base; + const BYTE* const dictBase = ms->window.dictBase; + const U32 dictLimit = ms->window.dictLimit; + const BYTE* const prefixStart = base + dictLimit; + const BYTE* const dictEnd = dictBase + dictLimit; + const U32 curr = (U32)(ip-base); + const U32 maxDistance = 1U << cParams->windowLog; + const U32 lowestValid = ms->window.lowLimit; + const U32 withinMaxDistance = (curr - lowestValid > maxDistance) ? curr - maxDistance : lowestValid; + const U32 isDictionary = (ms->loadedDictEnd != 0); + const U32 lowLimit = isDictionary ? lowestValid : withinMaxDistance; + const U32 rowEntries = (1U << rowLog); + const U32 rowMask = rowEntries - 1; + const U32 cappedSearchLog = MIN(cParams->searchLog, rowLog); /* nb of searches is capped at nb entries per row */ + U32 nbAttempts = 1U << cappedSearchLog; + size_t ml=4-1; + + /* DMS/DDS variables that may be referenced laster */ + const ZSTD_matchState_t* const dms = ms->dictMatchState; + size_t ddsIdx; + U32 ddsExtraAttempts; /* cctx hash tables are limited in searches, but allow extra searches into DDS */ + U32 dmsTag; + U32* dmsRow; + BYTE* dmsTagRow; + + if (dictMode == ZSTD_dedicatedDictSearch) { + const U32 ddsHashLog = dms->cParams.hashLog - ZSTD_LAZY_DDSS_BUCKET_LOG; + { /* Prefetch DDS hashtable entry */ + ddsIdx = ZSTD_hashPtr(ip, ddsHashLog, mls) << ZSTD_LAZY_DDSS_BUCKET_LOG; + PREFETCH_L1(&dms->hashTable[ddsIdx]); + } + ddsExtraAttempts = cParams->searchLog > rowLog ? 1U << (cParams->searchLog - rowLog) : 0; + } + + if (dictMode == ZSTD_dictMatchState) { + /* Prefetch DMS rows */ + U32* const dmsHashTable = dms->hashTable; + U16* const dmsTagTable = dms->tagTable; + U32 const dmsHash = (U32)ZSTD_hashPtr(ip, dms->rowHashLog + ZSTD_ROW_HASH_TAG_BITS, mls); + U32 const dmsRelRow = (dmsHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog; + dmsTag = dmsHash & ZSTD_ROW_HASH_TAG_MASK; + dmsTagRow = (BYTE*)(dmsTagTable + dmsRelRow); + dmsRow = dmsHashTable + dmsRelRow; + ZSTD_row_prefetch(dmsHashTable, dmsTagTable, dmsRelRow, rowLog); + } + + /* Update the hashTable and tagTable up to (but not including) ip */ + ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 1 /* useCache */); + { /* Get the hash for ip, compute the appropriate row */ + U32 const hash = ZSTD_row_nextCachedHash(hashCache, hashTable, tagTable, base, curr, hashLog, rowLog, mls); + U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog; + U32 const tag = hash & ZSTD_ROW_HASH_TAG_MASK; + U32* const row = hashTable + relRow; + BYTE* tagRow = (BYTE*)(tagTable + relRow); + U32 const head = *tagRow & rowMask; + U32 matchBuffer[32 /* maximum nb entries per row */]; + size_t numMatches = 0; + size_t currMatch = 0; + ZSTD_VecMask matches = ZSTD_row_getMatchMask(tagRow, (BYTE)tag, head, rowEntries); + + /* Cycle through the matches and prefetch */ + for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) { + U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask; + U32 const matchIndex = row[matchPos]; + assert(numMatches < rowEntries); + if (matchIndex < lowLimit) + break; + if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) { + PREFETCH_L1(base + matchIndex); + } else { + PREFETCH_L1(dictBase + matchIndex); + } + matchBuffer[numMatches++] = matchIndex; + } + + /* Speed opt: insert current byte into hashtable too. This allows us to avoid one iteration of the loop + in ZSTD_row_update_internal() at the next search. */ + { + U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask); + tagRow[pos + ZSTD_ROW_HASH_TAG_OFFSET] = (BYTE)tag; + row[pos] = ms->nextToUpdate++; + } + + /* Return the longest match */ + for (; currMatch < numMatches; ++currMatch) { + U32 const matchIndex = matchBuffer[currMatch]; + size_t currentMl=0; + assert(matchIndex < curr); + assert(matchIndex >= lowLimit); + + if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) { + const BYTE* const match = base + matchIndex; + assert(matchIndex >= dictLimit); /* ensures this is true if dictMode != ZSTD_extDict */ + if (match[ml] == ip[ml]) /* potentially better */ + currentMl = ZSTD_count(ip, match, iLimit); + } else { + const BYTE* const match = dictBase + matchIndex; + assert(match+4 <= dictEnd); + if (MEM_read32(match) == MEM_read32(ip)) /* assumption : matchIndex <= dictLimit-4 (by table construction) */ + currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dictEnd, prefixStart) + 4; + } + + /* Save best solution */ + if (currentMl > ml) { + ml = currentMl; + *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE; + if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */ + } + } + } + + if (dictMode == ZSTD_dedicatedDictSearch) { + ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts + ddsExtraAttempts, dms, + ip, iLimit, prefixStart, curr, dictLimit, ddsIdx); + } else if (dictMode == ZSTD_dictMatchState) { + /* TODO: Measure and potentially add prefetching to DMS */ + const U32 dmsLowestIndex = dms->window.dictLimit; + const BYTE* const dmsBase = dms->window.base; + const BYTE* const dmsEnd = dms->window.nextSrc; + const U32 dmsSize = (U32)(dmsEnd - dmsBase); + const U32 dmsIndexDelta = dictLimit - dmsSize; + + { U32 const head = *dmsTagRow & rowMask; + U32 matchBuffer[32 /* maximum nb row entries */]; + size_t numMatches = 0; + size_t currMatch = 0; + ZSTD_VecMask matches = ZSTD_row_getMatchMask(dmsTagRow, (BYTE)dmsTag, head, rowEntries); + + for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) { + U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask; + U32 const matchIndex = dmsRow[matchPos]; + if (matchIndex < dmsLowestIndex) + break; + PREFETCH_L1(dmsBase + matchIndex); + matchBuffer[numMatches++] = matchIndex; + } + + /* Return the longest match */ + for (; currMatch < numMatches; ++currMatch) { + U32 const matchIndex = matchBuffer[currMatch]; + size_t currentMl=0; + assert(matchIndex >= dmsLowestIndex); + assert(matchIndex < curr); + + { const BYTE* const match = dmsBase + matchIndex; + assert(match+4 <= dmsEnd); + if (MEM_read32(match) == MEM_read32(ip)) + currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dmsEnd, prefixStart) + 4; + } + + if (currentMl > ml) { + ml = currentMl; + *offsetPtr = curr - (matchIndex + dmsIndexDelta) + ZSTD_REP_MOVE; + if (ip+currentMl == iLimit) break; + } + } + } + } + return ml; +} + +/* Inlining is important to hardwire a hot branch (template emulation) */ +FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectMLS ( + ZSTD_matchState_t* ms, + const BYTE* ip, const BYTE* const iLimit, + const ZSTD_dictMode_e dictMode, size_t* offsetPtr, const U32 rowLog) +{ + switch(ms->cParams.minMatch) + { + default : /* includes case 3 */ + case 4 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, dictMode, rowLog); + case 5 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, dictMode, rowLog); + case 7 : + case 6 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, dictMode, rowLog); + } +} + +FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectRowLog ( + ZSTD_matchState_t* ms, + const BYTE* ip, const BYTE* const iLimit, + size_t* offsetPtr) +{ + const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5); + switch(cappedSearchLog) + { + default : + case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 4); + case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 5); + } +} + +FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dictMatchState_selectRowLog( + ZSTD_matchState_t* ms, + const BYTE* ip, const BYTE* const iLimit, + size_t* offsetPtr) +{ + const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5); + switch(cappedSearchLog) + { + default : + case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 4); + case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 5); + } +} + +FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog( + ZSTD_matchState_t* ms, + const BYTE* ip, const BYTE* const iLimit, + size_t* offsetPtr) +{ + const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5); + switch(cappedSearchLog) + { + default : + case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 4); + case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 5); + } +} + +FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_extDict_selectRowLog ( + ZSTD_matchState_t* ms, + const BYTE* ip, const BYTE* const iLimit, + size_t* offsetPtr) +{ + const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5); + switch(cappedSearchLog) + { + default : + case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 4); + case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 5); + } +} + /* ******************************* * Common parser - lazy strategy *********************************/ -typedef enum { search_hashChain, search_binaryTree } searchMethod_e; +typedef enum { search_hashChain=0, search_binaryTree=1, search_rowHash=2 } searchMethod_e; FORCE_INLINE_TEMPLATE size_t ZSTD_compressBlock_lazy_generic( @@ -863,10 +1525,11 @@ ZSTD_compressBlock_lazy_generic( const BYTE* ip = istart; const BYTE* anchor = istart; const BYTE* const iend = istart + srcSize; - const BYTE* const ilimit = iend - 8; + const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8; const BYTE* const base = ms->window.base; const U32 prefixLowestIndex = ms->window.dictLimit; const BYTE* const prefixLowest = base + prefixLowestIndex; + const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5; typedef size_t (*searchMax_f)( ZSTD_matchState_t* ms, @@ -878,26 +1541,30 @@ ZSTD_compressBlock_lazy_generic( * that should never occur (extDict modes go to the other implementation * below and there is no DDSS for binary tree search yet). */ - const searchMax_f searchFuncs[4][2] = { + const searchMax_f searchFuncs[4][3] = { { ZSTD_HcFindBestMatch_selectMLS, - ZSTD_BtFindBestMatch_selectMLS + ZSTD_BtFindBestMatch_selectMLS, + ZSTD_RowFindBestMatch_selectRowLog }, { NULL, + NULL, NULL }, { ZSTD_HcFindBestMatch_dictMatchState_selectMLS, - ZSTD_BtFindBestMatch_dictMatchState_selectMLS + ZSTD_BtFindBestMatch_dictMatchState_selectMLS, + ZSTD_RowFindBestMatch_dictMatchState_selectRowLog }, { ZSTD_HcFindBestMatch_dedicatedDictSearch_selectMLS, - NULL + NULL, + ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog } }; - searchMax_f const searchMax = searchFuncs[dictMode][searchMethod == search_binaryTree]; + searchMax_f const searchMax = searchFuncs[dictMode][(int)searchMethod]; U32 offset_1 = rep[0], offset_2 = rep[1], savedOffset=0; const int isDMS = dictMode == ZSTD_dictMatchState; @@ -915,9 +1582,7 @@ ZSTD_compressBlock_lazy_generic( assert(searchMax != NULL); - DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u)", (U32)dictMode); - - /* init */ + DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u) (searchFunc=%u)", (U32)dictMode, (U32)searchMethod); ip += (dictAndPrefixLength == 0); if (dictMode == ZSTD_noDict) { U32 const curr = (U32)(ip - base); @@ -933,6 +1598,12 @@ ZSTD_compressBlock_lazy_generic( assert(offset_2 <= dictAndPrefixLength); } + if (searchMethod == search_rowHash) { + ZSTD_row_fillHashCache(ms, base, rowLog, + MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */), + ms->nextToUpdate, ilimit); + } + /* Match Loop */ #if defined(__GNUC__) && defined(__x86_64__) /* I've measured random a 5% speed loss on levels 5 & 6 (greedy) when the @@ -1198,6 +1869,70 @@ size_t ZSTD_compressBlock_greedy_dedicatedDictSearch( return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0, ZSTD_dedicatedDictSearch); } +/* Row-based matchfinder */ +size_t ZSTD_compressBlock_lazy2_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_noDict); +} + +size_t ZSTD_compressBlock_lazy_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_noDict); +} + +size_t ZSTD_compressBlock_greedy_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_noDict); +} + +size_t ZSTD_compressBlock_lazy2_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dictMatchState); +} + +size_t ZSTD_compressBlock_lazy_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dictMatchState); +} + +size_t ZSTD_compressBlock_greedy_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dictMatchState); +} + + +size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dedicatedDictSearch); +} + +size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dedicatedDictSearch); +} + +size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dedicatedDictSearch); +} FORCE_INLINE_TEMPLATE size_t ZSTD_compressBlock_lazy_extDict_generic( @@ -1210,7 +1945,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( const BYTE* ip = istart; const BYTE* anchor = istart; const BYTE* const iend = istart + srcSize; - const BYTE* const ilimit = iend - 8; + const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8; const BYTE* const base = ms->window.base; const U32 dictLimit = ms->window.dictLimit; const BYTE* const prefixStart = base + dictLimit; @@ -1218,18 +1953,28 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( const BYTE* const dictEnd = dictBase + dictLimit; const BYTE* const dictStart = dictBase + ms->window.lowLimit; const U32 windowLog = ms->cParams.windowLog; + const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5; typedef size_t (*searchMax_f)( ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr); - searchMax_f searchMax = searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_extDict_selectMLS : ZSTD_HcFindBestMatch_extDict_selectMLS; - + const searchMax_f searchFuncs[3] = { + ZSTD_HcFindBestMatch_extDict_selectMLS, + ZSTD_BtFindBestMatch_extDict_selectMLS, + ZSTD_RowFindBestMatch_extDict_selectRowLog + }; + searchMax_f searchMax = searchFuncs[(int)searchMethod]; U32 offset_1 = rep[0], offset_2 = rep[1]; - DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic"); + DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic (searchFunc=%u)", (U32)searchMethod); /* init */ ip += (ip == prefixStart); + if (searchMethod == search_rowHash) { + ZSTD_row_fillHashCache(ms, base, rowLog, + MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */), + ms->nextToUpdate, ilimit); + } /* Match Loop */ #if defined(__GNUC__) && defined(__x86_64__) @@ -1249,7 +1994,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( const U32 repIndex = (U32)(curr+1 - offset_1); const BYTE* const repBase = repIndex < dictLimit ? dictBase : base; const BYTE* const repMatch = repBase + repIndex; - if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */ + if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow */ + & (offset_1 < curr+1 - windowLow) ) /* note: we are searching at curr+1 */ if (MEM_read32(ip+1) == MEM_read32(repMatch)) { /* repcode detected we should take it */ const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend; @@ -1280,7 +2026,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( const U32 repIndex = (U32)(curr - offset_1); const BYTE* const repBase = repIndex < dictLimit ? dictBase : base; const BYTE* const repMatch = repBase + repIndex; - if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */ + if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */ + & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */ if (MEM_read32(ip) == MEM_read32(repMatch)) { /* repcode detected */ const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend; @@ -1311,7 +2058,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( const U32 repIndex = (U32)(curr - offset_1); const BYTE* const repBase = repIndex < dictLimit ? dictBase : base; const BYTE* const repMatch = repBase + repIndex; - if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */ + if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */ + & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */ if (MEM_read32(ip) == MEM_read32(repMatch)) { /* repcode detected */ const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend; @@ -1357,7 +2105,8 @@ _storeSequence: const U32 repIndex = repCurrent - offset_2; const BYTE* const repBase = repIndex < dictLimit ? dictBase : base; const BYTE* const repMatch = repBase + repIndex; - if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */ + if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */ + & (offset_2 < repCurrent - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */ if (MEM_read32(ip) == MEM_read32(repMatch)) { /* repcode detected we should take it */ const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend; @@ -1410,3 +2159,26 @@ size_t ZSTD_compressBlock_btlazy2_extDict( { return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2); } + +size_t ZSTD_compressBlock_greedy_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0); +} + +size_t ZSTD_compressBlock_lazy_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) + +{ + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1); +} + +size_t ZSTD_compressBlock_lazy2_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize) + +{ + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2); +} diff --git a/thirdparty/zstd/compress/zstd_lazy.h b/thirdparty/zstd/compress/zstd_lazy.h index d0214d5e73..150f7b390b 100644 --- a/thirdparty/zstd/compress/zstd_lazy.h +++ b/thirdparty/zstd/compress/zstd_lazy.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -26,6 +26,7 @@ extern "C" { #define ZSTD_LAZY_DDSS_BUCKET_LOG 2 U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip); +void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip); void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip); @@ -43,6 +44,15 @@ size_t ZSTD_compressBlock_lazy( size_t ZSTD_compressBlock_greedy( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy2_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_greedy_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); size_t ZSTD_compressBlock_btlazy2_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], @@ -56,6 +66,15 @@ size_t ZSTD_compressBlock_lazy_dictMatchState( size_t ZSTD_compressBlock_greedy_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy2_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_greedy_dictMatchState_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], @@ -66,6 +85,15 @@ size_t ZSTD_compressBlock_lazy_dedicatedDictSearch( size_t ZSTD_compressBlock_greedy_dedicatedDictSearch( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); size_t ZSTD_compressBlock_greedy_extDict( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], @@ -76,9 +104,19 @@ size_t ZSTD_compressBlock_lazy_extDict( size_t ZSTD_compressBlock_lazy2_extDict( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); +size_t ZSTD_compressBlock_greedy_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); +size_t ZSTD_compressBlock_lazy2_extDict_row( + ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + void const* src, size_t srcSize); size_t ZSTD_compressBlock_btlazy2_extDict( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize); + #if defined (__cplusplus) } diff --git a/thirdparty/zstd/compress/zstd_ldm.c b/thirdparty/zstd/compress/zstd_ldm.c index 3f3d7c46ab..fa4ebeabd7 100644 --- a/thirdparty/zstd/compress/zstd_ldm.c +++ b/thirdparty/zstd/compress/zstd_ldm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -11,13 +11,126 @@ #include "zstd_ldm.h" #include "../common/debug.h" +#include "../common/xxhash.h" #include "zstd_fast.h" /* ZSTD_fillHashTable() */ #include "zstd_double_fast.h" /* ZSTD_fillDoubleHashTable() */ +#include "zstd_ldm_geartab.h" #define LDM_BUCKET_SIZE_LOG 3 #define LDM_MIN_MATCH_LENGTH 64 #define LDM_HASH_RLOG 7 -#define LDM_HASH_CHAR_OFFSET 10 + +typedef struct { + U64 rolling; + U64 stopMask; +} ldmRollingHashState_t; + +/** ZSTD_ldm_gear_init(): + * + * Initializes the rolling hash state such that it will honor the + * settings in params. */ +static void ZSTD_ldm_gear_init(ldmRollingHashState_t* state, ldmParams_t const* params) +{ + unsigned maxBitsInMask = MIN(params->minMatchLength, 64); + unsigned hashRateLog = params->hashRateLog; + + state->rolling = ~(U32)0; + + /* The choice of the splitting criterion is subject to two conditions: + * 1. it has to trigger on average every 2^(hashRateLog) bytes; + * 2. ideally, it has to depend on a window of minMatchLength bytes. + * + * In the gear hash algorithm, bit n depends on the last n bytes; + * so in order to obtain a good quality splitting criterion it is + * preferable to use bits with high weight. + * + * To match condition 1 we use a mask with hashRateLog bits set + * and, because of the previous remark, we make sure these bits + * have the highest possible weight while still respecting + * condition 2. + */ + if (hashRateLog > 0 && hashRateLog <= maxBitsInMask) { + state->stopMask = (((U64)1 << hashRateLog) - 1) << (maxBitsInMask - hashRateLog); + } else { + /* In this degenerate case we simply honor the hash rate. */ + state->stopMask = ((U64)1 << hashRateLog) - 1; + } +} + +/** ZSTD_ldm_gear_reset() + * Feeds [data, data + minMatchLength) into the hash without registering any + * splits. This effectively resets the hash state. This is used when skipping + * over data, either at the beginning of a block, or skipping sections. + */ +static void ZSTD_ldm_gear_reset(ldmRollingHashState_t* state, + BYTE const* data, size_t minMatchLength) +{ + U64 hash = state->rolling; + size_t n = 0; + +#define GEAR_ITER_ONCE() do { \ + hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \ + n += 1; \ + } while (0) + while (n + 3 < minMatchLength) { + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + } + while (n < minMatchLength) { + GEAR_ITER_ONCE(); + } +#undef GEAR_ITER_ONCE +} + +/** ZSTD_ldm_gear_feed(): + * + * Registers in the splits array all the split points found in the first + * size bytes following the data pointer. This function terminates when + * either all the data has been processed or LDM_BATCH_SIZE splits are + * present in the splits array. + * + * Precondition: The splits array must not be full. + * Returns: The number of bytes processed. */ +static size_t ZSTD_ldm_gear_feed(ldmRollingHashState_t* state, + BYTE const* data, size_t size, + size_t* splits, unsigned* numSplits) +{ + size_t n; + U64 hash, mask; + + hash = state->rolling; + mask = state->stopMask; + n = 0; + +#define GEAR_ITER_ONCE() do { \ + hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \ + n += 1; \ + if (UNLIKELY((hash & mask) == 0)) { \ + splits[*numSplits] = n; \ + *numSplits += 1; \ + if (*numSplits == LDM_BATCH_SIZE) \ + goto done; \ + } \ + } while (0) + + while (n + 3 < size) { + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + GEAR_ITER_ONCE(); + } + while (n < size) { + GEAR_ITER_ONCE(); + } + +#undef GEAR_ITER_ONCE + +done: + state->rolling = hash; + return n; +} void ZSTD_ldm_adjustParameters(ldmParams_t* params, ZSTD_compressionParameters const* cParams) @@ -54,41 +167,6 @@ size_t ZSTD_ldm_getMaxNbSeq(ldmParams_t params, size_t maxChunkSize) return params.enableLdm ? (maxChunkSize / params.minMatchLength) : 0; } -/** ZSTD_ldm_getSmallHash() : - * numBits should be <= 32 - * If numBits==0, returns 0. - * @return : the most significant numBits of value. */ -static U32 ZSTD_ldm_getSmallHash(U64 value, U32 numBits) -{ - assert(numBits <= 32); - return numBits == 0 ? 0 : (U32)(value >> (64 - numBits)); -} - -/** ZSTD_ldm_getChecksum() : - * numBitsToDiscard should be <= 32 - * @return : the next most significant 32 bits after numBitsToDiscard */ -static U32 ZSTD_ldm_getChecksum(U64 hash, U32 numBitsToDiscard) -{ - assert(numBitsToDiscard <= 32); - return (hash >> (64 - 32 - numBitsToDiscard)) & 0xFFFFFFFF; -} - -/** ZSTD_ldm_getTag() ; - * Given the hash, returns the most significant numTagBits bits - * after (32 + hbits) bits. - * - * If there are not enough bits remaining, return the last - * numTagBits bits. */ -static U32 ZSTD_ldm_getTag(U64 hash, U32 hbits, U32 numTagBits) -{ - assert(numTagBits < 32 && hbits <= 32); - if (32 - hbits < numTagBits) { - return hash & (((U32)1 << numTagBits) - 1); - } else { - return (hash >> (32 - hbits - numTagBits)) & (((U32)1 << numTagBits) - 1); - } -} - /** ZSTD_ldm_getBucket() : * Returns a pointer to the start of the bucket associated with hash. */ static ldmEntry_t* ZSTD_ldm_getBucket( @@ -103,38 +181,12 @@ static void ZSTD_ldm_insertEntry(ldmState_t* ldmState, size_t const hash, const ldmEntry_t entry, ldmParams_t const ldmParams) { - BYTE* const bucketOffsets = ldmState->bucketOffsets; - *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + bucketOffsets[hash]) = entry; - bucketOffsets[hash]++; - bucketOffsets[hash] &= ((U32)1 << ldmParams.bucketSizeLog) - 1; -} + BYTE* const pOffset = ldmState->bucketOffsets + hash; + unsigned const offset = *pOffset; + + *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + offset) = entry; + *pOffset = (BYTE)((offset + 1) & ((1u << ldmParams.bucketSizeLog) - 1)); -/** ZSTD_ldm_makeEntryAndInsertByTag() : - * - * Gets the small hash, checksum, and tag from the rollingHash. - * - * If the tag matches (1 << ldmParams.hashRateLog)-1, then - * creates an ldmEntry from the offset, and inserts it into the hash table. - * - * hBits is the length of the small hash, which is the most significant hBits - * of rollingHash. The checksum is the next 32 most significant bits, followed - * by ldmParams.hashRateLog bits that make up the tag. */ -static void ZSTD_ldm_makeEntryAndInsertByTag(ldmState_t* ldmState, - U64 const rollingHash, - U32 const hBits, - U32 const offset, - ldmParams_t const ldmParams) -{ - U32 const tag = ZSTD_ldm_getTag(rollingHash, hBits, ldmParams.hashRateLog); - U32 const tagMask = ((U32)1 << ldmParams.hashRateLog) - 1; - if (tag == tagMask) { - U32 const hash = ZSTD_ldm_getSmallHash(rollingHash, hBits); - U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits); - ldmEntry_t entry; - entry.offset = offset; - entry.checksum = checksum; - ZSTD_ldm_insertEntry(ldmState, hash, entry, ldmParams); - } } /** ZSTD_ldm_countBackwardsMatch() : @@ -212,43 +264,42 @@ static size_t ZSTD_ldm_fillFastTables(ZSTD_matchState_t* ms, return 0; } -/** ZSTD_ldm_fillLdmHashTable() : - * - * Fills hashTable from (lastHashed + 1) to iend (non-inclusive). - * lastHash is the rolling hash that corresponds to lastHashed. - * - * Returns the rolling hash corresponding to position iend-1. */ -static U64 ZSTD_ldm_fillLdmHashTable(ldmState_t* state, - U64 lastHash, const BYTE* lastHashed, - const BYTE* iend, const BYTE* base, - U32 hBits, ldmParams_t const ldmParams) -{ - U64 rollingHash = lastHash; - const BYTE* cur = lastHashed + 1; - - while (cur < iend) { - rollingHash = ZSTD_rollingHash_rotate(rollingHash, cur[-1], - cur[ldmParams.minMatchLength-1], - state->hashPower); - ZSTD_ldm_makeEntryAndInsertByTag(state, - rollingHash, hBits, - (U32)(cur - base), ldmParams); - ++cur; - } - return rollingHash; -} - void ZSTD_ldm_fillHashTable( - ldmState_t* state, const BYTE* ip, + ldmState_t* ldmState, const BYTE* ip, const BYTE* iend, ldmParams_t const* params) { + U32 const minMatchLength = params->minMatchLength; + U32 const hBits = params->hashLog - params->bucketSizeLog; + BYTE const* const base = ldmState->window.base; + BYTE const* const istart = ip; + ldmRollingHashState_t hashState; + size_t* const splits = ldmState->splitIndices; + unsigned numSplits; + DEBUGLOG(5, "ZSTD_ldm_fillHashTable"); - if ((size_t)(iend - ip) >= params->minMatchLength) { - U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength); - ZSTD_ldm_fillLdmHashTable( - state, startingHash, ip, iend - params->minMatchLength, state->window.base, - params->hashLog - params->bucketSizeLog, - *params); + + ZSTD_ldm_gear_init(&hashState, params); + while (ip < iend) { + size_t hashed; + unsigned n; + + numSplits = 0; + hashed = ZSTD_ldm_gear_feed(&hashState, ip, iend - ip, splits, &numSplits); + + for (n = 0; n < numSplits; n++) { + if (ip + splits[n] >= istart + minMatchLength) { + BYTE const* const split = ip + splits[n] - minMatchLength; + U64 const xxhash = XXH64(split, minMatchLength, 0); + U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1)); + ldmEntry_t entry; + + entry.offset = (U32)(split - base); + entry.checksum = (U32)(xxhash >> 32); + ZSTD_ldm_insertEntry(ldmState, hash, entry, *params); + } + } + + ip += hashed; } } @@ -274,11 +325,8 @@ static size_t ZSTD_ldm_generateSequences_internal( /* LDM parameters */ int const extDict = ZSTD_window_hasExtDict(ldmState->window); U32 const minMatchLength = params->minMatchLength; - U64 const hashPower = ldmState->hashPower; + U32 const entsPerBucket = 1U << params->bucketSizeLog; U32 const hBits = params->hashLog - params->bucketSizeLog; - U32 const ldmBucketSize = 1U << params->bucketSizeLog; - U32 const hashRateLog = params->hashRateLog; - U32 const ldmTagMask = (1U << params->hashRateLog) - 1; /* Prefix and extDict parameters */ U32 const dictLimit = ldmState->window.dictLimit; U32 const lowestIndex = extDict ? ldmState->window.lowLimit : dictLimit; @@ -290,45 +338,69 @@ static size_t ZSTD_ldm_generateSequences_internal( /* Input bounds */ BYTE const* const istart = (BYTE const*)src; BYTE const* const iend = istart + srcSize; - BYTE const* const ilimit = iend - MAX(minMatchLength, HASH_READ_SIZE); + BYTE const* const ilimit = iend - HASH_READ_SIZE; /* Input positions */ BYTE const* anchor = istart; BYTE const* ip = istart; - /* Rolling hash */ - BYTE const* lastHashed = NULL; - U64 rollingHash = 0; - - while (ip <= ilimit) { - size_t mLength; - U32 const curr = (U32)(ip - base); - size_t forwardMatchLength = 0, backwardMatchLength = 0; - ldmEntry_t* bestEntry = NULL; - if (ip != istart) { - rollingHash = ZSTD_rollingHash_rotate(rollingHash, lastHashed[0], - lastHashed[minMatchLength], - hashPower); - } else { - rollingHash = ZSTD_rollingHash_compute(ip, minMatchLength); + /* Rolling hash state */ + ldmRollingHashState_t hashState; + /* Arrays for staged-processing */ + size_t* const splits = ldmState->splitIndices; + ldmMatchCandidate_t* const candidates = ldmState->matchCandidates; + unsigned numSplits; + + if (srcSize < minMatchLength) + return iend - anchor; + + /* Initialize the rolling hash state with the first minMatchLength bytes */ + ZSTD_ldm_gear_init(&hashState, params); + ZSTD_ldm_gear_reset(&hashState, ip, minMatchLength); + ip += minMatchLength; + + while (ip < ilimit) { + size_t hashed; + unsigned n; + + numSplits = 0; + hashed = ZSTD_ldm_gear_feed(&hashState, ip, ilimit - ip, + splits, &numSplits); + + for (n = 0; n < numSplits; n++) { + BYTE const* const split = ip + splits[n] - minMatchLength; + U64 const xxhash = XXH64(split, minMatchLength, 0); + U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1)); + + candidates[n].split = split; + candidates[n].hash = hash; + candidates[n].checksum = (U32)(xxhash >> 32); + candidates[n].bucket = ZSTD_ldm_getBucket(ldmState, hash, *params); + PREFETCH_L1(candidates[n].bucket); } - lastHashed = ip; - /* Do not insert and do not look for a match */ - if (ZSTD_ldm_getTag(rollingHash, hBits, hashRateLog) != ldmTagMask) { - ip++; - continue; - } + for (n = 0; n < numSplits; n++) { + size_t forwardMatchLength = 0, backwardMatchLength = 0, + bestMatchLength = 0, mLength; + U32 offset; + BYTE const* const split = candidates[n].split; + U32 const checksum = candidates[n].checksum; + U32 const hash = candidates[n].hash; + ldmEntry_t* const bucket = candidates[n].bucket; + ldmEntry_t const* cur; + ldmEntry_t const* bestEntry = NULL; + ldmEntry_t newEntry; + + newEntry.offset = (U32)(split - base); + newEntry.checksum = checksum; + + /* If a split point would generate a sequence overlapping with + * the previous one, we merely register it in the hash table and + * move on */ + if (split < anchor) { + ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params); + continue; + } - /* Get the best entry and compute the match lengths */ - { - ldmEntry_t* const bucket = - ZSTD_ldm_getBucket(ldmState, - ZSTD_ldm_getSmallHash(rollingHash, hBits), - *params); - ldmEntry_t* cur; - size_t bestMatchLength = 0; - U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits); - - for (cur = bucket; cur < bucket + ldmBucketSize; ++cur) { + for (cur = bucket; cur < bucket + entsPerBucket; cur++) { size_t curForwardMatchLength, curBackwardMatchLength, curTotalMatchLength; if (cur->checksum != checksum || cur->offset <= lowestIndex) { @@ -342,31 +414,23 @@ static size_t ZSTD_ldm_generateSequences_internal( cur->offset < dictLimit ? dictEnd : iend; BYTE const* const lowMatchPtr = cur->offset < dictLimit ? dictStart : lowPrefixPtr; - - curForwardMatchLength = ZSTD_count_2segments( - ip, pMatch, iend, - matchEnd, lowPrefixPtr); + curForwardMatchLength = + ZSTD_count_2segments(split, pMatch, iend, matchEnd, lowPrefixPtr); if (curForwardMatchLength < minMatchLength) { continue; } - curBackwardMatchLength = - ZSTD_ldm_countBackwardsMatch_2segments(ip, anchor, - pMatch, lowMatchPtr, - dictStart, dictEnd); - curTotalMatchLength = curForwardMatchLength + - curBackwardMatchLength; + curBackwardMatchLength = ZSTD_ldm_countBackwardsMatch_2segments( + split, anchor, pMatch, lowMatchPtr, dictStart, dictEnd); } else { /* !extDict */ BYTE const* const pMatch = base + cur->offset; - curForwardMatchLength = ZSTD_count(ip, pMatch, iend); + curForwardMatchLength = ZSTD_count(split, pMatch, iend); if (curForwardMatchLength < minMatchLength) { continue; } curBackwardMatchLength = - ZSTD_ldm_countBackwardsMatch(ip, anchor, pMatch, - lowPrefixPtr); - curTotalMatchLength = curForwardMatchLength + - curBackwardMatchLength; + ZSTD_ldm_countBackwardsMatch(split, anchor, pMatch, lowPrefixPtr); } + curTotalMatchLength = curForwardMatchLength + curBackwardMatchLength; if (curTotalMatchLength > bestMatchLength) { bestMatchLength = curTotalMatchLength; @@ -375,57 +439,54 @@ static size_t ZSTD_ldm_generateSequences_internal( bestEntry = cur; } } - } - - /* No match found -- continue searching */ - if (bestEntry == NULL) { - ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash, - hBits, curr, - *params); - ip++; - continue; - } - /* Match found */ - mLength = forwardMatchLength + backwardMatchLength; - ip -= backwardMatchLength; + /* No match found -- insert an entry into the hash table + * and process the next candidate match */ + if (bestEntry == NULL) { + ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params); + continue; + } - { - /* Store the sequence: - * ip = curr - backwardMatchLength - * The match is at (bestEntry->offset - backwardMatchLength) - */ - U32 const matchIndex = bestEntry->offset; - U32 const offset = curr - matchIndex; - rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size; - - /* Out of sequence storage */ - if (rawSeqStore->size == rawSeqStore->capacity) - return ERROR(dstSize_tooSmall); - seq->litLength = (U32)(ip - anchor); - seq->matchLength = (U32)mLength; - seq->offset = offset; - rawSeqStore->size++; - } + /* Match found */ + offset = (U32)(split - base) - bestEntry->offset; + mLength = forwardMatchLength + backwardMatchLength; + { + rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size; + + /* Out of sequence storage */ + if (rawSeqStore->size == rawSeqStore->capacity) + return ERROR(dstSize_tooSmall); + seq->litLength = (U32)(split - backwardMatchLength - anchor); + seq->matchLength = (U32)mLength; + seq->offset = offset; + rawSeqStore->size++; + } - /* Insert the current entry into the hash table */ - ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash, hBits, - (U32)(lastHashed - base), - *params); + /* Insert the current entry into the hash table --- it must be + * done after the previous block to avoid clobbering bestEntry */ + ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params); - assert(ip + backwardMatchLength == lastHashed); + anchor = split + forwardMatchLength; - /* Fill the hash table from lastHashed+1 to ip+mLength*/ - /* Heuristic: don't need to fill the entire table at end of block */ - if (ip + mLength <= ilimit) { - rollingHash = ZSTD_ldm_fillLdmHashTable( - ldmState, rollingHash, lastHashed, - ip + mLength, base, hBits, *params); - lastHashed = ip + mLength - 1; + /* If we find a match that ends after the data that we've hashed + * then we have a repeating, overlapping, pattern. E.g. all zeros. + * If one repetition of the pattern matches our `stopMask` then all + * repetitions will. We don't need to insert them all into out table, + * only the first one. So skip over overlapping matches. + * This is a major speed boost (20x) for compressing a single byte + * repeated, when that byte ends up in the table. + */ + if (anchor > ip + hashed) { + ZSTD_ldm_gear_reset(&hashState, anchor - minMatchLength, minMatchLength); + /* Continue the outter loop at anchor (ip + hashed == anchor). */ + ip = anchor - hashed; + break; + } } - ip += mLength; - anchor = ip; + + ip += hashed; } + return iend - anchor; } @@ -474,7 +535,7 @@ size_t ZSTD_ldm_generateSequences( assert(chunkStart < iend); /* 1. Perform overflow correction if necessary. */ - if (ZSTD_window_needOverflowCorrection(ldmState->window, chunkEnd)) { + if (ZSTD_window_needOverflowCorrection(ldmState->window, 0, maxDist, ldmState->loadedDictEnd, chunkStart, chunkEnd)) { U32 const ldmHSize = 1U << params->hashLog; U32 const correction = ZSTD_window_correctOverflow( &ldmState->window, /* cycleLog */ 0, maxDist, chunkStart); @@ -596,12 +657,13 @@ void ZSTD_ldm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t nbBytes) { size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore, ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + ZSTD_useRowMatchFinderMode_e useRowMatchFinder, void const* src, size_t srcSize) { const ZSTD_compressionParameters* const cParams = &ms->cParams; unsigned const minMatch = cParams->minMatch; ZSTD_blockCompressor const blockCompressor = - ZSTD_selectBlockCompressor(cParams->strategy, ZSTD_matchState_dictMode(ms)); + ZSTD_selectBlockCompressor(cParams->strategy, useRowMatchFinder, ZSTD_matchState_dictMode(ms)); /* Input bounds */ BYTE const* const istart = (BYTE const*)src; BYTE const* const iend = istart + srcSize; @@ -620,7 +682,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore, assert(rawSeqStore->pos <= rawSeqStore->size); assert(rawSeqStore->size <= rawSeqStore->capacity); - /* Loop through each sequence and apply the block compressor to the lits */ + /* Loop through each sequence and apply the block compressor to the literals */ while (rawSeqStore->pos < rawSeqStore->size && ip < iend) { /* maybeSplitSequence updates rawSeqStore->pos */ rawSeq const sequence = maybeSplitSequence(rawSeqStore, diff --git a/thirdparty/zstd/compress/zstd_ldm.h b/thirdparty/zstd/compress/zstd_ldm.h index 6561024e4c..393466fa9f 100644 --- a/thirdparty/zstd/compress/zstd_ldm.h +++ b/thirdparty/zstd/compress/zstd_ldm.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -66,6 +66,7 @@ size_t ZSTD_ldm_generateSequences( */ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore, ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], + ZSTD_useRowMatchFinderMode_e useRowMatchFinder, void const* src, size_t srcSize); /** @@ -73,7 +74,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore, * * Skip past `srcSize` bytes worth of sequences in `rawSeqStore`. * Avoids emitting matches less than `minMatch` bytes. - * Must be called for data with is not passed to ZSTD_ldm_blockCompress(). + * Must be called for data that is not passed to ZSTD_ldm_blockCompress(). */ void ZSTD_ldm_skipSequences(rawSeqStore_t* rawSeqStore, size_t srcSize, U32 const minMatch); diff --git a/thirdparty/zstd/compress/zstd_ldm_geartab.h b/thirdparty/zstd/compress/zstd_ldm_geartab.h new file mode 100644 index 0000000000..e5c24d856b --- /dev/null +++ b/thirdparty/zstd/compress/zstd_ldm_geartab.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) Yann Collet, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_LDM_GEARTAB_H +#define ZSTD_LDM_GEARTAB_H + +static U64 ZSTD_ldm_gearTab[256] = { + 0xf5b8f72c5f77775c, 0x84935f266b7ac412, 0xb647ada9ca730ccc, + 0xb065bb4b114fb1de, 0x34584e7e8c3a9fd0, 0x4e97e17c6ae26b05, + 0x3a03d743bc99a604, 0xcecd042422c4044f, 0x76de76c58524259e, + 0x9c8528f65badeaca, 0x86563706e2097529, 0x2902475fa375d889, + 0xafb32a9739a5ebe6, 0xce2714da3883e639, 0x21eaf821722e69e, + 0x37b628620b628, 0x49a8d455d88caf5, 0x8556d711e6958140, + 0x4f7ae74fc605c1f, 0x829f0c3468bd3a20, 0x4ffdc885c625179e, + 0x8473de048a3daf1b, 0x51008822b05646b2, 0x69d75d12b2d1cc5f, + 0x8c9d4a19159154bc, 0xc3cc10f4abbd4003, 0xd06ddc1cecb97391, + 0xbe48e6e7ed80302e, 0x3481db31cee03547, 0xacc3f67cdaa1d210, + 0x65cb771d8c7f96cc, 0x8eb27177055723dd, 0xc789950d44cd94be, + 0x934feadc3700b12b, 0x5e485f11edbdf182, 0x1e2e2a46fd64767a, + 0x2969ca71d82efa7c, 0x9d46e9935ebbba2e, 0xe056b67e05e6822b, + 0x94d73f55739d03a0, 0xcd7010bdb69b5a03, 0x455ef9fcd79b82f4, + 0x869cb54a8749c161, 0x38d1a4fa6185d225, 0xb475166f94bbe9bb, + 0xa4143548720959f1, 0x7aed4780ba6b26ba, 0xd0ce264439e02312, + 0x84366d746078d508, 0xa8ce973c72ed17be, 0x21c323a29a430b01, + 0x9962d617e3af80ee, 0xab0ce91d9c8cf75b, 0x530e8ee6d19a4dbc, + 0x2ef68c0cf53f5d72, 0xc03a681640a85506, 0x496e4e9f9c310967, + 0x78580472b59b14a0, 0x273824c23b388577, 0x66bf923ad45cb553, + 0x47ae1a5a2492ba86, 0x35e304569e229659, 0x4765182a46870b6f, + 0x6cbab625e9099412, 0xddac9a2e598522c1, 0x7172086e666624f2, + 0xdf5003ca503b7837, 0x88c0c1db78563d09, 0x58d51865acfc289d, + 0x177671aec65224f1, 0xfb79d8a241e967d7, 0x2be1e101cad9a49a, + 0x6625682f6e29186b, 0x399553457ac06e50, 0x35dffb4c23abb74, + 0x429db2591f54aade, 0xc52802a8037d1009, 0x6acb27381f0b25f3, + 0xf45e2551ee4f823b, 0x8b0ea2d99580c2f7, 0x3bed519cbcb4e1e1, + 0xff452823dbb010a, 0x9d42ed614f3dd267, 0x5b9313c06257c57b, + 0xa114b8008b5e1442, 0xc1fe311c11c13d4b, 0x66e8763ea34c5568, + 0x8b982af1c262f05d, 0xee8876faaa75fbb7, 0x8a62a4d0d172bb2a, + 0xc13d94a3b7449a97, 0x6dbbba9dc15d037c, 0xc786101f1d92e0f1, + 0xd78681a907a0b79b, 0xf61aaf2962c9abb9, 0x2cfd16fcd3cb7ad9, + 0x868c5b6744624d21, 0x25e650899c74ddd7, 0xba042af4a7c37463, + 0x4eb1a539465a3eca, 0xbe09dbf03b05d5ca, 0x774e5a362b5472ba, + 0x47a1221229d183cd, 0x504b0ca18ef5a2df, 0xdffbdfbde2456eb9, + 0x46cd2b2fbee34634, 0xf2aef8fe819d98c3, 0x357f5276d4599d61, + 0x24a5483879c453e3, 0x88026889192b4b9, 0x28da96671782dbec, + 0x4ef37c40588e9aaa, 0x8837b90651bc9fb3, 0xc164f741d3f0e5d6, + 0xbc135a0a704b70ba, 0x69cd868f7622ada, 0xbc37ba89e0b9c0ab, + 0x47c14a01323552f6, 0x4f00794bacee98bb, 0x7107de7d637a69d5, + 0x88af793bb6f2255e, 0xf3c6466b8799b598, 0xc288c616aa7f3b59, + 0x81ca63cf42fca3fd, 0x88d85ace36a2674b, 0xd056bd3792389e7, + 0xe55c396c4e9dd32d, 0xbefb504571e6c0a6, 0x96ab32115e91e8cc, + 0xbf8acb18de8f38d1, 0x66dae58801672606, 0x833b6017872317fb, + 0xb87c16f2d1c92864, 0xdb766a74e58b669c, 0x89659f85c61417be, + 0xc8daad856011ea0c, 0x76a4b565b6fe7eae, 0xa469d085f6237312, + 0xaaf0365683a3e96c, 0x4dbb746f8424f7b8, 0x638755af4e4acc1, + 0x3d7807f5bde64486, 0x17be6d8f5bbb7639, 0x903f0cd44dc35dc, + 0x67b672eafdf1196c, 0xa676ff93ed4c82f1, 0x521d1004c5053d9d, + 0x37ba9ad09ccc9202, 0x84e54d297aacfb51, 0xa0b4b776a143445, + 0x820d471e20b348e, 0x1874383cb83d46dc, 0x97edeec7a1efe11c, + 0xb330e50b1bdc42aa, 0x1dd91955ce70e032, 0xa514cdb88f2939d5, + 0x2791233fd90db9d3, 0x7b670a4cc50f7a9b, 0x77c07d2a05c6dfa5, + 0xe3778b6646d0a6fa, 0xb39c8eda47b56749, 0x933ed448addbef28, + 0xaf846af6ab7d0bf4, 0xe5af208eb666e49, 0x5e6622f73534cd6a, + 0x297daeca42ef5b6e, 0x862daef3d35539a6, 0xe68722498f8e1ea9, + 0x981c53093dc0d572, 0xfa09b0bfbf86fbf5, 0x30b1e96166219f15, + 0x70e7d466bdc4fb83, 0x5a66736e35f2a8e9, 0xcddb59d2b7c1baef, + 0xd6c7d247d26d8996, 0xea4e39eac8de1ba3, 0x539c8bb19fa3aff2, + 0x9f90e4c5fd508d8, 0xa34e5956fbaf3385, 0x2e2f8e151d3ef375, + 0x173691e9b83faec1, 0xb85a8d56bf016379, 0x8382381267408ae3, + 0xb90f901bbdc0096d, 0x7c6ad32933bcec65, 0x76bb5e2f2c8ad595, + 0x390f851a6cf46d28, 0xc3e6064da1c2da72, 0xc52a0c101cfa5389, + 0xd78eaf84a3fbc530, 0x3781b9e2288b997e, 0x73c2f6dea83d05c4, + 0x4228e364c5b5ed7, 0x9d7a3edf0da43911, 0x8edcfeda24686756, + 0x5e7667a7b7a9b3a1, 0x4c4f389fa143791d, 0xb08bc1023da7cddc, + 0x7ab4be3ae529b1cc, 0x754e6132dbe74ff9, 0x71635442a839df45, + 0x2f6fb1643fbe52de, 0x961e0a42cf7a8177, 0xf3b45d83d89ef2ea, + 0xee3de4cf4a6e3e9b, 0xcd6848542c3295e7, 0xe4cee1664c78662f, + 0x9947548b474c68c4, 0x25d73777a5ed8b0b, 0xc915b1d636b7fc, + 0x21c2ba75d9b0d2da, 0x5f6b5dcf608a64a1, 0xdcf333255ff9570c, + 0x633b922418ced4ee, 0xc136dde0b004b34a, 0x58cc83b05d4b2f5a, + 0x5eb424dda28e42d2, 0x62df47369739cd98, 0xb4e0b42485e4ce17, + 0x16e1f0c1f9a8d1e7, 0x8ec3916707560ebf, 0x62ba6e2df2cc9db3, + 0xcbf9f4ff77d83a16, 0x78d9d7d07d2bbcc4, 0xef554ce1e02c41f4, + 0x8d7581127eccf94d, 0xa9b53336cb3c8a05, 0x38c42c0bf45c4f91, + 0x640893cdf4488863, 0x80ec34bc575ea568, 0x39f324f5b48eaa40, + 0xe9d9ed1f8eff527f, 0x9224fc058cc5a214, 0xbaba00b04cfe7741, + 0x309a9f120fcf52af, 0xa558f3ec65626212, 0x424bec8b7adabe2f, + 0x41622513a6aea433, 0xb88da2d5324ca798, 0xd287733b245528a4, + 0x9a44697e6d68aec3, 0x7b1093be2f49bb28, 0x50bbec632e3d8aad, + 0x6cd90723e1ea8283, 0x897b9e7431b02bf3, 0x219efdcb338a7047, + 0x3b0311f0a27c0656, 0xdb17bf91c0db96e7, 0x8cd4fd6b4e85a5b2, + 0xfab071054ba6409d, 0x40d6fe831fa9dfd9, 0xaf358debad7d791e, + 0xeb8d0e25a65e3e58, 0xbbcbd3df14e08580, 0xcf751f27ecdab2b, + 0x2b4da14f2613d8f4 +}; + +#endif /* ZSTD_LDM_GEARTAB_H */ diff --git a/thirdparty/zstd/compress/zstd_opt.c b/thirdparty/zstd/compress/zstd_opt.c index e55c459deb..402a7e5c76 100644 --- a/thirdparty/zstd/compress/zstd_opt.c +++ b/thirdparty/zstd/compress/zstd_opt.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Przemyslaw Skibinski, Yann Collet, Facebook, Inc. + * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstd_opt.h b/thirdparty/zstd/compress/zstd_opt.h index 9aba8a9018..627255f53d 100644 --- a/thirdparty/zstd/compress/zstd_opt.h +++ b/thirdparty/zstd/compress/zstd_opt.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/compress/zstdmt_compress.c b/thirdparty/zstd/compress/zstdmt_compress.c index 50454a50b9..22aa3e1245 100644 --- a/thirdparty/zstd/compress/zstdmt_compress.c +++ b/thirdparty/zstd/compress/zstdmt_compress.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -472,8 +472,6 @@ ZSTDMT_serialState_reset(serialState_t* serialState, ZSTD_ldm_adjustParameters(¶ms.ldmParams, ¶ms.cParams); assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog); assert(params.ldmParams.hashRateLog < 32); - serialState->ldmState.hashPower = - ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength); } else { ZSTD_memset(¶ms.ldmParams, 0, sizeof(params.ldmParams)); } @@ -486,10 +484,10 @@ ZSTDMT_serialState_reset(serialState_t* serialState, size_t const hashSize = ((size_t)1 << hashLog) * sizeof(ldmEntry_t); unsigned const bucketLog = params.ldmParams.hashLog - params.ldmParams.bucketSizeLog; - size_t const bucketSize = (size_t)1 << bucketLog; unsigned const prevBucketLog = serialState->params.ldmParams.hashLog - serialState->params.ldmParams.bucketSizeLog; + size_t const numBuckets = (size_t)1 << bucketLog; /* Size the seq pool tables */ ZSTDMT_setNbSeq(seqPool, ZSTD_ldm_getMaxNbSeq(params.ldmParams, jobSize)); /* Reset the window */ @@ -501,20 +499,20 @@ ZSTDMT_serialState_reset(serialState_t* serialState, } if (serialState->ldmState.bucketOffsets == NULL || prevBucketLog < bucketLog) { ZSTD_customFree(serialState->ldmState.bucketOffsets, cMem); - serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(bucketSize, cMem); + serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(numBuckets, cMem); } if (!serialState->ldmState.hashTable || !serialState->ldmState.bucketOffsets) return 1; /* Zero the tables */ ZSTD_memset(serialState->ldmState.hashTable, 0, hashSize); - ZSTD_memset(serialState->ldmState.bucketOffsets, 0, bucketSize); + ZSTD_memset(serialState->ldmState.bucketOffsets, 0, numBuckets); /* Update window state and fill hash table with dict */ serialState->ldmState.loadedDictEnd = 0; if (dictSize > 0) { if (dictContentType == ZSTD_dct_rawContent) { BYTE const* const dictEnd = (const BYTE*)dict + dictSize; - ZSTD_window_update(&serialState->ldmState.window, dict, dictSize); + ZSTD_window_update(&serialState->ldmState.window, dict, dictSize, /* forceNonContiguous */ 0); ZSTD_ldm_fillHashTable(&serialState->ldmState, (const BYTE*)dict, dictEnd, ¶ms.ldmParams); serialState->ldmState.loadedDictEnd = params.forceWindow ? 0 : (U32)(dictEnd - serialState->ldmState.window.base); } else { @@ -571,7 +569,7 @@ static void ZSTDMT_serialState_update(serialState_t* serialState, assert(seqStore.seq != NULL && seqStore.pos == 0 && seqStore.size == 0 && seqStore.capacity > 0); assert(src.size <= serialState->params.jobSize); - ZSTD_window_update(&serialState->ldmState.window, src.start, src.size); + ZSTD_window_update(&serialState->ldmState.window, src.start, src.size, /* forceNonContiguous */ 0); error = ZSTD_ldm_generateSequences( &serialState->ldmState, &seqStore, &serialState->params.ldmParams, src.start, src.size); @@ -683,6 +681,8 @@ static void ZSTDMT_compressionJob(void* jobDescription) if (job->jobID != 0) jobParams.fParams.checksumFlag = 0; /* Don't run LDM for the chunks, since we handle it externally */ jobParams.ldmParams.enableLdm = 0; + /* Correct nbWorkers to 0. */ + jobParams.nbWorkers = 0; /* init */ @@ -695,6 +695,10 @@ static void ZSTDMT_compressionJob(void* jobDescription) { size_t const forceWindowError = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_forceMaxWindow, !job->firstJob); if (ZSTD_isError(forceWindowError)) JOB_ERROR(forceWindowError); } + if (!job->firstJob) { + size_t const err = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_deterministicRefPrefix, 0); + if (ZSTD_isError(err)) JOB_ERROR(err); + } { size_t const initError = ZSTD_compressBegin_advanced_internal(cctx, job->prefix.start, job->prefix.size, ZSTD_dct_rawContent, /* load dictionary in "content-only" mode (no header analysis) */ ZSTD_dtlm_fast, @@ -750,6 +754,13 @@ static void ZSTDMT_compressionJob(void* jobDescription) if (ZSTD_isError(cSize)) JOB_ERROR(cSize); lastCBlockSize = cSize; } } + if (!job->firstJob) { + /* Double check that we don't have an ext-dict, because then our + * repcode invalidation doesn't work. + */ + assert(!ZSTD_window_hasExtDict(cctx->blockState.matchState.window)); + } + ZSTD_CCtx_trace(cctx, 0); _endJob: ZSTDMT_serialState_ensureFinished(job->serial, job->jobID, job->cSize); @@ -1239,9 +1250,8 @@ size_t ZSTDMT_initCStream_internal( if (params.rsyncable) { /* Aim for the targetsectionSize as the average job size. */ - U32 const jobSizeMB = (U32)(mtctx->targetSectionSize >> 20); - U32 const rsyncBits = ZSTD_highbit32(jobSizeMB) + 20; - assert(jobSizeMB >= 1); + U32 const jobSizeKB = (U32)(mtctx->targetSectionSize >> 10); + U32 const rsyncBits = (assert(jobSizeKB >= 1), ZSTD_highbit32(jobSizeKB) + 10); DEBUGLOG(4, "rsyncLog = %u", rsyncBits); mtctx->rsync.hash = 0; mtctx->rsync.hitMask = (1ULL << rsyncBits) - 1; diff --git a/thirdparty/zstd/compress/zstdmt_compress.h b/thirdparty/zstd/compress/zstdmt_compress.h index 0a9e551c99..2fee2ec745 100644 --- a/thirdparty/zstd/compress/zstdmt_compress.h +++ b/thirdparty/zstd/compress/zstdmt_compress.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -32,11 +32,11 @@ /* === Constants === */ -#ifndef ZSTDMT_NBWORKERS_MAX -# define ZSTDMT_NBWORKERS_MAX 200 +#ifndef ZSTDMT_NBWORKERS_MAX /* a different value can be selected at compile time */ +# define ZSTDMT_NBWORKERS_MAX ((sizeof(void*)==4) /*32-bit*/ ? 64 : 256) #endif -#ifndef ZSTDMT_JOBSIZE_MIN -# define ZSTDMT_JOBSIZE_MIN (1 MB) +#ifndef ZSTDMT_JOBSIZE_MIN /* a different value can be selected at compile time */ +# define ZSTDMT_JOBSIZE_MIN (512 KB) #endif #define ZSTDMT_JOBLOG_MAX (MEM_32bits() ? 29 : 30) #define ZSTDMT_JOBSIZE_MAX (MEM_32bits() ? (512 MB) : (1024 MB)) diff --git a/thirdparty/zstd/decompress/huf_decompress.c b/thirdparty/zstd/decompress/huf_decompress.c index 1418206718..b93c9a003b 100644 --- a/thirdparty/zstd/decompress/huf_decompress.c +++ b/thirdparty/zstd/decompress/huf_decompress.c @@ -1,7 +1,7 @@ /* ****************************************************************** * huff0 huffman decoder, * part of Finite State Entropy library - * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * * You can contact the author at : * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy @@ -528,13 +528,15 @@ typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX]; static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 consumed, const U32* rankValOrigin, const int minWeight, const sortedSymbol_t* sortedSymbols, const U32 sortedListSize, - U32 nbBitsBaseline, U16 baseSeq) + U32 nbBitsBaseline, U16 baseSeq, U32* wksp, size_t wkspSize) { HUF_DEltX2 DElt; - U32 rankVal[HUF_TABLELOG_MAX + 1]; + U32* rankVal = wksp; + assert(wkspSize >= HUF_TABLELOG_MAX + 1); + (void)wkspSize; /* get pre-calculated rankVal */ - ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal)); + ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1)); /* fill skipped values */ if (minWeight>1) { @@ -569,14 +571,18 @@ static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 co static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog, const sortedSymbol_t* sortedList, const U32 sortedListSize, const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight, - const U32 nbBitsBaseline) + const U32 nbBitsBaseline, U32* wksp, size_t wkspSize) { - U32 rankVal[HUF_TABLELOG_MAX + 1]; + U32* rankVal = wksp; const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */ const U32 minBits = nbBitsBaseline - maxWeight; U32 s; - ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal)); + assert(wkspSize >= HUF_TABLELOG_MAX + 1); + wksp += HUF_TABLELOG_MAX + 1; + wkspSize -= HUF_TABLELOG_MAX + 1; + + ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1)); /* fill DTable */ for (s=0; s<sortedListSize; s++) { @@ -594,7 +600,7 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog, HUF_fillDTableX2Level2(DTable+start, targetLog-nbBits, nbBits, rankValOrigin[nbBits], minWeight, sortedList+sortedRank, sortedListSize-sortedRank, - nbBitsBaseline, symbol); + nbBitsBaseline, symbol, wksp, wkspSize); } else { HUF_DEltX2 DElt; MEM_writeLE16(&(DElt.sequence), symbol); @@ -608,6 +614,15 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog, } } +typedef struct { + rankValCol_t rankVal[HUF_TABLELOG_MAX]; + U32 rankStats[HUF_TABLELOG_MAX + 1]; + U32 rankStart0[HUF_TABLELOG_MAX + 2]; + sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1]; + BYTE weightList[HUF_SYMBOLVALUE_MAX + 1]; + U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; +} HUF_ReadDTableX2_Workspace; + size_t HUF_readDTableX2_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize) @@ -620,47 +635,32 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable, HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr; U32 *rankStart; - rankValCol_t* rankVal; - U32* rankStats; - U32* rankStart0; - sortedSymbol_t* sortedSymbol; - BYTE* weightList; - size_t spaceUsed32 = 0; - - rankVal = (rankValCol_t *)((U32 *)workSpace + spaceUsed32); - spaceUsed32 += (sizeof(rankValCol_t) * HUF_TABLELOG_MAX) >> 2; - rankStats = (U32 *)workSpace + spaceUsed32; - spaceUsed32 += HUF_TABLELOG_MAX + 1; - rankStart0 = (U32 *)workSpace + spaceUsed32; - spaceUsed32 += HUF_TABLELOG_MAX + 2; - sortedSymbol = (sortedSymbol_t *)workSpace + (spaceUsed32 * sizeof(U32)) / sizeof(sortedSymbol_t); - spaceUsed32 += HUF_ALIGN(sizeof(sortedSymbol_t) * (HUF_SYMBOLVALUE_MAX + 1), sizeof(U32)) >> 2; - weightList = (BYTE *)((U32 *)workSpace + spaceUsed32); - spaceUsed32 += HUF_ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2; - - if ((spaceUsed32 << 2) > wkspSize) return ERROR(tableLog_tooLarge); - - rankStart = rankStart0 + 1; - ZSTD_memset(rankStats, 0, sizeof(U32) * (2 * HUF_TABLELOG_MAX + 2 + 1)); + HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace; + + if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC); + + rankStart = wksp->rankStart0 + 1; + ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats)); + ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0)); DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */ if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge); /* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */ - iSize = HUF_readStats(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize); + iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), /* bmi2 */ 0); if (HUF_isError(iSize)) return iSize; /* check result */ if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */ /* find maxWeight */ - for (maxW = tableLog; rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */ + for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */ /* Get start index of each weight */ { U32 w, nextRankStart = 0; for (w=1; w<maxW+1; w++) { U32 curr = nextRankStart; - nextRankStart += rankStats[w]; + nextRankStart += wksp->rankStats[w]; rankStart[w] = curr; } rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/ @@ -670,37 +670,38 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable, /* sort symbols by weight */ { U32 s; for (s=0; s<nbSymbols; s++) { - U32 const w = weightList[s]; + U32 const w = wksp->weightList[s]; U32 const r = rankStart[w]++; - sortedSymbol[r].symbol = (BYTE)s; - sortedSymbol[r].weight = (BYTE)w; + wksp->sortedSymbol[r].symbol = (BYTE)s; + wksp->sortedSymbol[r].weight = (BYTE)w; } rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */ } /* Build rankVal */ - { U32* const rankVal0 = rankVal[0]; + { U32* const rankVal0 = wksp->rankVal[0]; { int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */ U32 nextRankVal = 0; U32 w; for (w=1; w<maxW+1; w++) { U32 curr = nextRankVal; - nextRankVal += rankStats[w] << (w+rescale); + nextRankVal += wksp->rankStats[w] << (w+rescale); rankVal0[w] = curr; } } { U32 const minBits = tableLog+1 - maxW; U32 consumed; for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) { - U32* const rankValPtr = rankVal[consumed]; + U32* const rankValPtr = wksp->rankVal[consumed]; U32 w; for (w = 1; w < maxW+1; w++) { rankValPtr[w] = rankVal0[w] >> consumed; } } } } HUF_fillDTableX2(dt, maxTableLog, - sortedSymbol, sizeOfSort, - rankStart0, rankVal, maxW, - tableLog+1); + wksp->sortedSymbol, sizeOfSort, + wksp->rankStart0, wksp->rankVal, maxW, + tableLog+1, + wksp->calleeWksp, sizeof(wksp->calleeWksp) / sizeof(U32)); dtd.tableLog = (BYTE)maxTableLog; dtd.tableType = 1; @@ -1225,7 +1226,7 @@ size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cS HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX); return HUF_decompress1X1_DCtx (DTable, dst, dstSize, cSrc, cSrcSize); } -#endif +#endif #ifndef HUF_FORCE_DECOMPRESS_X1 size_t HUF_readDTableX2(HUF_DTable* DTable, const void* src, size_t srcSize) diff --git a/thirdparty/zstd/decompress/zstd_ddict.c b/thirdparty/zstd/decompress/zstd_ddict.c index f5cc23b387..ce335477b3 100644 --- a/thirdparty/zstd/decompress/zstd_ddict.c +++ b/thirdparty/zstd/decompress/zstd_ddict.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/decompress/zstd_ddict.h b/thirdparty/zstd/decompress/zstd_ddict.h index 8906a71c94..bd03268b50 100644 --- a/thirdparty/zstd/decompress/zstd_ddict.h +++ b/thirdparty/zstd/decompress/zstd_ddict.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/decompress/zstd_decompress.c b/thirdparty/zstd/decompress/zstd_decompress.c index 21f846bc77..910bc034c0 100644 --- a/thirdparty/zstd/decompress/zstd_decompress.c +++ b/thirdparty/zstd/decompress/zstd_decompress.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -62,6 +62,7 @@ #include "../common/fse.h" #define HUF_STATIC_LINKING_ONLY #include "../common/huf.h" +#include "../common/xxhash.h" /* XXH64_reset, XXH64_update, XXH64_digest, XXH64 */ #include "../common/zstd_internal.h" /* blockProperties_t */ #include "zstd_decompress_internal.h" /* ZSTD_DCtx */ #include "zstd_ddict.h" /* ZSTD_DDictDictContent */ @@ -72,6 +73,144 @@ #endif + +/************************************* + * Multiple DDicts Hashset internals * + *************************************/ + +#define DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT 4 +#define DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT 3 /* These two constants represent SIZE_MULT/COUNT_MULT load factor without using a float. + * Currently, that means a 0.75 load factor. + * So, if count * COUNT_MULT / size * SIZE_MULT != 0, then we've exceeded + * the load factor of the ddict hash set. + */ + +#define DDICT_HASHSET_TABLE_BASE_SIZE 64 +#define DDICT_HASHSET_RESIZE_FACTOR 2 + +/* Hash function to determine starting position of dict insertion within the table + * Returns an index between [0, hashSet->ddictPtrTableSize] + */ +static size_t ZSTD_DDictHashSet_getIndex(const ZSTD_DDictHashSet* hashSet, U32 dictID) { + const U64 hash = XXH64(&dictID, sizeof(U32), 0); + /* DDict ptr table size is a multiple of 2, use size - 1 as mask to get index within [0, hashSet->ddictPtrTableSize) */ + return hash & (hashSet->ddictPtrTableSize - 1); +} + +/* Adds DDict to a hashset without resizing it. + * If inserting a DDict with a dictID that already exists in the set, replaces the one in the set. + * Returns 0 if successful, or a zstd error code if something went wrong. + */ +static size_t ZSTD_DDictHashSet_emplaceDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict) { + const U32 dictID = ZSTD_getDictID_fromDDict(ddict); + size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID); + const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1; + RETURN_ERROR_IF(hashSet->ddictPtrCount == hashSet->ddictPtrTableSize, GENERIC, "Hash set is full!"); + DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx); + while (hashSet->ddictPtrTable[idx] != NULL) { + /* Replace existing ddict if inserting ddict with same dictID */ + if (ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]) == dictID) { + DEBUGLOG(4, "DictID already exists, replacing rather than adding"); + hashSet->ddictPtrTable[idx] = ddict; + return 0; + } + idx &= idxRangeMask; + idx++; + } + DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx); + hashSet->ddictPtrTable[idx] = ddict; + hashSet->ddictPtrCount++; + return 0; +} + +/* Expands hash table by factor of DDICT_HASHSET_RESIZE_FACTOR and + * rehashes all values, allocates new table, frees old table. + * Returns 0 on success, otherwise a zstd error code. + */ +static size_t ZSTD_DDictHashSet_expand(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) { + size_t newTableSize = hashSet->ddictPtrTableSize * DDICT_HASHSET_RESIZE_FACTOR; + const ZSTD_DDict** newTable = (const ZSTD_DDict**)ZSTD_customCalloc(sizeof(ZSTD_DDict*) * newTableSize, customMem); + const ZSTD_DDict** oldTable = hashSet->ddictPtrTable; + size_t oldTableSize = hashSet->ddictPtrTableSize; + size_t i; + + DEBUGLOG(4, "Expanding DDict hash table! Old size: %zu new size: %zu", oldTableSize, newTableSize); + RETURN_ERROR_IF(!newTable, memory_allocation, "Expanded hashset allocation failed!"); + hashSet->ddictPtrTable = newTable; + hashSet->ddictPtrTableSize = newTableSize; + hashSet->ddictPtrCount = 0; + for (i = 0; i < oldTableSize; ++i) { + if (oldTable[i] != NULL) { + FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, oldTable[i]), ""); + } + } + ZSTD_customFree((void*)oldTable, customMem); + DEBUGLOG(4, "Finished re-hash"); + return 0; +} + +/* Fetches a DDict with the given dictID + * Returns the ZSTD_DDict* with the requested dictID. If it doesn't exist, then returns NULL. + */ +static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet, U32 dictID) { + size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID); + const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1; + DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx); + for (;;) { + size_t currDictID = ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]); + if (currDictID == dictID || currDictID == 0) { + /* currDictID == 0 implies a NULL ddict entry */ + break; + } else { + idx &= idxRangeMask; /* Goes to start of table when we reach the end */ + idx++; + } + } + DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx); + return hashSet->ddictPtrTable[idx]; +} + +/* Allocates space for and returns a ddict hash set + * The hash set's ZSTD_DDict* table has all values automatically set to NULL to begin with. + * Returns NULL if allocation failed. + */ +static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) { + ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem); + DEBUGLOG(4, "Allocating new hash set"); + ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem); + ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE; + ret->ddictPtrCount = 0; + if (!ret || !ret->ddictPtrTable) { + return NULL; + } + return ret; +} + +/* Frees the table of ZSTD_DDict* within a hashset, then frees the hashset itself. + * Note: The ZSTD_DDict* within the table are NOT freed. + */ +static void ZSTD_freeDDictHashSet(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) { + DEBUGLOG(4, "Freeing ddict hash set"); + if (hashSet && hashSet->ddictPtrTable) { + ZSTD_customFree((void*)hashSet->ddictPtrTable, customMem); + } + if (hashSet) { + ZSTD_customFree(hashSet, customMem); + } +} + +/* Public function: Adds a DDict into the ZSTD_DDictHashSet, possibly triggering a resize of the hash set. + * Returns 0 on success, or a ZSTD error. + */ +static size_t ZSTD_DDictHashSet_addDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict, ZSTD_customMem customMem) { + DEBUGLOG(4, "Adding dict ID: %u to hashset with - Count: %zu Tablesize: %zu", ZSTD_getDictID_fromDDict(ddict), hashSet->ddictPtrCount, hashSet->ddictPtrTableSize); + if (hashSet->ddictPtrCount * DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT / hashSet->ddictPtrTableSize * DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT != 0) { + FORWARD_IF_ERROR(ZSTD_DDictHashSet_expand(hashSet, customMem), ""); + } + FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, ddict), ""); + return 0; +} + /*-************************************************************* * Context management ***************************************************************/ @@ -101,6 +240,7 @@ static void ZSTD_DCtx_resetParameters(ZSTD_DCtx* dctx) dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT; dctx->outBufferMode = ZSTD_bm_buffered; dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum; + dctx->refMultipleDDicts = ZSTD_rmd_refSingleDDict; } static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx) @@ -120,8 +260,8 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx) dctx->noForwardProgress = 0; dctx->oversizedDuration = 0; dctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid()); + dctx->ddictSet = NULL; ZSTD_DCtx_resetParameters(dctx); - dctx->validateChecksum = 1; #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION dctx->dictContentEndForFuzzing = NULL; #endif @@ -178,6 +318,10 @@ size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx) if (dctx->legacyContext) ZSTD_freeLegacyStreamContext(dctx->legacyContext, dctx->previousLegacyVersion); #endif + if (dctx->ddictSet) { + ZSTD_freeDDictHashSet(dctx->ddictSet, cMem); + dctx->ddictSet = NULL; + } ZSTD_customFree(dctx, cMem); return 0; } @@ -190,6 +334,29 @@ void ZSTD_copyDCtx(ZSTD_DCtx* dstDCtx, const ZSTD_DCtx* srcDCtx) ZSTD_memcpy(dstDCtx, srcDCtx, toCopy); /* no need to copy workspace */ } +/* Given a dctx with a digested frame params, re-selects the correct ZSTD_DDict based on + * the requested dict ID from the frame. If there exists a reference to the correct ZSTD_DDict, then + * accordingly sets the ddict to be used to decompress the frame. + * + * If no DDict is found, then no action is taken, and the ZSTD_DCtx::ddict remains as-is. + * + * ZSTD_d_refMultipleDDicts must be enabled for this function to be called. + */ +static void ZSTD_DCtx_selectFrameDDict(ZSTD_DCtx* dctx) { + assert(dctx->refMultipleDDicts && dctx->ddictSet); + DEBUGLOG(4, "Adjusting DDict based on requested dict ID from frame"); + if (dctx->ddict) { + const ZSTD_DDict* frameDDict = ZSTD_DDictHashSet_getDDict(dctx->ddictSet, dctx->fParams.dictID); + if (frameDDict) { + DEBUGLOG(4, "DDict found!"); + ZSTD_clearDict(dctx); + dctx->dictID = dctx->fParams.dictID; + dctx->ddict = frameDDict; + dctx->dictUses = ZSTD_use_indefinitely; + } + } +} + /*-************************************************************* * Frame header decoding @@ -441,12 +608,19 @@ unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize) /** ZSTD_decodeFrameHeader() : * `headerSize` must be the size provided by ZSTD_frameHeaderSize(). + * If multiple DDict references are enabled, also will choose the correct DDict to use. * @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t headerSize) { size_t const result = ZSTD_getFrameHeader_advanced(&(dctx->fParams), src, headerSize, dctx->format); if (ZSTD_isError(result)) return result; /* invalid header */ RETURN_ERROR_IF(result>0, srcSize_wrong, "headerSize too small"); + + /* Reference DDict requested by frame if dctx references multiple ddicts */ + if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts && dctx->ddictSet) { + ZSTD_DCtx_selectFrameDDict(dctx); + } + #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION /* Skip the dictID check in fuzzing mode, because it makes the search * harder. @@ -456,6 +630,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he #endif dctx->validateChecksum = (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum) ? 1 : 0; if (dctx->validateChecksum) XXH64_reset(&dctx->xxhState, 0); + dctx->processedCSize += headerSize; return 0; } @@ -578,7 +753,7 @@ unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize) size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize) { DEBUGLOG(5, "ZSTD_insertBlock: %u bytes", (unsigned)blockSize); - ZSTD_checkContinuity(dctx, blockStart); + ZSTD_checkContinuity(dctx, blockStart, blockSize); dctx->previousDstEnd = (const char*)blockStart + blockSize; return blockSize; } @@ -610,6 +785,32 @@ static size_t ZSTD_setRleBlock(void* dst, size_t dstCapacity, return regenSize; } +static void ZSTD_DCtx_trace_end(ZSTD_DCtx const* dctx, U64 uncompressedSize, U64 compressedSize, unsigned streaming) +{ +#if ZSTD_TRACE + if (dctx->traceCtx && ZSTD_trace_decompress_end != NULL) { + ZSTD_Trace trace; + ZSTD_memset(&trace, 0, sizeof(trace)); + trace.version = ZSTD_VERSION_NUMBER; + trace.streaming = streaming; + if (dctx->ddict) { + trace.dictionaryID = ZSTD_getDictID_fromDDict(dctx->ddict); + trace.dictionarySize = ZSTD_DDict_dictSize(dctx->ddict); + trace.dictionaryIsCold = dctx->ddictIsCold; + } + trace.uncompressedSize = (size_t)uncompressedSize; + trace.compressedSize = (size_t)compressedSize; + trace.dctx = dctx; + ZSTD_trace_decompress_end(dctx->traceCtx, &trace); + } +#else + (void)dctx; + (void)uncompressedSize; + (void)compressedSize; + (void)streaming; +#endif +} + /*! ZSTD_decompressFrame() : * @dctx must be properly initialized @@ -619,8 +820,9 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void** srcPtr, size_t *srcSizePtr) { - const BYTE* ip = (const BYTE*)(*srcPtr); - BYTE* const ostart = (BYTE* const)dst; + const BYTE* const istart = (const BYTE*)(*srcPtr); + const BYTE* ip = istart; + BYTE* const ostart = (BYTE*)dst; BYTE* const oend = dstCapacity != 0 ? ostart + dstCapacity : ostart; BYTE* op = ostart; size_t remainingSrcSize = *srcSizePtr; @@ -695,7 +897,7 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, ip += 4; remainingSrcSize -= 4; } - + ZSTD_DCtx_trace_end(dctx, (U64)(op-ostart), (U64)(ip-istart), /* streaming */ 0); /* Allow caller to get size read */ *srcPtr = ip; *srcSizePtr = remainingSrcSize; @@ -764,7 +966,7 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx, * use this in all cases but ddict */ FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDict(dctx, dict, dictSize), ""); } - ZSTD_checkContinuity(dctx, dst); + ZSTD_checkContinuity(dctx, dst, dstCapacity); { const size_t res = ZSTD_decompressFrame(dctx, dst, dstCapacity, &src, &srcSize); @@ -899,7 +1101,9 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c DEBUGLOG(5, "ZSTD_decompressContinue (srcSize:%u)", (unsigned)srcSize); /* Sanity check */ RETURN_ERROR_IF(srcSize != ZSTD_nextSrcSizeToDecompressWithInputSize(dctx, srcSize), srcSize_wrong, "not allowed"); - if (dstCapacity) ZSTD_checkContinuity(dctx, dst); + ZSTD_checkContinuity(dctx, dst, dstCapacity); + + dctx->processedCSize += srcSize; switch (dctx->stage) { @@ -1004,6 +1208,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c dctx->expected = 4; dctx->stage = ZSTDds_checkChecksum; } else { + ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1); dctx->expected = 0; /* ends here */ dctx->stage = ZSTDds_getFrameHeaderSize; } @@ -1023,6 +1228,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c DEBUGLOG(4, "ZSTD_decompressContinue: checksum : calculated %08X :: %08X read", (unsigned)h32, (unsigned)check32); RETURN_ERROR_IF(check32 != h32, checksum_wrong, ""); } + ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1); dctx->expected = 0; dctx->stage = ZSTDds_getFrameHeaderSize; return 0; @@ -1176,8 +1382,12 @@ static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx* dctx, const void* dict size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx) { assert(dctx != NULL); +#if ZSTD_TRACE + dctx->traceCtx = (ZSTD_trace_decompress_begin != NULL) ? ZSTD_trace_decompress_begin(dctx) : 0; +#endif dctx->expected = ZSTD_startingInputLength(dctx->format); /* dctx->format must be properly set */ dctx->stage = ZSTDds_getFrameHeaderSize; + dctx->processedCSize = 0; dctx->decodedSize = 0; dctx->previousDstEnd = NULL; dctx->prefixStart = NULL; @@ -1391,6 +1601,16 @@ size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict) if (ddict) { dctx->ddict = ddict; dctx->dictUses = ZSTD_use_indefinitely; + if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts) { + if (dctx->ddictSet == NULL) { + dctx->ddictSet = ZSTD_createDDictHashSet(dctx->customMem); + if (!dctx->ddictSet) { + RETURN_ERROR(memory_allocation, "Failed to allocate memory for hash set!"); + } + } + assert(!dctx->staticSize); /* Impossible: ddictSet cannot have been allocated if static dctx */ + FORWARD_IF_ERROR(ZSTD_DDictHashSet_addDDict(dctx->ddictSet, ddict, dctx->customMem), ""); + } } return 0; } @@ -1436,6 +1656,10 @@ ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam) bounds.lowerBound = (int)ZSTD_d_validateChecksum; bounds.upperBound = (int)ZSTD_d_ignoreChecksum; return bounds; + case ZSTD_d_refMultipleDDicts: + bounds.lowerBound = (int)ZSTD_rmd_refSingleDDict; + bounds.upperBound = (int)ZSTD_rmd_refMultipleDDicts; + return bounds; default:; } bounds.error = ERROR(parameter_unsupported); @@ -1473,6 +1697,9 @@ size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value case ZSTD_d_forceIgnoreChecksum: *value = (int)dctx->forceIgnoreChecksum; return 0; + case ZSTD_d_refMultipleDDicts: + *value = (int)dctx->refMultipleDDicts; + return 0; default:; } RETURN_ERROR(parameter_unsupported, ""); @@ -1499,6 +1726,13 @@ size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter dParam, int value CHECK_DBOUNDS(ZSTD_d_forceIgnoreChecksum, value); dctx->forceIgnoreChecksum = (ZSTD_forceIgnoreChecksum_e)value; return 0; + case ZSTD_d_refMultipleDDicts: + CHECK_DBOUNDS(ZSTD_d_refMultipleDDicts, value); + if (dctx->staticSize != 0) { + RETURN_ERROR(parameter_unsupported, "Static dctx does not support multiple DDicts!"); + } + dctx->refMultipleDDicts = (ZSTD_refMultipleDDicts_e)value; + return 0; default:; } RETURN_ERROR(parameter_unsupported, ""); @@ -1680,6 +1914,9 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB } } #endif { size_t const hSize = ZSTD_getFrameHeader_advanced(&zds->fParams, zds->headerBuffer, zds->lhSize, zds->format); + if (zds->refMultipleDDicts && zds->ddictSet) { + ZSTD_DCtx_selectFrameDDict(zds); + } DEBUGLOG(5, "header size : %u", (U32)hSize); if (ZSTD_isError(hSize)) { #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.c b/thirdparty/zstd/decompress/zstd_decompress_block.c index 19cbdc5c16..349dcdc333 100644 --- a/thirdparty/zstd/decompress/zstd_decompress_block.c +++ b/thirdparty/zstd/decompress/zstd_decompress_block.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -577,7 +577,7 @@ static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymb size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr, const void* src, size_t srcSize) { - const BYTE* const istart = (const BYTE* const)src; + const BYTE* const istart = (const BYTE*)src; const BYTE* const iend = istart + srcSize; const BYTE* ip = istart; int nbSeq; @@ -658,7 +658,6 @@ typedef struct { size_t litLength; size_t matchLength; size_t offset; - const BYTE* match; } seq_t; typedef struct { @@ -672,9 +671,6 @@ typedef struct { ZSTD_fseState stateOffb; ZSTD_fseState stateML; size_t prevOffset[ZSTD_REP_NUM]; - const BYTE* prefixStart; - const BYTE* dictEnd; - size_t pos; } seqState_t; /*! ZSTD_overlapCopy8() : @@ -936,10 +932,9 @@ ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, ZSTD : 0) typedef enum { ZSTD_lo_isRegularOffset, ZSTD_lo_isLongOffset=1 } ZSTD_longOffset_e; -typedef enum { ZSTD_p_noPrefetch=0, ZSTD_p_prefetch=1 } ZSTD_prefetch_e; FORCE_INLINE_TEMPLATE seq_t -ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, const ZSTD_prefetch_e prefetch) +ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets) { seq_t seq; ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state]; @@ -1014,14 +1009,6 @@ ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, c DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u", (U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset); - if (prefetch == ZSTD_p_prefetch) { - size_t const pos = seqState->pos + seq.litLength; - const BYTE* const matchBase = (seq.offset > pos) ? seqState->dictEnd : seqState->prefixStart; - seq.match = matchBase + pos - seq.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted. - * No consequence though : no memory access will occur, offset is only used for prefetching */ - seqState->pos = pos + seq.matchLength; - } - /* ANS state update * gcc-9.0.0 does 2.5% worse with ZSTD_updateFseStateWithDInfo(). * clang-9.2.0 does 7% worse with ZSTD_updateFseState(). @@ -1108,7 +1095,7 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, { const BYTE* ip = (const BYTE*)seqStart; const BYTE* const iend = ip + seqSize; - BYTE* const ostart = (BYTE* const)dst; + BYTE* const ostart = (BYTE*)dst; BYTE* const oend = ostart + maxDstSize; BYTE* op = ostart; const BYTE* litPtr = dctx->litPtr; @@ -1122,7 +1109,6 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, /* Regen sequences */ if (nbSeq) { seqState_t seqState; - size_t error = 0; dctx->fseEntropy = 1; { U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; } RETURN_ERROR_IF( @@ -1156,13 +1142,14 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, * If you see most cycles served out of the DSB you've hit the good case. * If it is pretty even then you may be in an okay case. * - * I've been able to reproduce this issue on the following CPUs: + * This issue has been reproduced on the following CPUs: * - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9 * Use Instruments->Counters to get DSB/MITE cycles. * I never got performance swings, but I was able to * go from the good case of mostly DSB to half of the * cycles served from MITE. * - Coffeelake: Intel i9-9900k + * - Coffeelake: Intel i7-9700k * * I haven't been able to reproduce the instability or DSB misses on any * of the following CPUS: @@ -1175,33 +1162,35 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, * * https://gist.github.com/terrelln/9889fc06a423fd5ca6e99351564473f4 */ + __asm__(".p2align 6"); + __asm__("nop"); __asm__(".p2align 5"); __asm__("nop"); +# if __GNUC__ >= 9 + /* better for gcc-9 and gcc-10, worse for clang and gcc-8 */ + __asm__(".p2align 3"); +# else __asm__(".p2align 4"); +# endif #endif for ( ; ; ) { - seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_noPrefetch); + seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset); size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, prefixStart, vBase, dictEnd); #if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) assert(!ZSTD_isError(oneSeqSize)); if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase); #endif + if (UNLIKELY(ZSTD_isError(oneSeqSize))) + return oneSeqSize; DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize); - BIT_reloadDStream(&(seqState.DStream)); op += oneSeqSize; - /* gcc and clang both don't like early returns in this loop. - * Instead break and check for an error at the end of the loop. - */ - if (UNLIKELY(ZSTD_isError(oneSeqSize))) { - error = oneSeqSize; + if (UNLIKELY(!--nbSeq)) break; - } - if (UNLIKELY(!--nbSeq)) break; + BIT_reloadDStream(&(seqState.DStream)); } /* check if reached exact end */ DEBUGLOG(5, "ZSTD_decompressSequences_body: after decode loop, remaining nbSeq : %i", nbSeq); - if (ZSTD_isError(error)) return error; RETURN_ERROR_IF(nbSeq, corruption_detected, ""); RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, ""); /* save reps for next block */ @@ -1232,6 +1221,24 @@ ZSTD_decompressSequences_default(ZSTD_DCtx* dctx, #endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */ #ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT + +FORCE_INLINE_TEMPLATE size_t +ZSTD_prefetchMatch(size_t prefetchPos, seq_t const sequence, + const BYTE* const prefixStart, const BYTE* const dictEnd) +{ + prefetchPos += sequence.litLength; + { const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart; + const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted. + * No consequence though : memory address is only used for prefetching, not for dereferencing */ + PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */ + } + return prefetchPos + sequence.matchLength; +} + +/* This decoding function employs prefetching + * to reduce latency impact of cache misses. + * It's generally employed when block contains a significant portion of long-distance matches + * or when coupled with a "cold" dictionary */ FORCE_INLINE_TEMPLATE size_t ZSTD_decompressSequencesLong_body( ZSTD_DCtx* dctx, @@ -1242,7 +1249,7 @@ ZSTD_decompressSequencesLong_body( { const BYTE* ip = (const BYTE*)seqStart; const BYTE* const iend = ip + seqSize; - BYTE* const ostart = (BYTE* const)dst; + BYTE* const ostart = (BYTE*)dst; BYTE* const oend = ostart + maxDstSize; BYTE* op = ostart; const BYTE* litPtr = dctx->litPtr; @@ -1254,18 +1261,17 @@ ZSTD_decompressSequencesLong_body( /* Regen sequences */ if (nbSeq) { -#define STORED_SEQS 4 +#define STORED_SEQS 8 #define STORED_SEQS_MASK (STORED_SEQS-1) -#define ADVANCED_SEQS 4 +#define ADVANCED_SEQS STORED_SEQS seq_t sequences[STORED_SEQS]; int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS); seqState_t seqState; int seqNb; + size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */ + dctx->fseEntropy = 1; { int i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; } - seqState.prefixStart = prefixStart; - seqState.pos = (size_t)(op-prefixStart); - seqState.dictEnd = dictEnd; assert(dst != NULL); assert(iend >= ip); RETURN_ERROR_IF( @@ -1277,21 +1283,23 @@ ZSTD_decompressSequencesLong_body( /* prepare in advance */ for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) { - sequences[seqNb] = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch); - PREFETCH_L1(sequences[seqNb].match); PREFETCH_L1(sequences[seqNb].match + sequences[seqNb].matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */ + seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset); + prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd); + sequences[seqNb] = sequence; } RETURN_ERROR_IF(seqNb<seqAdvance, corruption_detected, ""); /* decode and decompress */ for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) { - seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch); + seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset); size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd); #if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) assert(!ZSTD_isError(oneSeqSize)); if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], prefixStart, dictStart); #endif if (ZSTD_isError(oneSeqSize)) return oneSeqSize; - PREFETCH_L1(sequence.match); PREFETCH_L1(sequence.match + sequence.matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */ + + prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd); sequences[seqNb & STORED_SEQS_MASK] = sequence; op += oneSeqSize; } @@ -1517,9 +1525,9 @@ ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, } -void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst) +void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize) { - if (dst != dctx->previousDstEnd) { /* not contiguous */ + if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */ dctx->dictEnd = dctx->previousDstEnd; dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart)); dctx->prefixStart = dst; @@ -1533,7 +1541,7 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, const void* src, size_t srcSize) { size_t dSize; - ZSTD_checkContinuity(dctx, dst); + ZSTD_checkContinuity(dctx, dst, dstCapacity); dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0); dctx->previousDstEnd = (char*)dst + dSize; return dSize; diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.h b/thirdparty/zstd/decompress/zstd_decompress_block.h index b5715c168e..049a0cd84c 100644 --- a/thirdparty/zstd/decompress/zstd_decompress_block.h +++ b/thirdparty/zstd/decompress/zstd_decompress_block.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/thirdparty/zstd/decompress/zstd_decompress_internal.h b/thirdparty/zstd/decompress/zstd_decompress_internal.h index f80b471e99..ebda0c9031 100644 --- a/thirdparty/zstd/decompress/zstd_decompress_internal.h +++ b/thirdparty/zstd/decompress/zstd_decompress_internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -99,6 +99,13 @@ typedef enum { ZSTD_use_once = 1 /* Use the dictionary once and set to ZSTD_dont_use */ } ZSTD_dictUses_e; +/* Hashset for storing references to multiple ZSTD_DDict within ZSTD_DCtx */ +typedef struct { + const ZSTD_DDict** ddictPtrTable; + size_t ddictPtrTableSize; + size_t ddictPtrCount; +} ZSTD_DDictHashSet; + struct ZSTD_DCtx_s { const ZSTD_seqSymbol* LLTptr; @@ -113,6 +120,7 @@ struct ZSTD_DCtx_s const void* dictEnd; /* end of previous segment */ size_t expected; ZSTD_frameHeader fParams; + U64 processedCSize; U64 decodedSize; blockType_e bType; /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */ ZSTD_dStage stage; @@ -136,6 +144,8 @@ struct ZSTD_DCtx_s U32 dictID; int ddictIsCold; /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */ ZSTD_dictUses_e dictUses; + ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */ + ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */ /* streaming */ ZSTD_dStreamStage streamStage; @@ -166,6 +176,11 @@ struct ZSTD_DCtx_s void const* dictContentBeginForFuzzing; void const* dictContentEndForFuzzing; #endif + + /* Tracing */ +#if ZSTD_TRACE + ZSTD_TraceCtx traceCtx; +#endif }; /* typedef'd to ZSTD_DCtx within "zstd.h" */ @@ -184,7 +199,7 @@ size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy, * If yes, do nothing (continue on current segment). * If not, classify previous segment as "external dictionary", and start a new segment. * This function cannot fail. */ -void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst); +void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize); #endif /* ZSTD_DECOMPRESS_INTERNAL_H */ diff --git a/thirdparty/zstd/zstd.h b/thirdparty/zstd/zstd.h index b0ecdf5538..4651e6c4dc 100644 --- a/thirdparty/zstd/zstd.h +++ b/thirdparty/zstd/zstd.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the @@ -71,8 +71,8 @@ extern "C" { /*------ Version ------*/ #define ZSTD_VERSION_MAJOR 1 -#define ZSTD_VERSION_MINOR 4 -#define ZSTD_VERSION_RELEASE 8 +#define ZSTD_VERSION_MINOR 5 +#define ZSTD_VERSION_RELEASE 0 #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) /*! ZSTD_versionNumber() : @@ -109,7 +109,6 @@ ZSTDLIB_API const char* ZSTD_versionString(void); #define ZSTD_BLOCKSIZE_MAX (1<<ZSTD_BLOCKSIZELOG_MAX) - /*************************************** * Simple API ***************************************/ @@ -166,7 +165,7 @@ ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t * @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */ ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); -/*! ZSTD_findFrameCompressedSize() : +/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+ * `src` should point to the start of a ZSTD frame or skippable frame. * `srcSize` must be >= first frame size * @return : the compressed size of the first frame starting at `src`, @@ -180,8 +179,9 @@ ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize) ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */ ZSTDLIB_API unsigned ZSTD_isError(size_t code); /*!< tells if a `size_t` function result is an error code */ ZSTDLIB_API const char* ZSTD_getErrorName(size_t code); /*!< provides readable string from an error code */ -ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed */ +ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */ ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */ +ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */ /*************************************** @@ -199,7 +199,7 @@ ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compres */ typedef struct ZSTD_CCtx_s ZSTD_CCtx; ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void); -ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); +ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* accept NULL pointer */ /*! ZSTD_compressCCtx() : * Same as ZSTD_compress(), using an explicit ZSTD_CCtx. @@ -222,7 +222,7 @@ ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, * Use one context per thread for parallel execution. */ typedef struct ZSTD_DCtx_s ZSTD_DCtx; ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void); -ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); +ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */ /*! ZSTD_decompressDCtx() : * Same as ZSTD_decompress(), @@ -234,9 +234,9 @@ ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, const void* src, size_t srcSize); -/*************************************** -* Advanced compression API -***************************************/ +/********************************************* +* Advanced compression API (Requires v1.4.0+) +**********************************************/ /* API design : * Parameters are pushed one by one into an existing context, @@ -266,7 +266,6 @@ typedef enum { ZSTD_fast=1, Only the order (from fast to strong) is guaranteed */ } ZSTD_strategy; - typedef enum { /* compression parameters @@ -332,7 +331,6 @@ typedef enum { * The higher the value of selected strategy, the more complex it is, * resulting in stronger and slower compression. * Special: value 0 means "use default strategy". */ - /* LDM mode parameters */ ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching. * This parameter is designed to improve compression ratio @@ -389,7 +387,7 @@ typedef enum { ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1. * Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads. * 0 means default, which is dynamically determined based on compression parameters. - * Job size must be a minimum of overlap size, or 1 MB, whichever is largest. + * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest. * The minimum size is automatically and transparently enforced. */ ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size. * The overlap size is an amount of data reloaded from previous job at the beginning of a new job. @@ -419,6 +417,8 @@ typedef enum { * ZSTD_c_stableOutBuffer * ZSTD_c_blockDelimiters * ZSTD_c_validateSequences + * ZSTD_c_splitBlocks + * ZSTD_c_useRowMatchFinder * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. * note : never ever use experimentalParam? names directly; * also, the enums values themselves are unstable and can still change. @@ -434,7 +434,10 @@ typedef enum { ZSTD_c_experimentalParam9=1006, ZSTD_c_experimentalParam10=1007, ZSTD_c_experimentalParam11=1008, - ZSTD_c_experimentalParam12=1009 + ZSTD_c_experimentalParam12=1009, + ZSTD_c_experimentalParam13=1010, + ZSTD_c_experimentalParam14=1011, + ZSTD_c_experimentalParam15=1012 } ZSTD_cParameter; typedef struct { @@ -519,9 +522,9 @@ ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx, const void* src, size_t srcSize); -/*************************************** -* Advanced decompression API -***************************************/ +/*********************************************** +* Advanced decompression API (Requires v1.4.0+) +************************************************/ /* The advanced API pushes parameters one by one into an existing DCtx context. * Parameters are sticky, and remain valid for all following frames @@ -546,12 +549,14 @@ typedef enum { * ZSTD_d_format * ZSTD_d_stableOutBuffer * ZSTD_d_forceIgnoreChecksum + * ZSTD_d_refMultipleDDicts * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. * note : never ever use experimentalParam? names directly */ ZSTD_d_experimentalParam1=1000, ZSTD_d_experimentalParam2=1001, - ZSTD_d_experimentalParam3=1002 + ZSTD_d_experimentalParam3=1002, + ZSTD_d_experimentalParam4=1003 } ZSTD_dParameter; @@ -665,7 +670,7 @@ typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same /* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ /*===== ZSTD_CStream management functions =====*/ ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void); -ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); +ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */ /*===== Streaming compression functions =====*/ typedef enum { @@ -681,7 +686,7 @@ typedef enum { : note : multithreaded compression will block to flush as much output as possible. */ } ZSTD_EndDirective; -/*! ZSTD_compressStream2() : +/*! ZSTD_compressStream2() : Requires v1.4.0+ * Behaves about the same as ZSTD_compressStream, with additional control on end directive. * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() * - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode) @@ -727,11 +732,11 @@ ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output /* ***************************************************************************** - * This following is a legacy streaming API. + * This following is a legacy streaming API, available since v1.0+ . * It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2(). * It is redundant, but remains fully supported. - * Advanced parameters and dictionary compression can only be used through the - * new API. + * Streaming in combination with advanced parameters and dictionary compression + * can only be used through the new API. ******************************************************************************/ /*! @@ -786,7 +791,7 @@ typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same /* For compatibility with versions <= v1.2.0, prefer differentiating them. */ /*===== ZSTD_DStream management functions =====*/ ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void); -ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); +ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */ /*===== Streaming decompression functions =====*/ @@ -809,7 +814,7 @@ ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output /*! ZSTD_compress_usingDict() : * Compression at an explicit compression level using a Dictionary. * A dictionary can be any arbitrary data segment (also called a prefix), - * or a buffer with specified information (see dictBuilder/zdict.h). + * or a buffer with specified information (see zdict.h). * Note : This function loads the dictionary, resulting in significant startup delay. * It's intended for a dictionary used only once. * Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */ @@ -852,7 +857,8 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize int compressionLevel); /*! ZSTD_freeCDict() : - * Function frees memory allocated by ZSTD_createCDict(). */ + * Function frees memory allocated by ZSTD_createCDict(). + * If a NULL pointer is passed, no operation is performed. */ ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict); /*! ZSTD_compress_usingCDict() : @@ -874,7 +880,8 @@ typedef struct ZSTD_DDict_s ZSTD_DDict; ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); /*! ZSTD_freeDDict() : - * Function frees memory allocated with ZSTD_createDDict() */ + * Function frees memory allocated with ZSTD_createDDict() + * If a NULL pointer is passed, no operation is performed. */ ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict); /*! ZSTD_decompress_usingDDict() : @@ -890,19 +897,25 @@ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, * Dictionary helper functions *******************************/ -/*! ZSTD_getDictID_fromDict() : +/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+ * Provides the dictID stored within dictionary. * if @return == 0, the dictionary is not conformant with Zstandard specification. * It can still be loaded, but as a content-only dictionary. */ ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); -/*! ZSTD_getDictID_fromDDict() : +/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+ + * Provides the dictID of the dictionary loaded into `cdict`. + * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. + * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); + +/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+ * Provides the dictID of the dictionary loaded into `ddict`. * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); -/*! ZSTD_getDictID_fromFrame() : +/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+ * Provides the dictID required to decompressed the frame stored within `src`. * If @return == 0, the dictID could not be decoded. * This could for one of the following reasons : @@ -916,7 +929,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); /******************************************************************************* - * Advanced dictionary and prefix API + * Advanced dictionary and prefix API (Requires v1.4.0+) * * This API allows dictionaries to be used with ZSTD_compress2(), * ZSTD_compressStream2(), and ZSTD_decompress(). Dictionaries are sticky, and @@ -925,7 +938,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); ******************************************************************************/ -/*! ZSTD_CCtx_loadDictionary() : +/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+ * Create an internal CDict from `dict` buffer. * Decompression will have to use same dictionary. * @result : 0, or an error code (which can be tested with ZSTD_isError()). @@ -944,11 +957,11 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); * to precisely select how dictionary content must be interpreted. */ ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); -/*! ZSTD_CCtx_refCDict() : +/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+ * Reference a prepared dictionary, to be used for all next compressed frames. * Note that compression parameters are enforced from within CDict, * and supersede any compression parameter previously set within CCtx. - * The parameters ignored are labled as "superseded-by-cdict" in the ZSTD_cParameter enum docs. + * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs. * The ignored parameters will be used again if the CCtx is returned to no-dictionary mode. * The dictionary will remain valid for future compressed frames using same CCtx. * @result : 0, or an error code (which can be tested with ZSTD_isError()). @@ -958,7 +971,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, s * Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */ ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); -/*! ZSTD_CCtx_refPrefix() : +/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+ * Reference a prefix (single-usage dictionary) for next compressed frame. * A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end). * Decompression will need same prefix to properly regenerate data. @@ -979,7 +992,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize); -/*! ZSTD_DCtx_loadDictionary() : +/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+ * Create an internal DDict from dict buffer, * to be used to decompress next frames. * The dictionary remains valid for all future frames, until explicitly invalidated. @@ -996,9 +1009,16 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, */ ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); -/*! ZSTD_DCtx_refDDict() : +/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+ * Reference a prepared dictionary, to be used to decompress next frames. * The dictionary remains active for decompression of future frames using same DCtx. + * + * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function + * will store the DDict references in a table, and the DDict used for decompression + * will be determined at decompression time, as per the dict ID in the frame. + * The memory for the table is allocated on the first call to refDDict, and can be + * freed with ZSTD_freeDCtx(). + * * @result : 0, or an error code (which can be tested with ZSTD_isError()). * Note 1 : Currently, only one dictionary can be managed. * Referencing a new dictionary effectively "discards" any previous one. @@ -1007,7 +1027,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, s */ ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); -/*! ZSTD_DCtx_refPrefix() : +/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+ * Reference a prefix (single-usage dictionary) to decompress next frame. * This is the reverse operation of ZSTD_CCtx_refPrefix(), * and must use the same prefix as the one used during compression. @@ -1028,7 +1048,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, /* === Memory management === */ -/*! ZSTD_sizeof_*() : +/*! ZSTD_sizeof_*() : Requires v1.4.0+ * These functions give the _current_ memory usage of selected object. * Note that object memory usage can evolve (increase or decrease) over time. */ ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); @@ -1053,6 +1073,28 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); #if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) #define ZSTD_H_ZSTD_STATIC_LINKING_ONLY +/* Deprecation warnings : + * Should these warnings be a problem, it is generally possible to disable them, + * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual. + * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS. + */ +#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS +# define ZSTD_DEPRECATED(message) ZSTDLIB_API /* disable deprecation warnings */ +#else +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_API +# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) +# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated(message))) +# elif defined(__GNUC__) && (__GNUC__ >= 3) +# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define ZSTD_DEPRECATED(message) ZSTDLIB_API __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler") +# define ZSTD_DEPRECATED(message) ZSTDLIB_API +# endif +#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */ + /**************************************************************************************** * experimental API (static linking only) **************************************************************************************** @@ -1206,6 +1248,12 @@ typedef enum { } ZSTD_forceIgnoreChecksum_e; typedef enum { + /* Note: this enum controls ZSTD_d_refMultipleDDicts */ + ZSTD_rmd_refSingleDDict = 0, + ZSTD_rmd_refMultipleDDicts = 1 +} ZSTD_refMultipleDDicts_e; + +typedef enum { /* Note: this enum and the behavior it controls are effectively internal * implementation details of the compressor. They are expected to continue * to evolve and should be considered only in the context of extremely @@ -1253,6 +1301,11 @@ typedef enum { ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ } ZSTD_literalCompressionMode_e; +typedef enum { + ZSTD_urm_auto = 0, /* Automatically determine whether or not we use row matchfinder */ + ZSTD_urm_disableRowMatchFinder = 1, /* Never use row matchfinder */ + ZSTD_urm_enableRowMatchFinder = 2 /* Always use row matchfinder when applicable */ +} ZSTD_useRowMatchFinderMode_e; /*************************************** * Frame size functions @@ -1286,7 +1339,7 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t * `srcSize` must be the _exact_ size of this series * (i.e. there should be a frame boundary at `src + srcSize`) * @return : - upper-bound for the decompressed size of all data in all successive frames - * - if an error occured: ZSTD_CONTENTSIZE_ERROR + * - if an error occurred: ZSTD_CONTENTSIZE_ERROR * * note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame. * note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`. @@ -1372,6 +1425,23 @@ ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size const void* src, size_t srcSize); +/*! ZSTD_writeSkippableFrame() : + * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer. + * + * Skippable frames begin with a a 4-byte magic number. There are 16 possible choices of magic number, + * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15. + * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so + * the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant. + * + * Returns an error if destination buffer is not large enough, if the source size is not representable + * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid). + * + * @return : number of bytes written or a ZSTD error. + */ +ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, + const void* src, size_t srcSize, unsigned magicVariant); + + /*************************************** * Memory management ***************************************/ @@ -1506,13 +1576,14 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictS * Note that the lifetime of such pool must exist while being used. * ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value * to use an internal thread pool). - * ZSTD_freeThreadPool frees a thread pool. + * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer. */ typedef struct POOL_ctx_s ZSTD_threadPool; ZSTDLIB_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads); -ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); +ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */ ZSTDLIB_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool); + /* * This API is temporary and is expected to change or disappear in the future! */ @@ -1523,10 +1594,12 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( const ZSTD_CCtx_params* cctxParams, ZSTD_customMem customMem); -ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_customMem customMem); +ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_customMem customMem); + /*************************************** * Advanced compression functions @@ -1540,12 +1613,6 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictS * note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel); -/*! ZSTD_getDictID_fromCDict() : - * Provides the dictID of the dictionary loaded into `cdict`. - * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. - * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ -ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); - /*! ZSTD_getCParams() : * @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize. * `estimatedSrcSize` value is optional, select 0 if not known */ @@ -1572,18 +1639,20 @@ ZSTDLIB_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParame /*! ZSTD_compress_advanced() : * Note : this function is now DEPRECATED. * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters. - * This prototype will be marked as deprecated and generate compilation warning on reaching v1.5.x */ -ZSTDLIB_API size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2") +size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, const void* dict,size_t dictSize, ZSTD_parameters params); /*! ZSTD_compress_usingCDict_advanced() : - * Note : this function is now REDUNDANT. + * Note : this function is now DEPRECATED. * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters. - * This prototype will be marked as deprecated and generate compilation warning in some future version */ -ZSTDLIB_API size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary") +size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, const ZSTD_CDict* cdict, @@ -1645,7 +1714,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre /* Controls how the literals are compressed (default is auto). * The value must be of type ZSTD_literalCompressionMode_e. - * See ZSTD_literalCompressionMode_t enum definition for details. + * See ZSTD_literalCompressionMode_e enum definition for details. */ #define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5 @@ -1797,12 +1866,52 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre */ #define ZSTD_c_validateSequences ZSTD_c_experimentalParam12 +/* ZSTD_c_splitBlocks + * Default is 0 == disabled. Set to 1 to enable block splitting. + * + * Will attempt to split blocks in order to improve compression ratio at the cost of speed. + */ +#define ZSTD_c_splitBlocks ZSTD_c_experimentalParam13 + +/* ZSTD_c_useRowMatchFinder + * Default is ZSTD_urm_auto. + * Controlled with ZSTD_useRowMatchFinderMode_e enum. + * + * By default, in ZSTD_urm_auto, when finalizing the compression parameters, the library + * will decide at runtime whether to use the row-based matchfinder based on support for SIMD + * instructions as well as the windowLog. + * + * Set to ZSTD_urm_disableRowMatchFinder to never use row-based matchfinder. + * Set to ZSTD_urm_enableRowMatchFinder to force usage of row-based matchfinder. + */ +#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14 + +/* ZSTD_c_deterministicRefPrefix + * Default is 0 == disabled. Set to 1 to enable. + * + * Zstd produces different results for prefix compression when the prefix is + * directly adjacent to the data about to be compressed vs. when it isn't. + * This is because zstd detects that the two buffers are contiguous and it can + * use a more efficient match finding algorithm. However, this produces different + * results than when the two buffers are non-contiguous. This flag forces zstd + * to always load the prefix in non-contiguous mode, even if it happens to be + * adjacent to the data, to guarantee determinism. + * + * If you really care about determinism when using a dictionary or prefix, + * like when doing delta compression, you should select this option. It comes + * at a speed penalty of about ~2.5% if the dictionary and data happened to be + * contiguous, and is free if they weren't contiguous. We don't expect that + * intentionally making the dictionary and data contiguous will be worth the + * cost to memcpy() the data. + */ +#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15 + /*! ZSTD_CCtx_getParameter() : * Get the requested compression parameter value, selected by enum ZSTD_cParameter, * and store it into int* value. * @return : 0, or an error code (which can be tested with ZSTD_isError()). */ -ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value); +ZSTDLIB_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value); /*! ZSTD_CCtx_params : @@ -1817,13 +1926,13 @@ ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param * These parameters will be applied to * all subsequent frames. * - ZSTD_compressStream2() : Do compression using the CCtx. - * - ZSTD_freeCCtxParams() : Free the memory. + * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer. * * This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams() * for static allocation of CCtx for single-threaded compression. */ ZSTDLIB_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void); -ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); +ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */ /*! ZSTD_CCtxParams_reset() : * Reset params to default values. @@ -1842,7 +1951,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compre */ ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params); -/*! ZSTD_CCtxParams_setParameter() : +/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+ * Similar to ZSTD_CCtx_setParameter. * Set one compression parameter, selected by enum ZSTD_cParameter. * Parameters must be applied to a ZSTD_CCtx using @@ -1857,7 +1966,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_c * Get the requested value of one compression parameter, selected by enum ZSTD_cParameter. * @result : 0, or an error code (which can be tested with ZSTD_isError()). */ -ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value); +ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value); /*! ZSTD_CCtx_setParametersUsingCCtxParams() : * Apply a set of ZSTD_CCtx_params to the compression context. @@ -1983,12 +2092,38 @@ ZSTDLIB_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param */ #define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3 +/* ZSTD_d_refMultipleDDicts + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable + * + * If enabled and dctx is allocated on the heap, then additional memory will be allocated + * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict() + * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead + * store all references. At decompression time, the appropriate dictID is selected + * from the set of DDicts based on the dictID in the frame. + * + * Usage is simply calling ZSTD_refDDict() on multiple dict buffers. + * + * Param has values of byte ZSTD_refMultipleDDicts_e + * + * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory + * allocation for the hash table. ZSTD_freeDCtx() also frees this memory. + * Memory is allocated as per ZSTD_DCtx::customMem. + * + * Although this function allocates memory for the table, the user is still responsible for + * memory management of the underlying ZSTD_DDict* themselves. + */ +#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4 + + /*! ZSTD_DCtx_setFormat() : + * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter(). * Instruct the decoder context about what kind of data to decode next. * This instruction is mandatory to decode data without a fully-formed header, * such ZSTD_f_zstd1_magicless for example. * @return : 0, or an error code (which can be tested using ZSTD_isError()). */ -ZSTDLIB_API size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); +ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead") +size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); /*! ZSTD_decompressStream_simpleArgs() : * Same as ZSTD_decompressStream(), @@ -2012,7 +2147,7 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs ( /*===== Advanced Streaming compression functions =====*/ /*! ZSTD_initCStream_srcSize() : - * This function is deprecated, and equivalent to: + * This function is DEPRECATED, and equivalent to: * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); @@ -2021,15 +2156,15 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs ( * pledgedSrcSize must be correct. If it is not known at init time, use * ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs, * "0" also disables frame content size field. It may be enabled in the future. - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t -ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize); /*! ZSTD_initCStream_usingDict() : - * This function is deprecated, and is equivalent to: + * This function is DEPRECATED, and is equivalent to: * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); @@ -2038,15 +2173,15 @@ ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, * dict == NULL or dictSize < 8, in which case no dict is used. * Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if * it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy. - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t -ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel); /*! ZSTD_initCStream_advanced() : - * This function is deprecated, and is approximately equivalent to: + * This function is DEPRECATED, and is approximately equivalent to: * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); * // Pseudocode: Set each zstd parameter and leave the rest as-is. * for ((param, value) : params) { @@ -2058,23 +2193,24 @@ ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, * dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy. * pledgedSrcSize must be correct. * If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN. - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t -ZSTD_initCStream_advanced(ZSTD_CStream* zcs, +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /*! ZSTD_initCStream_usingCDict() : - * This function is deprecated, and equivalent to: + * This function is DEPRECATED, and equivalent to: * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); * ZSTD_CCtx_refCDict(zcs, cdict); - * + * * note : cdict will just be referenced, and must outlive compression session - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); /*! ZSTD_initCStream_usingCDict_advanced() : * This function is DEPRECATED, and is approximately equivalent to: @@ -2089,18 +2225,21 @@ ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDi * same as ZSTD_initCStream_usingCDict(), with control over frame parameters. * pledgedSrcSize must be correct. If srcSize is not known at init time, use * value ZSTD_CONTENTSIZE_UNKNOWN. - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t -ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, const ZSTD_CDict* cdict, ZSTD_frameParameters fParams, unsigned long long pledgedSrcSize); /*! ZSTD_resetCStream() : - * This function is deprecated, and is equivalent to: + * This function is DEPRECATED, and is equivalent to: * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but + * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be + * explicitly specified. * * start a new frame, using same parameters from previous frame. * This is typically useful to skip dictionary loading stage, since it will re-use it in-place. @@ -2110,9 +2249,10 @@ ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, * For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs, * but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead. * @return : 0, or an error code (which can be tested using ZSTD_isError()) - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x + * This prototype will generate compilation warnings. */ -ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); typedef struct { @@ -2199,8 +2339,7 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); ZSTD_CCtx object can be re-used multiple times within successive compression operations. Start by initializing a context. - Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression, - or ZSTD_compressBegin_advanced(), for finer parameter control. + Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression. It's also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx() Then, consume your input using ZSTD_compressContinue(). @@ -2225,15 +2364,17 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); /*===== Buffer-less streaming compression functions =====*/ ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel); ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel); -ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */ ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */ -ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */ ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */ ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); - +/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */ /** Buffer-less streaming decompression (synchronous mode) diff --git a/thirdparty/zstd/common/zstd_errors.h b/thirdparty/zstd/zstd_errors.h index 6d0d003004..fa3686b772 100644 --- a/thirdparty/zstd/common/zstd_errors.h +++ b/thirdparty/zstd/zstd_errors.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc. + * Copyright (c) Yann Collet, Facebook, Inc. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the diff --git a/version.py b/version.py index 517a47f568..663f90b942 100644 --- a/version.py +++ b/version.py @@ -7,3 +7,4 @@ status = "dev" module_config = "" year = 2021 website = "https://godotengine.org" +docs = "latest" |